ดูเหมือนจะมีความเข้าใจผิดมากมายเกี่ยวกับสิ่งที่ H.264 (มีจุด) จริง ดังนั้นข้อความจากWikipedia :
H.264 / MPEG-4 Part 10 หรือ AVC (Advanced Video เข้ารหัส) เป็นมาตรฐานสำหรับการบีบอัดวิดีโอและปัจจุบันเป็นหนึ่งในรูปแบบที่ใช้กันมากที่สุด [ ... ]
ส่วนที่สำคัญที่จะยืดที่นี่ก็คือว่ามันเป็นเพียงมาตรฐาน นั่นหมายความว่าวิดีโอนั้นไม่ได้เข้ารหัสด้วย H.264 แต่มีตัวแปลงสัญญาณที่ตรงกับมาตรฐาน H.264 หนึ่งในสิ่งที่พบบ่อยที่สุดคือx264 (ตัวพิมพ์เล็ก x, ไม่มีจุด):
x264 เป็นไลบรารีซอฟต์แวร์ฟรีสำหรับเข้ารหัสวิดีโอสตรีมในรูปแบบ H.264 / MPEG-4 AVC
[... ]
x264 ใช้คุณสมบัติจำนวนมากเมื่อเทียบกับเครื่องเข้ารหัส H.264 อื่น ๆ
ดังนั้น H.264 จึงเป็นอินเทอร์เฟซและ x264 เป็นการนำไปปฏิบัติ
ดังนั้น Pi จะเล่นไฟล์ที่เข้ารหัส x264 ได้ดี
แล้วทำไมบาง x264 ไฟล์ที่เข้ารหัสไม่สามารถเล่นได้อย่างราบรื่น แต่หยุดทุก 4-6 วินาที (ขึ้นอยู่กับปริมาณของ GPU-ราม)?
ส่วนใหญ่ของเวลาที่มันเป็นเสียง ตั้งแต่ x264 เป็นเข้ารหัสไฟล์วิดีโอ HD ส่วนใหญ่ของไฟล์เหล่านั้นมาพร้อมกับดิจิตอลคุณภาพสูงเสียงแทร็คซึ่งใช้DTS-ตัวแปลงสัญญาณ
Pi คือ (ในขณะนี้) ไม่สามารถถอดรหัสฮาร์ดแวร์ DTS-track ได้และ CPU นั้นมีประสิทธิภาพไม่เพียงพอ มีการอภิปรายเกี่ยวกับเรื่องนี้ในฟอรัมอย่างเป็นทางการซึ่งคุ้มค่าที่จะดู
ในการตรวจสอบว่าเป็นกรณีนี้สำหรับคุณหรือไม่คุณสามารถใช้mediainfo
-tool (ต้องถูกติดตั้ง, ชื่อแพ็คเกจขึ้นอยู่กับ distro ของคุณ):
[tv@raspberry]$ mediainfo some_random_movie.mkv
# Shortened output!
Audio #2
ID : 3
Format : DTS
Format/Info : Digital Theater Systems
Codec ID : A_DTS
ตอนนี้คุณมีสองทางเลือก:
- ซื้อตัวรับสัญญาณที่รองรับ DTS (บางทีทีวีของคุณสามารถทำได้ด้วยหรือไม่) และเปิดใช้งาน "pass-through" (จุดสุดท้าย) ใน Xbmc (หรือเครื่องเล่นที่คุณใช้)
- แปลง DTS-Tracks เป็น AC3 ซึ่งสามารถผ่าน (เร็วกว่า) หรือถอดรหัสซีพียู
หากต้องการทราบว่าตัวรับสัญญาณของคุณ (สิ่งที่คุณเสียบสายเคเบิล HDMI ของคุณ) มีความสามารถอะไรให้ใช้tvservice
-tool (ซึ่งไม่ได้อยู่ในเส้นทางดังนั้นคุณต้องใช้เส้นทางแบบเต็ม):
[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 นั้นค่อนข้างดี (ดีวีดีส่วนใหญ่ใช้ 192kbps) คุณอาจต้องการ / ลดลง
โชคดีที่ใช้เวลาประมาณ 5 นาที (ขึ้นอยู่กับฮาร์ดแวร์ของคุณ) เป็นโบนัสเล็กน้อยไฟล์ของคุณจะเล็กลงและถ้าคุณไม่ใช่Audiophileคุณจะไม่ได้ยินความแตกต่าง
แต่ถึงกระนั้นภาพยนตร์ FullHD 1080p ก็ยังคงสั่นอยู่หน้าจอจะมืดลงไปสองสามวินาทีโดยไม่มีเสียง แต่ดูเหมือนว่าการเล่นวิดีโอจะดำเนินต่อไป ภาพยนตร์ถูกเข้ารหัส H.264 ในคอนเทนเนอร์ MKV พร้อมแทร็ก AC3 อะไรคือปัญหา?
เป็นไปได้มากว่าไม่มีอะไรผิดปกติกับไฟล์ภาพยนตร์ แต่ด้วยการตั้งค่า Xbmc ของคุณ ในกรณีของผมปัญหาคือ "อัตราการรีเฟรช" ของ XBMC ค่านี้ตั้งไว้ที่ 60Hz โดยค่าเริ่มต้น สำหรับ 720p และไฟล์วิดีโอขนาดเล็กอื่น ๆ ดูเหมือนว่าจะไม่เป็นปัญหาสำหรับ Pi แต่ไฟล์ 1080p ส่งผลให้เกิดปัญหาข้างต้น
ลดอัตราการรีเฟรชให้เหลือน้อยกว่า 60Hz (อย่างน้อย 24Hz เพียงพอสำหรับภาพยนตร์) มีสองตัวเลือกที่นี่:
- Global Xbmc (รวมถึง Xbmc เอง):
System -> Settings -> System -> Video output -> Refresh rate
- ภาพยนตร์เท่านั้น (พิจารณาจากไฟล์วิดีโอ):
System -> Settings -> Video -> Playback -> Adjust display refresh rate to match video
หลังจากลดอัตราการรีเฟรชภาพยนตร์ 1080p ควรเล่นได้ดี