如何使用 ffmpeg 精确分割和合并视频以尊重入点/出点

如何使用 ffmpeg 精确分割和合并视频以尊重入点/出点

我正在学习如何使用 分割和合并视频ffmpeg。目前我正在练习 799 KB MP4,one_through_ten-timestamped.mp4,其中每一帧都有一个刻印的“帧号”(直到第 40 帧,刻印的帧号每隔一帧才会增加一次)。

我使用的命令是:

ffmpeg -f concat -i one_through_ten_edit_list.txt -c copy one_through_ten_edited.mp4

哪里one_through_ten_edit_list.txt

file one_through_ten-timestamped.mp4
inpoint 00:00:01.500
outpoint 00:00:05.000
file one_through_ten-timestamped.mp4
inpoint 00:00:09.500
outpoint 00:00:13.000

ffmpeg当我在输出视频中执行此命令时出现了几个问题:

  1. 输出从源视频的开头开始,而不是 1.5 秒后。
  2. 第二个输入视频连接后的音频有延迟(在 QuickTime Player 上播放时。在 上播放没问题ffplay)。

当我在MPEG 流剪辑,生成的视频将按预期播放。以下是一些表格输出ffprobeone_through_ten-timestamped.mp4显示了 ffmpeg 视频和 MPEG Streamclip 在连接点上的不同之处:

第一节开始 第一节结束 mpeg streamclip 开始第一 第二段开始 第二段结束

请注意,ffmpegMPEG Streamclip 和 MPEG Streamclip 处理第二段的方式大致相同,但ffmpeg似乎不尊重inpoint第一个输入视频。请注意,在我的 MP4 中,每帧有一个数据包。

ffmpeg从 2.8 版(可能更早)到 3.3.3 版都是这样。我是不是漏掉了命令行或编辑列表选项?肯定有人已经成功地使用它ffmpeg来分割和合并视频(无需重新压缩)。

答案1

您可以尝试添加-async 1

ffmpeg -f concat -async 1 -safe 0 -i one_through_ten_edit_list.txt -c copy one_through_ten_edited.mp4

相关内容