图像 + 音频 = mp4:如何使视频变小?

SID*_*IDU 20 ffmpeg

我正在使用 ffmpeg 将 JPG 添加到 MP4 以制作 MP4。

由于只有一张图片可以制作视频,我想知道是否有办法减小视频大小?

命令:

$ ffmpeg -loop 1 -i image.jpg -i audio.mp3 -shortest -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)

结果:

  • image.jpg = 26.7K(图像不太清晰)
  • audio.mp3 = 64.6M(54 分钟)
  • output.mp4 = 80.6M(视频效果不太清晰,音乐还不错)

MP4 的大小是否合理?

llo*_*gan 29

用于上传到 YouTube

H.264:最小文件

该方法使用 libx264 编码 H.264 视频。它比下面的流复制方法慢,但可能会输出较小的文件大小。

ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 \
-c:v libx264 -preset veryslow -crf 0 -c:a copy -shortest output.mkv
Run Code Online (Sandbox Code Playgroud)

流复制:最快的过程

此方法只是将图像流式复制(无编码)到 MKV 容器中。它非常快,但如果大小很重要,则上述方法可能会产生较小的文件。

ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 -c copy -shortest output.mkv
Run Code Online (Sandbox Code Playgroud)
  • YouTube 几乎接受任何东西,因此这些命令使用了一些技巧来加快编码速度,或缩小文件大小,并保持高质量,因为 YouTube 会重新编码您提供的任何内容。您的播放器可能不会喜欢它,但 YouTube 会。

  • 在这些示例中,使用了非常低的帧速率,其处理速度应该比默认的 25 fps 快。


适用于任何播放器的最广泛兼容性

ffmpeg -loop 1 -i image.png -i music.mp3 -vf "scale='min(1280,iw)':-2,format=yuv420p" \
-c:v libx264 -preset medium -profile:v main -c:a aac -shortest -movflags +faststart output.mp4
Run Code Online (Sandbox Code Playgroud)
  • 除了非常古老的设备之外,这应该可以在任何东西上播放(如果是这种情况,请更改-profile:v main-profile:v baseline)。

  • 如果您的音频输入已经是 AAC,则更-c:a aac改为-c:a copy以避免不必要的重新编码。

  • 编码时间会更长,文件大小会比上面的 YouTube 命令大。

  • 有关更多信息,请参阅FFmpeg Wiki:H.264