H.264とx264の違いとその再生方法


23

免責事項:これは実際の質問ではなく、「知識を​​共有する、Q&Aスタイル」です

だから、Raspberry PiでXbmcを実行していますが、実際にそれで何ができるのか、何ができないのかを理解するのに苦労しています。

RPiはH.264でエンコードされたビデオを再生できますが、x264でエンコードされたビデオしか見つけることができません。それも機能しますか?もしそうなら、なぜいくつかのファイルがおそらく動作しないのですか?

回答:


41

H.264(ドット付き)が実際に何であるかについて多くの誤解があるようです。だから、ウィキペディアから引用:

H.264 / MPEG-4パート10またはAVC(Advanced Video Coding)とされ、標準のビデオ圧縮のための、そして現在最も一般的に使用されるフォーマットの一つです[...]

ここで拡張する重要な部分は、それが唯一の標準であるということです。つまり、ビデオは実際にはH.264でエンコードされているのではなく、H.264標準を満たすコーデックでエンコードされています。最も一般的なものの1つはx264(小文字のx、ドットなし)です。

x264は、ビデオストリームをH.264 / MPEG-4 AVC形式にエンコードするためのフリーソフトウェアライブラリです。
[...]
x264は、他のH.264エンコーダーと比較して多数の機能を実装しています。

したがって、H.264は一種のインターフェースであり、x264はそのインターフェースの実装(実際の機能を備えた)です。

したがって、Piはx264でエンコードされたファイルを正常に再生します。


それでは、なぜx264でエンコードされたファイルがスムーズに再生されず、4〜6秒ごとに停止するのですか(GPU-Ramの量に応じて)。

ほとんどの場合、それは音です。x264はHDビデオファイルのエンコーダーであるため、これらのファイルのほとんどには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

次の2つのオプションがあります。

  1. DTS対応のレシーバーを購入し(おそらくテレビでもできるでしょうか?)、Xbmc(または使用しているプレーヤー)で「パススルー」(最後のポイント)を有効にします。
  2. DTSトラックをAC3に変換します。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のは、作品のために十分です)。ここには2つのオプションがあります。

  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

また、RPIでffmpegを使用することもできます。sudo apt-get install ffmpeg。RPIでこれを試しましたか?それはうまく機能しますか?
ビンセントP

3
@Raphaelいいえ、そうではありません:stackoverflow.com/a/9477756/717341
ルーカスクヌース

1
@Raphaelそれはあなたのディストリビューションに依存します。ArchLinuxでは、この問題は見当たりません。
ルーカスクナス

1
@LukasKnuth良い答えを除いてffmpegは、deめられません。avconvフォークです。
-aergistal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.