如何使用FFMPEG实现最佳的FLV视频质量?

12

我希望达到最佳质量的FLV并且文件尺寸最小化,毕竟这不是每个人的目标吗?这些视频将进行流媒体传输,如果这有任何区别。

目前,我的视频宽度不超过320像素,有些是宽屏,因此高度略小于240像素。目前转换后FLV的质量相当差。

当前命令:

> ffmpeg -i video.mov -ar 22050 -ab 32 -f flv -s 320x240 -aspect 4:3 video.flv

使用 -b 标志来调整视频比特率。默认值为 200。 - James
1
使用"-q"标志来设置"质量"。默认情况下它很低。这就是为什么不使用它进行转换会使视频质量变差的原因。 - Searush
3个回答

12

默认情况下,flv的默认值为200Kb,并且由于您没有覆盖qmax并将其设置为30,它可能会产生接近该值的输出。

  • 通过将qmax设置为较低的值来强制质量控制提高比特率以满足要求。
  • 使用-vb 400k增加比特率

在我刚试过的测试视频中,-qmax 10可以获得可接受的输出。使用qmax和qmin设置较低和较高的可接受质量是首选方法。


谢谢您...您能解释一下-qmax实际上是在做什么吗?它的值代表什么? - dcolumbus
这些值控制量化器对输入的严格程度。q-scale为1将尽可能地保留。在编码帧的过程中,FFmpeg会计算出q-scale并根据您的qmin和qmax值决定要丢弃/保留多少内容。如果不在这些值范围内,则会夹紧到最近的值并使用它。基本上,它将q-scale保持在您设置的限制范围内,并相应地分配比特,当它成功压缩时节省比特,并在下降时使用它们。 - Russ
1
那么有什么好的例子可以展示出优质的结果呢……请记住,默认设置可能会产生一些不理想的效果。-qmin 8 和 -qmax 10 是一个好选择吗?还是我需要对 -qscale 进行一些处理?感谢您的帮助。 - dcolumbus
1
由于qmax和qmin值与原始文件的质量有关,所以我担心这只需要一些实验。您可以使用-ss hh:mm:ss和-t <sec>仅对文件的某个部分进行编码。尝试从-qmin 2 -qmax 8开始。当前的qscale和比特率在编码时显示。如果质量仍然太低,请减小qmax(例如-qmax 6),如果质量可以但比特率太高,请增加qmin(例如-qmin 4)。有时候,对于flv文件,您只需设置比特率并让其自动调整(-b 400k),不要忘记加上“k”,否则它会认为是位。 - Russ
Russ,非常感谢你在FFMPEG方面给我帮助。我会测试它,并确保它可以满足我的需求。你是否知道为什么当我尝试设置视频比例为宽屏时,视频总是保持全屏?我已经尝试过使用宽高比,然后使用实际视频大小,但似乎都没有起作用... - dcolumbus

8

迄今为止,我并没有找到什么好的解决方案 - 多数选项对我的输入文件没有任何作用,而且始终产生质量很差的结果 - 但是以下方法非常有效:

ffmpeg -qscale 4 -i infile.avi outfile.flv

减小qscale值可以提高质量,增加qscale值则可以减小文件大小。参考文档

-qscale n中的n取值范围为1-31,其中1表示最高质量/最大文件大小,31表示最低质量/最小文件大小。

在Mac OS X 10.6.8上测试通过。

这对我也非常有效。比我通过调整qmax和qmin能够达到的质量要高得多! - ATG

3

我认为最大化质量/大小比率的最佳解决方案是完全放弃FFMPEG的"flv"编码,改用H.264。

我通常使用Handbrake将文件转换为MP4 / AAC,然后只使用FFMPEG将文件重新封装到FLV容器中。

ffmpeg -i input_file.mp4 -vcodec copy -acodec copy -y output_file.flv

还有很多手刹参数,一些有趣的预设可以在这里找到:http://trac.handbrake.fr/wiki/BuiltInPresets


但这一切都是在服务器端完成的...不能使用手刹。 - dcolumbus
我说的是Handbrake的命令行界面:当然是HandBrakeCLI。 - SirDarius
不是这样的。只有使用CLI程序才能实现在只能使用CLI程序的情况下完成任务。 - SirDarius
2
如果你使用ffmpeg(在avconv中是-c:v libx264)并且使用-vcodec libx264,就可以避免这种复杂的情况,并获得相同的结果。顺便说一下,我也建议在flv容器中使用h.264编解码器。 - James
@James 这是一个好观点。老实说,当使用AVC时,我建议不要使用FLV格式,因为这种容器格式不太适应H.264的复杂性。例如,FLV仅知道五种类型的视频帧,这些帧类型无法很好地转换成H.264帧类型。由于SPS NALU仅出现在文件开头,随机访问变得更加困难。所以我建议改用H.264/MP4(F4V子集也可以)。 - SirDarius
显示剩余2条评论

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