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


16

我有一部电影(m4v / h.264 / AAC)在Mac上可以正常播放,但最近发现它无法在Apple TV3上播放。查看该电影文件的属性后,我看到它的配置文件为High@4.1,但Apple TV3仅支持High@4.0。我认为使此视频不兼容的唯一属性是最大视频比特率,所有其他属性看起来都像High@4.0中所支持。

如何使用ffmpeg将视频降级为High@4.0?

还是我必须改为更改使该视频从4.1变为4.0的实际属性(最大比特率)?我担心如果只是更改比特率,尽管该文件随后将与High@4.0兼容,但仍会被“标记”为High@4.1,因此仍无法在我的Apple TV3上播放。

Answers:


22

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

  • -profile:v-之一highmainbaseline(和其他人,但是这无关紧要这里)
  • -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

MediaInfo还可以帮助您分析容器和编解码器详细信息。

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


1
效果很好。不幸的是,它丢失了一些元数据,但实际视频的质量没有明显变化。出于兴趣,以下命令是否会达到相同目的?ffmpeg -i input.mp4 -vcodec x264 -vprofile high -vlevel 4.0 -acodec copy output.mp4
2013年

是的,这些-v选项是这些选项的别名:v。您丢失了哪些元数据?
slhck 2013年

我认为可能只是丢失的艺术品。我不知道从技术上讲这是否是元数据...艺术品实际上包含在文件中吗?在将全部内容重新添加之前,我没有检查所有其他内容。
2013年

我现在有一个具有类似问题的其他文件。这是错误的配置文件级别,但其余规范似乎与我要求的级别(4.0)兼容。如果我使用上面提供的命令,除非它与输入的配置文件级别不兼容,否则将保持数据不变吗?基本上,我不希望ffmpeg触摸任何数据,除了说什么配置文件和级别的标签外。这可能吗,还是要将所有值(硝酸盐,帧速率等)设置为预设值?
2013年

2
我只是偶然发现了实现这一目标的方法。当您选择视频流时,Subler实际上具有一个选项,可以更改配置文件和级别以使其与某些设备兼容。它告诉您确保视频与您要设置的配置文件兼容,因此我认为视频不进行任何重新编码,它只能更改元数据。
2013年

1

参考您的评论,请尝试以下命令:

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

干杯

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.