FFmpeg:如何限制视频输出的比特率?

3
对于一个在绿幕前拍摄的2GB原始视频文件,我想要添加alpha通道。但我的问题是,输出文件对我来说太大了(约为输入文件的20倍),并且视频编辑器OpenShot似乎无法处理如此巨大的文件。比较输入和输出文件的属性显示,输入文件的比特率约为15k,而结果文件的比特率为150k-250k,这似乎指出了问题所在。
(顺便说一下,在该过程中,我还想丢弃片段的第一部分以及其音频通道,并将帧速率从30降低到24 fps,这些都能很好地完成。)
这是我的命令:
ffmpeg.exe -i <in.MOV> -vf chromakey=0x007d06:0.15:0.0 -ss 40.420 -r 24 -b:v 15840k -maxrate 15840k -bufsize 15840k -an -c:v <encoder> <out.mov>

我理解的参数如下:

参数的含义:

-i <in.mov> ... infile
-vf chromakey=0x007d06:0.15:0.0 ... chroma, tolerance & blend of greenscreens
-ss 40.420 ... skip before second 40.420 (this works)
-r 24 ... frame rate (this works, too)
-b:v 15804k ... bitrate (seemingly no effect)
-maxrate 15840k ... maximum BitRate (seemingly no effect)
-bufzise 15840k ... Buffer size (can't tell)
-an ... no audio channel (works fine)
-c:v <encoder> ... Video Encoder (ffvhuff, png, qtrle and tiff were tried, all to the same result)
<out.mov> ... outfile
b、maxrate和bufsize被描述为全局选项。无论设置如何,在处理过程中,最高可报告高达3000000kbits/s(tiff)的比特率。 (我还添加了-pixel_format argb,但似乎被忽略了,ffmpeg始终报告要写yuva420p。) 我错过了什么?
1个回答

3
您尝试的所有编码器都是无损的。您不能为无损编码器设置比特率。
请尝试VP8/9,即-c:v libvpxlibvpx-vp9,并使用像素格式-pix_fmt yuva420p。删除比特率/最大比特率/缓冲区大小,并设置-crf N -b:v 0,其中N的范围从0到63。请使用20的值进行尝试。向上/向下调整以获得更小/更好的视频流。

非常感谢!不幸的是,没有成功。libvpx给我“使用auto_alt_ref进行透明度编码无法工作”。(添加-auto_alt_ref 0会产生“未识别的选项”错误。)我已经尝试了18个编码器,使用您的提示。它们中的每一个都失败了(由于各种原因)。Libvpx-vp9似乎可以工作(没有警告),尽管速度很慢(0.03,即40'剪辑需要50小时),但在视频编辑器中,我渲染的3秒钟仍然没有显示透明度。是否有一个列表,列出编码器是否具有损失,并且与包含alpha的像素格式兼容?我找不到任何东西。 - Mat
1
它是-auto-alt-ref 0。我的设置仅适用于VPx编码器,它们不是通用的。 - Gyan
我不熟悉Openshot,但你是否可以使用单独的层/视频作为阿尔法通道,即“alpha matte”? - Gyan
我并不确定,但我恐怕不是。 - Mat
我尝试降低原始视频(我猜是yuv420p)的比特率以减小文件大小。这个答案为我的任务带来了解决方案,特别是libvpx编码器和“-auto-alt-ref 0”部分。以下命令对我非常有效:ffmpeg -i input_video.avi -c:v libvpx -pix_fmt yuva420p -crf 20 -b:v 0 -auto-alt-ref 0 output.avi。感谢这个答案。 - marco
我有一个额外的问题:尽管我很喜欢从1.4GB降到650KiB,但视频质量仍然很差。但是在视频中,我丢失了一些重要的信息。关于参数之类的东西,有哪些好的开始调整视频质量的方法?将crf值增加到60并没有产生可接受的结果。在1MiB和100MiB之间的所有东西都可以接受。 - marco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接