如何在 Linux 中加速视频而不失真?

Via*_*nov 9 audio video linux ffmpeg ubuntu

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

mplayer -af scaletempo -speed 1.7 myvideo.mp4
Run Code Online (Sandbox Code Playgroud)

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

我不想得到的是:

mplayer -vf scale -speed 1.7 myvideo.mp4
Run Code Online (Sandbox Code Playgroud)

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

CLI 更可取,因为我想在脚本中制作它。谷歌搜索了很多,发现了很多建议 - ffmpeg、mencoder 和许多有趣的异国不可编译工具,没有任何东西给我确切的结果。实际上,这几乎没有任何效果(我猜它在很久以前的某个时间有效)。

不幸的是,我升级并使用了 Ubuntu 13.04,似乎几乎所有解决方案都不适用于此版本;(

llo*_*gan 18

设置和节奏过滤器

使用实例ffmpegsetptsAtempo公司的过滤器:

快动作

ffmpeg -i input -filter_complex "[0:v]setpts=PTS/2[v];[0:a]atempo=2[a]" -map "[v]" -map "[a]" output
Run Code Online (Sandbox Code Playgroud)

慢动作

ffmpeg -i input -filter_complex "[0:v]setpts=PTS/0.5[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" output
Run Code Online (Sandbox Code Playgroud)

速度值的范围是 0.5-100。

设置和橡皮筋过滤器

或者,您可以使用橡皮筋过滤器代替 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
Run Code Online (Sandbox Code Playgroud)

慢动作

ffmpeg -i input -filter_complex "[0:v]setpts=PTS/0.5[v];[0:a]rubberband=tempo=0.5[a]" -map "[v]" -map "[a]" output
Run Code Online (Sandbox Code Playgroud)