哪个ffmpeg命令行可以使视频在所有设备之间更兼容?


15

因此,我有用户说H264视频MP4不能在Apple的iPad上播放音频,而我也很难使MP4视频也能在Android上正常播放。

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

-profile:v baseline -level 3.0

和:

-vpre baseline

我应该使用哪一种才能使它在所有设备上都能正常工作?

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

-ab 192k

也许我应该降低它

-ab 160k

用于将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

Answers:


25

首先,您应该了解使用FFmpeg配置文件和直接命令行选项之间的区别。-vpre使用.ffpreset位于/usr/share/ffmpeg/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

一些注意事项:

  • H.264 / AAC是HTML5中广泛支持的最佳组合。但是,没有H.264解码器的浏览器也将需要VP8 / Vorbis视频。有关某些命令行示例,请参见此答案。另请参见Wikipedia 的浏览器支持页面。

  • 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配置文件。有关某些指导,请参阅此帖子(有点过时)。

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


1
感谢您提供如此详细的答案,我继续阅读:)另外,我还使用-acodec libmp3lame -ab 160k进行编码,并且使用ipad苹果设备的用户说他们可以观看视频,但听不到声音,所以我认为这与音频编解码器或比特率。Android和Windows用户说很好,他们可以在视频流中播放音频,所以我不确定为什么使用libmp3lame而不是aac会导致苹果用户对视频没有音频。
C0nw0nk

我很少见过MP4容器中使用的MP3音频。也许AAC是更安全的选择。
slhck 2014年

好吧,我只使用MP3,因为我不断收到aac的bit_rate,宽度高度错误,我切换到libmp3lame,所有这些错误都停止了,然后苹果用户说他们没有音频,但是其他人都可以观看同一文件,并且声音还可以在所有其他设备,也许我发现谁知道:(而且根据苹果MP3应该罚款的错误developer.apple.com/library/mac/documentation/...
C0nw0nk

@ user2068371该链接指向MPEG-2传输流,而不是MP4容器格式。
llogan'1

1
@ user2068371我从未遇到MediaElementjs的问题。并非所有浏览器都支持 H.264和MP3 。特别是对于HTML5视频,请始终使用H.264 / AAC以及VP8 / Vorbis作为后备。如果您在AAC转换方面遇到问题,请询问有关此问题的新问题,并确保也包括完整的命令行输出。
slhck
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.