使用 ffmpeg 输出两个短片,一个是编解码器副本,一个是转码,从完全相同的时间开始

使用 ffmpeg 输出两个短片,一个是编解码器副本,一个是转码,从完全相同的时间开始

使用 ffmpeg,我想通过制作短片然后从中获取一系列屏幕截图来比较各种转码选项与原始视频。

问题是,我无法获取同时开始的编解码器复制和转码剪辑。我使用类似

ffmpeg -i in.mp4 -ss 2:00 -t 30 -c copy out.mp4

即使我将其放在-ss输入文件之前,视频的开始时间也会与具有相同寻道时间的转码剪辑不同。

我尝试使用 ffprobe 来识别关键帧,使用以下命令:

ffprobe -loglevel verbose -select_streams v -show_entries \
   packet=pts_time,flags -of csv=print_section=1 \
   -read_intervals 01:50%+60 in.mp4

这很好地输出了从 1:50 开始持续 60 秒的数据包列表,并用“K”标识关键帧。但如果我将搜索时间更改为关键帧时间,编解码器复制和转码的开始时间会大不相同。如果我搜索关键帧之前的数据包时间,两者的开始时间非常接近,但仍然不一样。

有没有办法做到这一点?

编辑:我实际上是使用 mkv 输入文件获得了这些结果。后来我尝试了 mp4,并精确地搜索关键帧(在使用 ffprobe 找到它们之后)对此文件有效,因此编解码器复制和转码剪辑从同一帧开始。(尽管如果我使用-avoid_negative_ts 1,则生成的剪辑会相差一帧。)不知道为什么 mkv 不起作用。

相关内容