因此,有用户说 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
答案1
首先,您应该了解使用 FFmpeg 配置文件和直接命令行选项之间的区别。-vpre
使用.ffpreset
位于/usr/share/ffmpeg/
或安装 ffmpeg 的任何位置的文件。它是一系列选项=值 对,并且就您而言,您必须自己定义它(至少我不知道baseline
ffmpeg 附带的预设)。
我建议不要使用预设,除非您自己创建预设并且知道命令行选项的用途。我已经使用 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 视频。以下是一些命令行示例:参见此答案. 另请参阅浏览器支持维基百科的其他编解码器页面。
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 配置文件的客户端提供 Baseline 编码的视频也不是明智之举。您需要牺牲质量来降低解码复杂度。
根据我的经验,Android 设备可以很好地播放 MP4 容器中的 AAC-LC 音频的 Baseline H.264。我从来没有遇到过问题。事实上,一些设备也可以播放更高的配置文件,尽管它没有得到官方支持。iOS 通常也支持 Baseline H.264,但你当然也可以在某些设备上使用主配置文件。请参阅这个帖子(有点过时)以获取一些指导方针。
如果您的用户遇到播放问题,您需要找出导致问题的视频,并详细了解他们使用的硬件和播放器软件。然后我们就可以讨论如何解决该特定问题。