Perbedaan antara H.264 dan x264 dan cara memainkannya

23

Penafian : Ini bukan pertanyaan yang sebenarnya, tetapi "bagikan pengetahuan Anda, tanya-jawab"

Jadi, saya menjalankan Xbmc pada Raspberry Pi saya dan saya mengalami kesulitan memahami apa yang sebenarnya bisa saya mainkan dengan itu dan apa yang tidak.

Saya membaca RPi dapat memutar video yang dikodekan H.264 , tetapi saya hanya dapat menemukan video yang dikodekan x264 . Apakah itu akan berhasil juga? Dan jika demikian, mengapa beberapa file tidak berfungsi mungkin?

Lukas Knuth
sumber

Jawaban:

41

Tampaknya ada banyak kesalahpahaman di sekitar apa sebenarnya H.264 (dengan titik). Jadi, mengutip dari Wikipedia :

H.264 / MPEG-4 Bagian 10 atau AVC (Advanced Video Coding) adalah sebuah standar untuk kompresi video , dan saat ini salah satu format yang paling umum digunakan [...]

Bagian penting untuk melakukan peregangan di sini adalah bahwa itu hanya standar . Itu berarti, video sebenarnya tidak dikodekan dengan H.264, tetapi dengan codec yang memenuhi standar H.264. Salah satu yang paling umum adalah x264 (huruf kecil x, tanpa titik):

x264 adalah pustaka perangkat lunak gratis untuk menyandikan stream video ke dalam format AVC H.264 / MPEG-4.
[...]
x264 mengimplementasikan sejumlah besar fitur dibandingkan dengan encoders H.264 lainnya.

Jadi, H.264 adalah jenis Interface dan x264 adalah Implementasi (dengan fungsi aktual) dari antarmuka itu.

Jadi, Pi akan memutar file yang disandikan x264 dengan baik.


Lalu mengapa beberapa file yang disandikan x264 tidak diputar dengan lancar tetapi berhenti setiap 4-6 detik (tergantung pada jumlah GPU-Ram)?

Sebagian besar waktu, itu suara . Karena x264 adalah encoder untuk file video HD, sebagian besar dari file-file tersebut dilengkapi dengan trek suara digital berkualitas tinggi, yang menggunakan DTS-codec .

Pi (pada saat ini) tidak dapat men-decode perangkat keras DTS-track dan CPU-nya tidak cukup kuat. Ada diskusi tentang ini di Forum resmi yang layak untuk dilihat.

Untuk mengetahui apakah ini yang terjadi pada Anda, Anda dapat menggunakan mediainfo-tool (harus diinstal, nama-paket tergantung pada distro Anda):

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

Anda sekarang memiliki dua opsi:

  1. Beli penerima yang mampu DTS (mungkin TV Anda juga bisa melakukannya?) Dan aktifkan "pass-through" (poin terakhir) di Xbmc (atau pemain apa pun yang Anda gunakan).
  2. Konversikan DTS-Tracks ke AC3, yang dapat dilewati (lebih cepat) atau didekodekan oleh CPU.

Untuk mengetahui apa yang dapat dilakukan oleh penerima Anda (yang menghubungkan kabel HDMI-kabel Anda), gunakan tvservice-tool (yang tidak ada dalam PATH, sehingga Anda akan memerlukan jalur lengkap):

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

Seperti yang Anda lihat, penerima saya saat ini mampu decoding PCM dan AC3 (bukan DTS).

Solusi saya untuk masalah ini adalah mengubah Audio-Tracks yang DTS ke AC3. Berikut ini adalah one-liner kecil yang mengubah semua aliran audio infile.mkvke AC3 dan tidak menyentuh video:

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

Catatan: Perintah di atas juga mengatur bit-rate untuk stream audio yang disandikan AC3 yang dihasilkan (yang memang diperlukan). Walaupun 256kbps cukup baik (sebagian besar DVD menggunakan 192kbps), Anda mungkin ingin / menguranginya.

Untungnya, ini hanya membutuhkan waktu sekitar 5 menit (tergantung pada perangkat keras Anda, tentu saja). Sebagai sedikit bonus, file Anda menjadi lebih kecil dan jika Anda bukan Audiophile , Anda tidak akan mendengar perbedaan.


Namun, Film FullHD 1080p tergagap , layar menjadi hitam selama beberapa detik tanpa suara tetapi pemutaran video tampaknya terus berlanjut. Film ini H.264 dikodekan dalam wadah MKV dengan trek AC3. Apa masalahnya?

Kemungkinan besar, tidak ada yang salah dengan file film, tetapi dengan pengaturan Xbmc Anda. Dalam kasus saya, masalahnya adalah "kecepatan refresh" Xbmc . Ini diatur ke 60Hz secara default. Untuk 720p dan file video kecil lainnya, ini tampaknya tidak menjadi masalah bagi Pi, tetapi file 1080p menghasilkan masalah di atas.

Turunkan refresh-rate ke sesuatu yang kurang dari 60Hz (setidaknya 24Hz sudah cukup untuk Film). Ada dua opsi di sini:

  1. Global Xbmc (termasuk Xbmc sendiri): System -> Settings -> System -> Video output -> Refresh rate
  2. Hanya film (ditentukan oleh file video): System -> Settings -> Video -> Playback -> Adjust display refresh rate to match video

Setelah menurunkan kecepatan refresh, film 1080p juga harus diputar dengan baik.

Lukas Knuth
sumber
7
Sangat mungkin jawaban terbaik di RaspberryPi.stackexchange.com.
Vincent P
Oh saya juga melihat bahwa ffmpeg bahkan tersedia untuk RPI. sudo apt-get install ffmpeg. Sudahkah Anda mencoba ini pada RPI? Apakah ini bekerja dengan baik?
Vincent P
3
@Raphael tidak, ini bukan: stackoverflow.com/a/9477756/717341
Lukas Knuth
1
@Raphael tergantung distro Anda. Di ArchLinux, saya tidak melihat masalah ini.
Lukas Knuth
1
@LukasKnuth jawaban yang bagus kecuali ffmpegtidak dirusak. avconvadalah garpu.
aergistal