ความแตกต่างระหว่าง H.264 และ x264 และวิธีเล่น


23

คำเตือน : นี่ไม่ใช่คำถามจริง แต่แทนที่จะ"แบ่งปันความรู้ Q & A-style"

ดังนั้นฉันจึงใช้ Xbmc กับ Raspberry Pi ของฉันและฉันมีปัญหาในการเข้าใจสิ่งที่ฉันสามารถเล่นกับมันได้

ฉันอ่าน RPi สามารถเล่นวิดีโอที่เข้ารหัสH.264แต่ฉันสามารถค้นหาวิดีโอที่เข้ารหัสx264เท่านั้น มันจะใช้ได้ไหม และถ้าเป็นเช่นนั้นทำไมไฟล์บางไฟล์ถึงไม่ทำงานล่ะ

คำตอบ:


41

ดูเหมือนจะมีความเข้าใจผิดมากมายเกี่ยวกับสิ่งที่ 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

ตอนนี้คุณมีสองทางเลือก:

  1. ซื้อตัวรับสัญญาณที่รองรับ DTS (บางทีทีวีของคุณสามารถทำได้ด้วยหรือไม่) และเปิดใช้งาน "pass-through" (จุดสุดท้าย) ใน Xbmc (หรือเครื่องเล่นที่คุณใช้)
  2. แปลง 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 เพียงพอสำหรับภาพยนตร์) มีสองตัวเลือกที่นี่:

  1. Global 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
Vincent P

โอ้ฉันเห็นด้วยว่า ffmpeg มีให้บริการสำหรับ RPI ด้วย sudo apt-get install ffmpeg. คุณลองทำสิ่งนี้กับ RPI หรือไม่? มันทำงานได้ดีหรือไม่
Vincent P

3
@ ราฟาเอลไม่มันไม่ใช่: stackoverflow.com/a/9477756/717341
Lukas Knuth

1
@ ราฟาเอลมันขึ้นอยู่กับ distro ของคุณ ใน ArchLinux ฉันไม่เห็นปัญหานี้
Lukas Knuth

1
@LukasKnuth คำตอบที่ดียกเว้นffmpegไม่ได้รับการแก้ไข avconvเป็นทางแยก
aergistal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.