如何用ffmpeg廉价地“撤消”马赛克(即将图像分成两半或四分之一?

问题描述 投票:0回答:1

FFMPEG使接收多个输入并将它们堆叠到一个镶嵌视频中变得容易。我正在寻找一种相反的方法,具体地说,我想获取一个视频流,该视频流由堆叠成象限的四个流组成,并将其拆分为四个由坐标组成的独立视频

video1 = [0, 0.5*w, 0, 0.5*h]
video2 = [0.5*w, w, 0, 0.5*h]
video3 = [0, 0.5*w, 0.5*h, h]
video4 = [0.5*w, w, 0.5*h, h]

[我知道我可以使用crop过滤器通过四个单独的ffmpeg调用来做到这一点,但这似乎不必要地昂贵。有没有办法在一个电话中做到这一点?

ffmpeg crop image-segmentation
1个回答
1
投票

作物过滤器

您可以在一个命令中使用四个crop过滤器:

ffmpeg -i input -filter_complex "[0]crop=iw/2:ih/2:0:0[tl];[0]crop=iw/2:ih/2:ow:0[tr];[0]crop=iw/2:ih/2:0:oh[bl];[0]crop=iw/2:ih/2:ow:oh[br]" -map "[tl]" topleft.mp4 -map "[tr]" topright.mp4 -map "[bl]" bottomleft.mp4 -map "[br]" bottomright.mp4

位流过滤器

比特流过滤器与普通过滤器不同。普通滤波器需要解码和编码。比特流对编码的流数据进行操作,并在不执行解码的情况下执行比特流级别的修改。

h264_metadatahevc_metadata比特流过滤器可以在H.264和H.265 / HEVC的SPS中编辑窗口裁剪偏移。这意味着它可以更改这些值,而无需重新编码视频。文件大小将保持不变,但播放器将根据您设置的裁剪值来裁剪视频。

H.264 320x240输入的示例:

ffmpeg -i input.mp4 -bsf:v h264_metadata=crop_right=160:crop_bottom=120 -c copy topleft.mp4 -bsf:v h264_metadata=crop_left=160:crop_bottom=120 -c copy topright.mp4  -bsf:v h264_metadata=crop_right=160:crop_top=120 -c copy bottomleft.mp4 -bsf:v h264_metadata=crop_left=160:crop_top=120 -c copy bottomright.mp4

这些字段以像素为单位设置。请注意,如果色度被二次采样,则某些大小可能无法表示(基本上仅用于偶数值)。

© www.soinside.com 2019 - 2024. All rights reserved.