Dường như có rất nhiều sự hiểu lầm xung quanh H.264 (có dấu chấm) thực sự là gì. Vì vậy, trích dẫn từ Wikipedia :
H.264 / MPEG-4 Phần 10 hoặc AVC (Mã hóa video nâng cao) là một tiêu chuẩn để nén video và hiện là một trong những định dạng được sử dụng phổ biến nhất [...]
Phần quan trọng để kéo dài ở đây là nó chỉ là một tiêu chuẩn . Điều đó có nghĩa là, video không thực sự được mã hóa với H.264, nhưng với một codec đáp ứng tiêu chuẩn H.264. Một trong những cái phổ biến nhất là x264 (chữ thường x, không có dấu chấm):
x264 là một thư viện phần mềm miễn phí để mã hóa các luồng video thành định dạng AVC H.264 / MPEG-4.
[...]
x264 thực hiện một số lượng lớn các tính năng so với các bộ mã hóa H.264 khác.
Vì vậy, H.264 là một loại Giao diện và x264 là một Thực hiện (với chức năng thực tế) của giao diện đó.
Vì vậy, Pi sẽ phát các tệp được mã hóa x264 tốt.
Vậy thì tại sao một số tệp được mã hóa x264 không phát mượt mà chỉ dừng sau mỗi 4 - 6 giây (tùy thuộc vào lượng GPU-Ram)?
Hầu hết thời gian, đó là âm thanh . Vì x264 là một bộ mã hóa cho các tệp video HD, nên hầu hết các tệp đó đều đi kèm với bản âm thanh chất lượng cao kỹ thuật số, sử dụng codec DTS .
Pi hiện tại không thể giải mã phần cứng theo dõi DTS và CPU của nó không đủ mạnh. Có một cuộc thảo luận về điều này trên các Diễn đàn chính thức đáng để xem xét.
Để tìm hiểu xem đây có phải là trường hợp của bạn không, bạn có thể sử dụng mediainfo
-tool (phải được cài đặt, tên gói tùy thuộc vào bản phân phối của bạn):
[tv@raspberry]$ mediainfo some_random_movie.mkv
# Shortened output!
Audio #2
ID : 3
Format : DTS
Format/Info : Digital Theater Systems
Codec ID : A_DTS
Bây giờ bạn có hai lựa chọn:
- Mua một bộ thu có khả năng DTS (có lẽ TV của bạn cũng có thể làm điều đó?) Và bật "truyền qua" (điểm cuối) trong Xbmc (hoặc bất kỳ trình phát nào bạn đang sử dụng).
- Chuyển đổi DTS-Track thành AC3, có thể được chuyển qua (nhanh hơn) hoặc CPU được giải mã.
Để tìm hiểu xem bộ thu của bạn (thứ bạn cắm cáp HDMI) có khả năng gì, hãy sử dụng tvservice
-tool (không có trong PATH, vì vậy bạn sẽ cần đường dẫn đầy đủ):
[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.
Như bạn có thể thấy, máy thu hiện tại của tôi có khả năng giải mã PCM và AC3 (không phải DTS).
Giải pháp của tôi cho vấn đề này là chuyển đổi các Bản nhạc âm thanh là DTS sang AC3. Đây là một lớp lót nhỏ có thể chuyển đổi tất cả các luồng âm thanh infile.mkv
thành AC3 và không chạm vào 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
Lưu ý: Lệnh trên cũng đặt tốc độ bit cho luồng âm thanh được mã hóa AC3 kết quả (có vẻ như là cần thiết). Mặc dù 256kbps là khá tốt (hầu hết các DVD sử dụng 192kbps), bạn có thể muốn vào / giảm nó.
May mắn thay, điều này chỉ mất khoảng 5 phút (tất nhiên phụ thuộc vào phần cứng của bạn). Như một phần thưởng nhỏ, tệp của bạn trở nên nhỏ hơn và nếu bạn không phải là một Audiophile , bạn sẽ không nghe thấy sự khác biệt.
Tuy nhiên, Phim FullHD 1080p bị nhiễu , màn hình chuyển sang màu đen trong vài giây không có âm thanh nhưng việc phát lại video dường như vẫn tiếp tục. Phim được mã hóa H.264 trong một thùng chứa MKV với các rãnh AC3. Vấn đề là gì?
Rất có thể, không có gì sai với tệp phim, nhưng với cài đặt Xbmc của bạn. Trong trường hợp của tôi, vấn đề là "tốc độ làm mới" của Xbmc . Điều này được đặt thành 60Hz theo mặc định. Đối với 720p và bất kỳ tệp video nhỏ nào khác, điều này dường như không phải là vấn đề đối với Pi, nhưng các tệp 1080p dẫn đến sự cố nêu trên.
Giảm tốc độ làm mới xuống mức thấp hơn 60Hz (ít nhất 24Hz là đủ cho Phim). Có hai lựa chọn ở đây:
- Xbmc toàn cầu (bao gồm cả Xbmc):
System -> Settings -> System -> Video output -> Refresh rate
- Chỉ phim (được xác định bằng tệp video):
System -> Settings -> Video -> Playback -> Adjust display refresh rate to match video
Sau khi giảm tốc độ làm mới, phim 1080p cũng sẽ phát tốt.