我想在视频的任何时间戳处剪切视频的开头,需要非常准确,因此最近的关键帧不够好。
此外,这些视频相当长 - 一小时或更长时间 - 因此如果可能的话,我希望避免完全重新编码,或者只重新编码总持续时间的最小部分。因此,我想最大限度地利用-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秒钟。
- 无需重新编码,使用
-vcodec copy
ffmpeg concat
连接第一个短视频片段(5秒钟)和第二个长视频片段。我知道/可以推断出(2)和(3)的命令,但是不确定需要哪些命令来完成(1)。