通过设置最终大小来转换video

有没有办法使用ffmpeg(或任何其他基于CLI的video转换器)设置video转换的最大最终大小?

就像我有一个100mb的video并希望将其转换为具有最高质量的10mbvideo一样,考虑到最终格式并不重要。

从100mb到10mb是一个略微不切实际的 90%尺寸下降,但我将举例说明减少到50mb创建一个H.264video,这是一个更合理的 50%减小尺寸以及使用HEVC减少到40mb。

我使用以下示例文件:

wget http://dl3.h265files.com/TearsOfSteel_720p_h265.mkv 

您可以使用此示例文件来确认我给出的以下结果,也许您可​​以自己进一步实验 。 MediaInfo显示以下下载文件:

 mediainfo \ --Inform="General;Duration=%Duration/String3%\nFile size=%FileSize/String1%" \ TearsOfSteel_720p_h265.mkv Duration=00:12:14.058 <----- File size=101 MiB <----- 

箭头当然是我自己的! 那么你可能有两个非常好的选择:

  1. 重新编码为H.264
  2. 重新编码为HEVC

1.重新编码为H.264(50mb)

H.264现在被广泛接受,是输出video文件的绝佳选择。 计算所需50mb的输出比特率的公式将是:

 (50 MiB * 8192 [converts MiB to kBit]) / 734 seconds = ~558 kBit/s total bitrate 558 - 128 kBit/s (desired audio bitrate) = 430 kBit/s video bitrate 

要完成此操作,请使用以下FFmpeg 2 pass命令:

 ffmpeg -y -i TearsOfSteel_720p_h265.mkv \ -c:v libx264 -b:v 430k -pass 1 \ -c:a libmp3lame -b:a 128k -f mp4 /dev/null && \ ffmpeg -i TearsOfSteel_720p_h265.mkv \ -c:v libx264 -b:v 430k -pass 2 \ -c:a libmp3lame -b:a 128k TearsOfSteel_smaller.mp4 

由此产生的文件大小为49.4MiB,具有相当合理但不惊人的观看质量。 实际上,文件大小减少50%,video比特率大幅下降,这相当不错!

2.重新编码为HEVC(40mb)

另一种选择(如emk2203所示)是以较低的比特率重新编码现有的HEVC流,这次目标是40mb,因为HEVC声称在较低的比特率下具有更好的质量。

这次的公式是:

 (40 MiB * 8192 [converts MiB to kBit]) / 734 seconds = ~446 kBit/s total bitrate 446 - 128 kBit/s (desired audio bitrate) = 318 kBit/s video bitrate 

和FFmpeg 2传递命令行是:

 ffmpeg -y -i TearsOfSteel_720p_h265.mkv \ -c:v libx265 -x265-params pass=1 -b:v 318k \ -c:a libmp3lame -b:a 128k -f mp4 /dev/null && \ ffmpeg -i TearsOfSteel_720p_h265.mkv \ -c:v libx265 -x265-params pass=2 -b:v 318k \ -c:a libmp3lame -b:a 128k TearsOfSteel_smaller.mp4 

这提供了一个40mb的文件,质量非常合理

结论:

从这些示例中,您可以通过减少公式中所需的MiB并观察随后的查看质量来进一步进行实验 。 玩得开心!!

参考文献:

  • H.264video编码指南:2通过编码 FFmpeg trac文章,它提供了关于2通道编码到H.264的确定且容易遵循的信息。
  • FFmpeg和H.265编码指南 FFmpeg trac gudelines,用于使用x265包装器对HEVC进行编码。
  • FFmpeg和VP9编码指南另一个选项是对VP9进行编码,所有细节都在此FFmpeg trac页面上。 你再次使用2遍编码部分......

是。 选择video编解码器(x264是一个很好的通用编解码器)并选择分辨率,保留默认设置,但是使用设置的平均比特率进行2遍转换。

video压缩的快速教训:video复杂度在整个video中发生变化,因此如果您在整个过程中压缩到相同的视觉质量水平,实际比特率将会上下波动。 如果压缩到固定比特率,由于比特率太低,和/或使用的比特率对于低复杂度的部分来说太高,因此质量将在高复杂度的比特中变坏。 因此,你可以尽可能地让它以恒定的质量为目标,让比特率尽可能地波动。 但是,如果压缩器的目标是特定的文件大小,它不知道video复杂性是否会在尚未转换的部分中上升或下降,这就是为什么人们在瞄准时使用2遍转换的原因特定文件大小。

您需要将输出指定为比特率(音频和video,加上容器有轻微的开销),因此您需要一个计算器来将文件大小和持续时间转换为比特率。