FFMPEG 尝试将 8K 视频缩小到 4k,同时在一个命令中在侧面和底部添加框

FFMPEG Trying to downscale an 8K video to 4k while adding boxes on the sides and bottom in one command

我正在拍摄一个非常高质量的 8k 视频,我想尝试从中获得尽可能好的 4k 视频。但同时我想删除视频的两侧和底部,但不是顶部,制作几乎 'T' 形状的视频,如下所示:

据我了解,我应该可以在一个命令中完成所有这些操作,但我 运行 遇到了一些麻烦。这是我尝试过的命令:

第一个基于 post:

ffmpeg -i "8k.test.mp4" -preset slow -vcodec libx265 -crf 18 -movflags faststart -filter_complex "[1]scale=3840:2160 [2]drawbox=w=384:h=1280:x=0:y=640:t=fill,drawbox=w=384:h=1280:x=3840-384:y=640:t=fill,drawbox=w=3840:h=300:x=0:y=2160-300:t=fill" -an -c:a copy output.mp4

错误

[AVFilterGraph @ 0000029c747cf540] Unable to parse graph description substring: "drawbox=w=384:h=1280:x=0:y=640:t=fill,drawbox=w=384:h=1280:x=3840-384:y=640:t=fill,drawbox=w=3840:h=300:x=0:y=2160-300:t=fill" Error initializing complex filters. Invalid argument


第二个基于 post:

ffmpeg -i "8k.test.mp4" -preset slow -vcodec libx265 -crf 18 -movflags faststart -vf scale=3840:2160, drawbox=w=384:h=1280:x=0:y=640:t=fill,drawbox=w=384:h=1280:x=3840-384:y=640:t=fill,drawbox=w=3840:h=300:x=0:y=2160-300:t=fill -an -c:a copy output.mp4

错误:

[NULL @ 000001f5ee5d1500] Unable to find a suitable output format for 'drawbox=w=384:h=1280:x=0:y=640:t=fill,drawbox=w=384:h=1280:x=3840-384:y=640:t=fill,drawbox=w=3840:h=300:x=0:y=2160-300:t=fill' drawbox=w=384:h=1280:x=0:y=640:t=fill,drawbox=w=384:h=1280:x=3840-384:y=640:t=fill,drawbox=w=3840:h=300:x=0:y=2160-300:t=fill: Invalid argument


我好像误会了什么,根据文档,同一类别中的命令应该用 'comma' 分隔,不同类别中的命令应该用 'semicolon' 分隔。但是我都试过了都没有用。

Filters in the same linear chain are separated by commas, and distinct linear chains of filters are separated by semicolons.

来自 here

有人知道怎么弄吗?

看来我找到了解决办法,我在逗号后面加了空格,这样会导致问题。

正确的命令如下:

ffmpeg -i <INPUT>.mp4 -preset slow -vcodec libx265 -crf 18 -movflags faststart -vf scale=3840:2160,drawbox=w=450:h=1280:x=0:y=640:t=fill,drawbox=w=450:h=1280:x=3840-450:y=640:t=fill,drawbox=w=3840:h=400:x=0:y=2160-400:t=fill -an -c:a copy <OUTPUT>.mp4

但是,在我的用例中有一个旁注,也许有人可以尝试解释一下。

如果我 运行 上面的命令,我将得到一个质量非常好的视频文件和我想要的方框,但文件大小为 350MB,持续 20 秒。

但是如果我运行下面的命令:

ffmpeg -i <INPUT-FILE> -vf scale=3840:2160 -preset slow -vcodec libx265 -crf 0 -movflags faststart -an -c:a copy <OUTPUT-NAME>.mp4 

然后用这个命令跟随它:

ffmpeg -i <INPUT-FILE> -vf drawbox=w=450:h=1280:x=0:y=640:t=fill,drawbox=w=450:h=1280:x=3840-450:y=640:t=fill,drawbox=w=3840:h=400:x=0:y=2160-400:t=fill -c:a copy <OUTPUT-NAME>.mp4 

然后我得到一个只有106MB的文件,但质量差异可以忽略不计。我很高兴我有 运行 所有这些测试,因为在我的情况下,我更希望文件大小小于三分之一,但质量难以区分。

我用https://www.diffchecker.com/image-diff/来检查差异。