什么 ffmpeg 命令行可以在所有设备上生成更兼容的视频?

C0n*_*0nk 21 ffmpeg video-encoding

所以我有用户说 H264 视频 MP4 不能在 Apple 的 iPad 上播放音频,我也很难让 MP4 视频在 Android 上正常播放。

有两种不同的命令行,我应该使用哪种命令行。

-profile:v baseline -level 3.0
Run Code Online (Sandbox Code Playgroud)

和 :

-vpre baseline
Run Code Online (Sandbox Code Playgroud)

我应该使用哪一种使其适用于所有设备?

我也读过它可能是我当前的音频比特率的音频比特率

-ab 192k
Run Code Online (Sandbox Code Playgroud)

也许我应该把它降低到

-ab 160k
Run Code Online (Sandbox Code Playgroud)

用于将 MP3 音频编码为 MP4 文件的命令行。

"C:/server/ffmpeg/bin/ffmpeg.exe" -y -i Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/54bbf30bb11a0f6b9dc832114c26fd29.mp4 -strict experimental -acodec libmp3lame -ar 44100 -ac 2 -ab 192k -s 480x360 -aspect 16:9 -r 24000/1001 -vcodec libx264 -b:v 1000k -minrate 800k -maxrate 1000k -bufsize 800K -crf 18 -preset veryslow -f mp4 -threads 0 -movflags +faststart Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/98382d43d31d4ff91ea44cb2aa1bbc49.mp4 2>&1
Run Code Online (Sandbox Code Playgroud)

slh*_*hck 32

首先,您应该了解使用 FFmpeg 配置文件和直接命令行选项之间的区别。-vpre使用.ffpreset位于/usr/share/ffmpeg/ffmpeg 安装位置或任何位置的文件。这是一系列option=value 对,在您的情况下,您必须自己定义它(至少我不知道baselineffmpeg 附带的预设)。

我建议不要使用预设,除非您自己创建它并知道命令行选项的用途。我已经使用 ffmpeg 多年了,我从来没有使用过预设——我从来没有真正需要过。

生成与大多数设备兼容的 H.264 视频的典型命令行是:

ffmpeg -i <input> \
  -c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
  -c:a aac -ac 2 -b:a 128k \
  -movflags faststart \
  output.mp4
Run Code Online (Sandbox Code Playgroud)

一些注意事项:

  • H.264/AAC 是 HTML5 广泛支持的最佳组合。没有 H.264 解码器的浏览器也需要 VP8/Vorbis 视频。有关一些命令行示例,请参阅此答案。另请参阅维基百科的浏览器支持页面以了解其他编解码器。

  • H.264 也适用于移动设备。

  • -profile:v baseline-level 3.0选项仅需要不能处理H.264的CPU密集型功能,旧移动设备。您通常可以省略这些或改为使用-profile:v main.

  • CRF 设置质量(18-28 是一个合理的范围,较低意味着更好的质量)。您当然也可以使用固定比特率-b:v 1000k或类似的。选择与视频分辨率匹配的比特率。一些低功耗设备可能无法处理不必要的高比特率。

  • -movflags faststart选项对于流式传输至关重要,因为它将容器元数据移动到文件的开头而不是将其保留在末尾。这将允许立即开始播放,而不必等待文件完全加载。

但是,这一切都归结为为您所针对的所有设备找到最小公分母,这可能并不总是存在。当然,您不会想要使用除 H.264 之外的任何其他(即更糟糕的)编解码器。事实上,向可以解码 Main 或 High profile 的客户端提供 Baseline 编码的视频也是不明智的。您会在降低解码复杂性的同时牺牲质量。

根据我的经验,Android 设备可以在 MP4 容器中播放带有 AAC-LC 音频的 Baseline H.264 就好了。我从来没有遇到过问题。事实上,一些设备也可以播放更高的配置文件,尽管它没有得到官方支持。iOS 通常也支持 Baseline H.264,但您当然也可以在某些设备上使用 Main 配置文件。有关一些指南,请参阅此帖子(有点过时)。

如果您有播放问题的用户,您需要找出导致问题的视频,并获取有关他们使用的硬件和播放器软件的更多详细信息。然后我们可以讨论对特定情况进行故障排除。