Різниця між H.264 та x264 та способом його відтворення


23

Відмова від відповідальності : це не актуальне питання, а скоріше "поділіться своїми знаннями, Q-A-стиль"

Отже, я запускаю Xbmc на своєму Raspberry Pi, і у мене виникають проблеми з розумінням того, що я можу насправді грати з ним, а що ні.

Я читаю, що RPi може відтворювати відео з кодуванням H.264 , але я можу знайти лише відео з кодуванням x264 . Це теж спрацює? І якщо так, чому певні файли, ймовірно, не працюють?

Відповіді:


41

Здається, існує багато непорозумінь навколо того, що насправді є H.264 (з крапкою). Отже, цитуючи з Вікіпедії :

H.264 / MPEG-4 Part 10 або AVC (Advanced Video Coding) є стандартом для стиснення відео , і в даний час один з найбільш часто використовуваних форматів [...]

Важлива частина, яку слід розтягнути, - це лише стандарт . Це означає, що відео насправді не кодується H.264, а кодеком, який відповідає стандарту H.264. Один з найпоширеніших - x264 (малі регістри х, без крапки):

x264 - це безкоштовна бібліотека програмного забезпечення для кодування відеопотоків у формат AVC H.264 / MPEG-4.
[...]
x264 реалізує велику кількість функцій порівняно з іншими кодерами H.264.

Отже, H.264 - це свого роду інтерфейс, а x264 - це реалізація (з фактичною функціональністю) цього інтерфейсу.

Отже, Pi буде чудово відтворювати закодовані файли x264.


Тоді чому деякі закодовані x264 файли не відтворюються плавно, а зупиняються кожні 4-6 секунд (залежно від кількості GPU-Ram)?

Здебільшого це звук . Оскільки x264 є кодером для відеофайлів HD, більшість цих файлів оснащені високоякісною цифровою звуковою доріжкою, яка використовує DTS-кодек .

Pi (на даний момент) не в змозі апаратно декодувати DTS-трек, і його процесор недостатньо потужний. Про це йдеться на офіційних форумах, на які варто звернути увагу.

Щоб дізнатися, чи це так у вас, ви можете скористатися 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, які можна передати (швидше) або розшифрувати процесор.

Щоб дізнатися, на що здатний ваш приймач (те, до чого ви підключили кабель 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.mkvAC3 і не торкається відео:

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 хвилин (звичайно, залежно від обладнання). Як невеликий бонус, ваш файл стає меншим, і якщо ви не Audiofhile , ви не почуєте різниці.


Тим не менш, фільми FullHD 1080p заїкають , екран замикається на кілька секунд, не чуючи звуку, але відтворення відео, як видається, продовжується. Фільм H.264 закодований у контейнері MKV із треками AC3. В чому проблема?

Швидше за все, немає нічого поганого в файлі фільму, але в налаштуваннях Xbmc. У моєму випадку проблемою була «швидкість оновлення» Xbmc . За замовчуванням встановлено 60 Гц. Для 720p та будь-яких інших невеликих відеофайлів це, здається, не є проблемою для Pi, але файли 1080p призводять до вищезгаданої проблеми.

Зменшіть частоту оновлення до чогось меншого, ніж 60 Гц (принаймні 24 ГГц достатньо для фільмів). Тут є два варіанти:

  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.
Вінсент П

Так само я бачу, що ffmpeg доступний навіть для ІРП. sudo apt-get install ffmpeg. Ви пробували це на RPI? Це добре працює?
Вінсент П

3
@Raphael ні, це не так: stackoverflow.com/a/9477756/717341
Лукаш Кнут

1
@ Рафаель, це залежить від вашого дистрибутива. В ArchLinux я не бачу цієї проблеми.
Лукаш Кнут

1
@LukasKnuth хороша відповідь, за винятком того ffmpeg, що не приховується. avconv- виделка.
аергістал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.