H.264和x264之间的区别以及如何播放


23

免责声明:这不是一个实际问题,而是“以问答式分享您的知识”

因此,我在Raspberry Pi上运行Xbmc,但无法理解我可以实际使用什么,不能使用什么。

我读到RPi可以播放H.264编码的视频,但是我只能找到x264编码的视频。那也行吗?如果是这样,为什么有些文件可能无法工作?

Answers:


41

关于H.264(带点)的实际含义,似乎存在很多误解。因此,引用Wikipedia

H.264 / MPEG-4 Part 10或AVC(高级视频编码)是视频压缩标准,并且是目前最常用的格式之一。

这里要强调的重要部分是它只是一个标准。这意味着视频实际上并没有使用H.264进行编码,而是使用了符合H.264标准的编解码器。最常见的一种是x264(小写的x,没有点):

x264是一个免费软件库,用于将视频流编码为H.264 / MPEG-4 AVC格式。
[...]
X264工具一大批相比其他H.264编码器的功能。

因此,H.264是一种接口,而x264是该接口的实现(具有实际功能)。

因此,Pi可以正常播放x264编码的文件。


那么,为什么某些x264编码的文件播放不流畅,却每4-6秒停止一次(取决于GPU-Ram的数量)?

大多数时候,这是声音。由于x264是高清视频文件的编码器,因此其中大多数文件都带有使用DTS编解码器的数字高质量音轨。

Pi目前无法对DTS轨道进行硬件解码,并且它的CPU能力不足。官方论坛上有关于此的讨论,值得研究。

要找出适合您的情况,可以使用mediainfo-tool(必须安装,包名称取决于您的发行版):

[tv@raspberry]$ mediainfo some_random_movie.mkv 
# Shortened output!
Audio #2
ID                                       : 3
Format                                   : DTS
Format/Info                              : Digital Theater Systems
Codec ID                                 : A_DTS

您现在有两个选择:

  1. 购买具有DTS功能的接收器(也许您的电视也可以这样做),然后在Xbmc(或您使用的任何播放器)中启用“通过”(最后一点)。
  2. 将DTS轨道转换为AC3,可以通过(更快)或通过CPU解码。

要了解您的接收器(插入HDMI电缆的设备)的功能,请使用tvservice-tool(它不在PATH中,因此您需要完整的路径):

[tv@raspberry ~]$ /opt/vc/bin/tvservice -a
     PCM supported: Max channels: 2, Max samplerate:  48kHz, Max samplesize 24 bits.
     AC3 supported: Max channels: 6, Max samplerate:  48kHz, Max rate  640 kb/s.

如您所见,我当前的接收器能够解码PCM和AC3(不是DTS)。

我对这个问题的解决方案是将DTS的音频轨道转换为AC3。这是一个很小的单一代​​码,它将所有音频流转换infile.mkv为AC3,并且不会触及视频:

ffmpeg

ffmpeg -i infile.mkv -map 0 -codec:v copy -codec:s copy -codec:a ac3 outfile.mkv

avconv

avconv -i infile.mkv -map 0 -vcodec copy -acodec ac3 -ab 256k outfile.mkv

注意:上面的命令还为生成的AC3编码的音频流设置了比特率(似乎是必要的)。尽管256kbps相当不错(大多数DVD使用192kbps),但您可能想增加/减少它。

幸运的是,这仅需5分钟左右(当然,取决于您的硬件)。另外,您的文件会变得更小,并且如果您不是发烧友,您将听不到任何区别。


尽管如此,1080p FullHD电影还是断断续续,屏幕变黑了几秒钟,没有声音,但是视频播放似乎还在继续。电影在带有AC3轨道的MKV容器中经过H.264编码。问题是什么?

很有可能,影片文件没有问题,但是Xbmc设置没有问题。就我而言,问题是Xbmc的“刷新率”。默认情况下设置为60Hz。对于720p和其他任何小型视频文件,Pi似乎都不是问题,但是1080p文件会导致上述问题。

刷新率降低到小于60Hz的水平(电影至少应为24Hz)。这里有两个选项:

  1. 全局Xbmc(包括Xbmc本身): System -> Settings -> System -> Video output -> Refresh rate
  2. 仅电影(由视频文件确定): System -> Settings -> Video -> Playback -> Adjust display refresh rate to match video

降低刷新率后,1080p电影也可以正常播放。


7
很有可能在RaspberryPi.stackexchange.com上提供最佳答案。
文森特·P

哦,我也看到ffmpeg甚至可以用于RPI。sudo apt-get install ffmpeg。您是否曾在RPI上尝试过?它运作良好吗?
文森特·P

3
@Raphael不,不是这样:stackoverflow.com/a/9477756/717341
Lukas Knuth

1
@Raphael取决于您的发行版。在ArchLinux中,我没有看到这个问题。
Lukas Knuth

1
@LukasKnuth的好答案除外,ffmpeg这并不令人遗憾。avconv是叉子。
aergistal
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.