setpts 和 atempo 过滤器

setpts 和 atempo 过滤器

我想要达到的效果与我得到的相同(假设速度提高 1.7 倍):

mplayer -af scaletempo -speed 1.7 myvideo.mp4

这个命令正好给了我想要的结果,但我需要以某种方式将结果保存在文件中。

我不想得到的是这个:

mplayer -vf scale -speed 1.7 myvideo.mp4

我需要在文件中完成此操作(文件必须重新编码),因为我必须在 Linux 机器之外播放它。

CLI 是首选,因为我想用脚本来实现。我在 Google 上搜索了很多,找到了很多建议 - ffmpeg、mencoder 和许多奇怪的不可编译工具,但没有一个能给我准确的结果。实际上,这些工具几乎没有一个能起作用(我想它们在很久很久以前曾经起作用过)。

不幸的是,我升级并使用了 Ubuntu 13.04,似乎几乎所有解决方案在这个版本中都不起作用 ;(

答案1

setpts 和 atempo 过滤器

使用ffmpeg示例设定点阿滕波过滤器:

快速动作

ffmpeg -i input -filter_complex "[0:v]setpts=PTS/2[v];[0:a]atempo=2[a]" -map "[v]" -map "[a]" output

慢动作

ffmpeg -i input -filter_complex "[0:v]setpts=PTS/0.5[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" output

atempo 值的范围是 0.5-100。

设置点和橡皮筋过滤器

或者,您可以使用橡皮筋filter 而不是 atempo,这样听起来可能会更好,但是你ffmpeg需要使用 进行编译--enable-librubberband。你可以参考ffmpeg -filters看看是否可以使用它。

快速动作

ffmpeg -i input -filter_complex "[0:v]setpts=PTS/2[v];[0:a]rubberband=tempo=2[a]" -map "[v]" -map "[a]" output

慢动作

ffmpeg -i input -filter_complex "[0:v]setpts=PTS/0.5[v];[0:a]rubberband=tempo=0.5[a]" -map "[v]" -map "[a]" output

答案2

尝试这个:

视频:

mkfifo stream.yuv
mplayer -vf scale -speed 1.7 -vo yuv4mpeg source.avi

cat stream.yuv | yuv2lav -o result.avi

或者

ffmpeg -i source.avi -filter "setpts=PTS/1.7" result.avi

声音的:

mplayer -vf scale -speed 1.7 -vo null -ao pcm -ao pcm:file=result.wav source.avi

结果文件:result.avi、result.wav

相关内容