Różnica między H.264 a x264 i sposób jej gry

23

Zastrzeżenie : To nie jest prawdziwe pytanie, ale „podziel się swoją wiedzą, pytania i odpowiedzi w stylu”

Tak więc używam Xbmc na moim Raspberry Pi i mam problem ze zrozumieniem, co właściwie mogę z tym grać, a co nie.

Czytam, że RPi może odtwarzać filmy zakodowane w formacie H.264 , ale mogę znaleźć tylko filmy zakodowane w formacie x264 . Czy to też zadziała? A jeśli tak, to dlaczego niektóre pliki prawdopodobnie nie działają?

Lukas Knuth
źródło

Odpowiedzi:

41

Wydaje się, że istnieje wiele nieporozumień wokół tego, czym tak naprawdę jest H.264 (z kropką). Cytując z Wikipedii :

H.264 / MPEG-4 Part 10 lub AVC (Advanced Video Coding) jest standardem kompresji wideo , a obecnie jest jednym z najczęściej używanych formatów [...]

Ważną rzeczą do rozciągnięcia tutaj jest to, że jest to tylko standard . Oznacza to, że filmy nie są faktycznie kodowane za pomocą H.264, ale za pomocą kodeka spełniającego standard H.264. Jednym z najczęstszych jest x264 (mała litera x, bez kropki):

x264 to darmowa biblioteka oprogramowania do kodowania strumieni wideo w formacie AVC H.264 / MPEG-4.
[...]
x264 implementuje wiele funkcji w porównaniu do innych koderów H.264.

H.264 jest więc rodzajem interfejsu, a x264 jest implementacją (z rzeczywistą funkcjonalnością) tego interfejsu.

Tak więc Pi będzie dobrze odtwarzać pliki zakodowane w formacie x264.


Wtedy dlaczego niektórzy x264 zakodowane pliki nie są odtwarzane płynnie, ale zatrzymać co 4-6 sekund (w zależności od ilości GPU-RAM)?

W większości przypadków to dźwięk . Ponieważ x264 jest koderem plików wideo HD, większość tych plików jest wyposażona w cyfrową ścieżkę dźwiękową wysokiej jakości, która wykorzystuje kodek DTS .

Pi nie jest (w tej chwili) w stanie sprzętowo zdekodować ścieżki DTS, a jej procesor nie jest wystarczająco wydajny. Dyskusja na ten temat na oficjalnych forach jest warta obejrzenia.

Aby dowiedzieć się, czy tak jest w twoim przypadku, możesz użyć mediainfo-tool (musi być zainstalowany, nazwy pakietów zależą od twojej dystrybucji):

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

Masz teraz dwie opcje:

  1. Kup odbiornik obsługujący DTS (może twój telewizor też to potrafi?) I włącz „pass-through” (ostatni punkt) w Xbmc (lub jakimkolwiek innym odtwarzaczu, którego używasz).
  2. Konwertuj ścieżki DTS na AC3, które mogą być przekazywane (szybciej) lub dekodowane przez procesor.

Aby dowiedzieć się, do czego zdolny jest twój odbiornik (rzecz, do której podłączyłeś kabel HDMI), użyj tvservice-tool (którego nie ma w ścieżce, więc potrzebujesz pełnej ścieżki):

[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.

Jak widać, mój obecny odbiornik jest w stanie dekodować PCM i AC3 (nie DTS).

Moim rozwiązaniem tego problemu jest konwersja ścieżek audio, które są DTS na AC3. Oto mały liniowiec, który konwertuje wszystkie strumienie audio infile.mkvna AC3 i nie dotyka wideo:

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

Uwaga: Powyższe polecenie ustawia także szybkość transmisji dla wynikowego strumienia audio zakodowanego w AC3 (wydaje się to konieczne). Chociaż 256 kb / s jest dość dobre (większość płyt DVD używa 192 kb / s), możesz chcieć je zwiększyć / zmniejszyć.

Na szczęście zajmuje to tylko około 5 minut (oczywiście w zależności od sprzętu). Jako mały bonus, twój plik staje się mniejszy, a jeśli nie jesteś audiofilem , nie usłyszysz różnicy.


Nadal zacinają się filmy FullHD 1080p , ekran staje się czarny na kilka sekund bez dźwięku, ale odtwarzanie wideo wydaje się być kontynuowane. Film jest kodowany w formacie H.264 w kontenerze MKV ze ścieżkami AC3. Jaki jest problem?

Najprawdopodobniej nie ma nic złego w pliku filmu, ale w ustawieniach Xbmc. W moim przypadku problemem była „częstotliwość odświeżania” Xbmc . Domyślnie jest ustawiony na 60 Hz. W przypadku 720p i innych małych plików wideo wydaje się, że nie stanowi to problemu dla Pi, ale pliki 1080p powodują powyższy problem.

Zmniejsz częstotliwość odświeżania do mniej niż 60 Hz (co najmniej 24 Hz wystarcza dla filmów). Istnieją tutaj dwie opcje:

  1. Globalny Xbmc (w tym sam Xbmc): System -> Settings -> System -> Video output -> Refresh rate
  2. Tylko filmy (określone na podstawie pliku wideo): System -> Settings -> Video -> Playback -> Adjust display refresh rate to match video

Po obniżeniu częstotliwości odświeżania filmy 1080p również powinny być odtwarzane dobrze.

Lukas Knuth
źródło
7
Prawdopodobnie najlepsza odpowiedź na RaspberryPi.stackexchange.com.
Vincent P
Och, również widzę, że ffmpeg jest nawet dostępny dla RPI. sudo apt-get install ffmpeg. Czy próbowałeś tego na RPI? Czy to działa dobrze?
Vincent P
3
@Raphael nie, to nie jest: stackoverflow.com/a/9477756/717341
Lukas Knuth
1
@ Rafael, to zależy od twojej dystrybucji. W ArchLinux nie widzę tego problemu.
Lukas Knuth,
1
@LukasKnuth dobra odpowiedź, z wyjątkiem tego, że ffmpegnie jest zdeponowana. avconvjest widelcem.
aergistalny