通过设置最终大小来转换视频

Asm*_*ust 3 ffmpeg video-conversion

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

就像如果我有一个100MB的视频,并希望将其转换为最高质量的一个10MB的视频可能,考虑到最终的格式并不重要。

and*_*.46 11

从 100mb 到 10mb大小减少 90%有点不切实际,但我将举一个创建 H.264 视频的示例,将大小减少到 50mb,这是更合理的大小减少 50% 以及使用 HEVC 减少到 40mb。

我正在使用以下示例文件:

wget http://dl3.h265files.com/TearsOfSteel_720p_h265.mkv
Run Code Online (Sandbox Code Playgroud)

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

mediainfo \
--Inform="General;Duration=%Duration/String3%\nFile size=%FileSize/String1%" \
TearsOfSteel_720p_h265.mkv
Duration=00:12:14.058   <-----
File size=101 MiB       <-----
Run Code Online (Sandbox Code Playgroud)

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

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

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

H.264 现在被广泛接受,将是您输出视频文件的绝佳选择。计算所需 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
Run Code Online (Sandbox Code Playgroud)

要完成此操作,请使用以下 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
Run Code Online (Sandbox Code Playgroud)

生成的文件大小为 49.4MiB,具有相当合理但并不惊人的观看质量。实际上,文件大小减少 50% 和视频比特率大幅下降非常好

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
Run Code Online (Sandbox Code Playgroud)

FFmpeg 2 pass 命令行是:

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
Run Code Online (Sandbox Code Playgroud)

这提供了一个质量相当合理的 40mb 文件。

综上所述:

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

参考: