免责声明:这不是一个实际问题,而是“以问答式分享您的知识”
因此,我在Raspberry Pi上运行Xbmc,但无法理解我可以实际使用什么,不能使用什么。
我读到RPi可以播放H.264编码的视频,但是我只能找到x264编码的视频。那也行吗?如果是这样,为什么有些文件可能无法工作?
免责声明:这不是一个实际问题,而是“以问答式分享您的知识”
因此,我在Raspberry Pi上运行Xbmc,但无法理解我可以实际使用什么,不能使用什么。
我读到RPi可以播放H.264编码的视频,但是我只能找到x264编码的视频。那也行吗?如果是这样,为什么有些文件可能无法工作?
Answers:
关于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
您现在有两个选择:
要了解您的接收器(插入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 -i infile.mkv -map 0 -codec:v copy -codec:s copy -codec:a ac3 outfile.mkv
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)。这里有两个选项:
System -> Settings -> System -> Video output -> Refresh rate
System -> Settings -> Video -> Playback -> Adjust display refresh rate to match video
降低刷新率后,1080p电影也可以正常播放。
sudo apt-get install ffmpeg
。您是否曾在RPI上尝试过?它运作良好吗?
ffmpeg
这并不令人遗憾。avconv
是叉子。