从视频中删除所有非关键帧而不重新编码

Remove all non key frames from video without re-encoding

我有一个 HEVC mkv 视频,我需要从中删除除关键帧之外的所有内容,而无需重新编码整个内容。

我发现我可以使用这个额外的关键帧

ffmpeg -i full.mkv -c:v copy -vf "select=eq(pict_type\,PICT_TYPE_I)" key.mkv

但我得到:

Filtergraph 'select=eq(pict_type\,PICT_TYPE_I)' was defined for video output stream 0:0 but codec copy was selected.
Filtering and streamcopy cannot be used together.

我该怎么办?

您必须为此使用比特流过滤器 filter_units

ffmpeg -i test.mkv -c copy -map v -bsf:v "filter_units=pass_types=16-23|32-34" key.mkv

这只会通过来自 HEVC 流的随机访问图片。这应该涵盖了其中的大部分,但是 HEVC 的关键帧类型比 H.264 多,所以如果我遗漏了一些类型,我会更新上面的类型。