为什么 ffmpeg 没有缩短这个视频?

为什么 ffmpeg 没有缩短这个视频?

我正在尝试将视频速度提高一倍。

我使用以下命令:

ffmpeg -i output.mp4 -filter:v "setpts=0.5*PTS" output2.mp4

ffmpeg -i output.mp4 -vf "setpts=0.5*PTS" output3.mp4

我在整个互联网上都发现这是标准方法。

但是,我所有文件的长度都相同:

joe@joe-Amd-Am4-Home-Office:~$ for file in *.mp4; do duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file"); echo "$file: $duration seconds"; done
output2.mp4: 373.014000 seconds
output3.mp4: 373.014000 seconds
output.mp4: 373.014000 seconds

发生了什么事?我该如何正确地加快视频速度?我正在使用 ubuntu。

答案1

我的第一个猜测是 PTS 方法,记录在案这里其工作原理是“改变每个视频帧的显示时间戳 (PTS)”,玩家会尊重并加快步伐。但也许这并没有改变已报告ffprobe所见视频的长度。

但摆弄我手头的一个随机测试 mp4 后发现,虽然视频加速了,但音频却没有。这可以解释为什么我也通过 看到每个视频的时间戳相同ffprobe。这与上面链接的文档中的一条注释一致:

请注意,在下面的例子中,音频流没有改变,因此最好用 将其禁用-an

另一个答案超级用户提供以下复杂的过滤器来加速视频和音频:

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

这个对我有用,通过显示一半的长度ffprobe

相关内容