如何使用 ffmpeg 设置 h.264 配置文件级别?

如何使用 ffmpeg 设置 h.264 配置文件级别?

我有一部电影(m4v/h.264/AAC),在我的 Mac 上播放正常,但最近我发现它无法在我的 Apple TV3 上播放。查看此电影文件的属性后,我发现它有一个配置文件[电子邮件保护]但 Apple TV3 仅支持[电子邮件保护]。我认为唯一导致此视频不兼容的属性是最大视频比特率,所有其他属性看起来都受支持[电子邮件保护]

我如何使用 ffmpeg 将此视频降级为[电子邮件保护]

或者我是否必须更改实际属性(最大比特率),使此视频的比特率为 4.1 而不是 4.0?我担心,如果我只是更改比特率,虽然文件将兼容[电子邮件保护]它仍会被“标记”为[电子邮件保护]因此仍然无法在我的 Apple TV3 上播放。

答案1

使用 编码时libx264,您可以使用以下方式设置 H.264 配置文件和级别:

  • -profile:vhigh– 、main或之一baseline(以及其他,但此处无关)
  • -level:v– 按照 H.264 标准附件 A 中的定义,例如4.0

例如:

ffmpeg -i input.mp4 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy output.mp4

这里我们刚刚复制了音频流,因为它不会受到影响。

输出将在其元数据中设置正确的配置文件和级别。您可以在编码时检查这x264一点,如下所示:

[libx264 @ 0x7fb26103a000] profile High, level 4.0

媒体信息还可以帮助您分析容器和编解码器的细节。

当然,重新编码视频会在一定程度上降低其质量,因为您再次应用了有损转换。尝试设置选项-crf以影响恒定质量参数。此处的默认值为 23,而 18 到 28 之间的值被认为是合理的。值越低,质量越好。如果您的输入比特率高达 65,000 kBit/s,转换后它很可能仍然看起来相当不错。

答案2

作为参考评论,尝试这个命令:

ffmpeg -i input.mp4 -map 1 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy \
# copies all global metadata from input.mp4 to output.mp4
-map_metadata 0 \
# copies video stream metadata from input.mp4 to output.mp4
-map_metadata:s:v 0:s:v \
# copies audio stream metadata from input.mp4 to output.mp4
-map_metadata:s:a 0:s:a \
output.mp4

干杯

答案3

尽管我已经读过其他内容(即不同的输入格式),但在从 x265 重新编码为 x264 时我使用了“-movflags use_metadata_flag”并且成功了!

答案4

尝试-c:v h264_nvenc代替-c:v libx264

我绝对不是 ffmpeg 专家,但我认为 libx264 是软件

相关内容