【发布时间】:2020-12-12 07:49:06
【问题描述】:
我想在任何特定时间戳的开头剪切视频,并且它需要精确,因此最近的关键帧不够好。
此外,这些视频相当长 - 一个小时或更长时间 - 所以我想尽可能避免重新编码,否则只重新编码总时长的一小部分.于是,想最大限度地利用-vcodec copy。
如何使用ffmpeg 完成此操作?
注意:请参阅场景,以及我自己对以下可能解决方案的粗略想法。
场景:
- 原创视频
- 1:00:00 的长度
- 每 10 秒有一个关键帧
- 所需切割:
- 从 0:01:35 到结束
- 尝试 #1:
- 使用
-ss 0:01:35 -i blah.mp4 -vcodec copy,结果是一个文件,其中: - 音频从 0:01:30 开始
- 视频也从 0:01:30 开始
- 这太早了启动音频和视频
- 使用
- 使用
-i blah.mp4 -ss 0:01:35 -vcodec copy,结果是一个文件,其中:- 音频从 0:01:35 开始,
- 但视频在前 5 秒内为空白/黑色,
- 直到 0:01:40,视频开始时
- 这会准时启动音频, 但视频开始太晚了
粗略的想法
- (1) 将 0:01:30 剪切到 0:01:40
- 重新编码以获得新的关键帧, 包括一个在目标时间 0:01:35
- 然后剪掉它以获得从 0:01:35 到 0:01:40 的 5 秒
- (2) 将 0:01:40 切到最后
- 无需重新编码,使用
-vcodec copy
- 无需重新编码,使用
- (3)
ffmpeg concat第一个短片(第5个第二个) 与第二个长剪辑
我知道/可以计算出 (2) 和 (3) 的命令,但不确定 (1) 需要哪些命令。
【问题讨论】:
-
请注意,在我的情况下,使用带有 mp4 容器的编辑列表不是一个选项,因为目标视频播放器以及我在后处理此视频时的后续步骤
-
要指定关键帧间隔(GOP 大小),请使用
-g标志。 trac.ffmpeg.org/wiki/EncodingForStreamingSites