从视频中删除所有非关键帧而不重新编码
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 多,所以如果我遗漏了一些类型,我会更新上面的类型。
我有一个 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 多,所以如果我遗漏了一些类型,我会更新上面的类型。