สคริปต์ ffmpeg ใดที่ฉันต้องใช้เพื่อรับ“ วิดีโอสำหรับทุกคน” ที่รองรับ HTML5


12

รายการคำสั่งใดที่ฉันควรทำใน ffmpeg / mencoder / some_other_CLI_app เพื่อรับวิดีโอในรูปแบบที่ถูกต้องทั้งหมดเพื่อใช้วิดีโอสำหรับทุกคน ?

คือมีความละเอียดอ่อนที่ป้องกันไม่ให้มีการสอนกลที่บอกว่า

VIDEO=video.mp4
TYPE=$(ffmpeg --find-information-about-the-video ... )
ffmpeg ... > video.mov
ffmpeg ... > video.flv
ffmpeg ... > video.webm
ffmpeg ... > video.h.264
...

จากนั้นคัดลอกและวางรหัสวิดีโอสำหรับทุกคนลงในหน้าของคุณ?

เป้าหมายของฉันคือการมีวิดีโอที่ฝังอยู่ในหน้าเว็บส่วนตัวของฉันเป็นเจ้าภาพโดยฉัน HTML5 ที่มีแฟลชสำรองควรเป็นวิธีที่ง่ายที่สุดในการดูวิดีโอสำหรับทุกคน แต่ที่ใบหน้าส่วนที่ซับซ้อนมากที่สุดเข้ารหัสวิดีโอลงในทุกรูปแบบที่แตกต่างกันเพื่อให้ผู้อ่านที่จะคิดออกโดยการอ่านบทความยาวและครบถ้วนเกี่ยวกับรูปแบบวิดีโอ แน่นอนว่ามันไม่จำเป็น ฉันสามารถให้รายการคำสั่งสำหรับผู้ใช้ในการแปลงไฟล์เสียงเป็นรูปแบบต่างๆ หวังว่ากูรู ffmpeg สามารถทำเช่นเดียวกันกับวิดีโอ


1
ความคิดเห็นเล็กน้อยสำหรับตัวอย่าง pseudocode ของคุณ: ไม่มี.movวิดีโอ HTML5 และไม่มีh.264ส่วนขยาย มีเป็น .264ซึ่งเป็น bytestream ภาคผนวกขดิบสำหรับหน่วย NAL การเข้ารหัสวิดีโอไม่ใช่วิทยาศาสตร์จรวด แต่คุณต้องลงทุนเวลาเล็กน้อยเพื่อทำความรู้จักกับแนวคิด
slhck

คำตอบ:


21

หมายเหตุ:คำตอบนี้ถูกแก้ไขอย่างมากตั้งแต่การโพสต์ดั้งเดิม ตอนนี้เป็นปี 2017 แล้ว สตรีมมิ่งทำงานแตกต่างจากที่เคยเป็น คู่มือนี้จะดาวน์โหลดสตรีมวิดีโอหนึ่งชุดที่มีความละเอียดเพียงครั้งเดียวโดยไม่ต้องสตรีมแบบปรับได้

ความต้องการ

ก่อนอื่นอย่าลืมดาวน์โหลดffmpegเวอร์ชันล่าสุด (ดาวน์โหลดบิลด์สแตติกไม่ต้องโทรapt-get install ffmpegหรือคล้ายกัน) จะเป็นการดีที่รวบรวมมันด้วยตัวคุณเอง ใช้เวลาไม่นาน

หากต้องการสร้างวิดีโอที่รองรับโดยเบราว์เซอร์ส่วนใหญ่ให้ตรวจสอบตารางความเข้ากันได้ล่าสุดเสมอ ไม่มีตัวแปลงสัญญาณ / รูปแบบเดียวที่ทำงานในทุกเบราว์เซอร์ แต่ถ้าคุณสร้าง H.264 ใน MP4 และ VP9 ใน WebM ด้วยตัวแปลงสัญญาณเสียงที่เกี่ยวข้องคุณจะได้รับการสนับสนุนสำหรับ Chrome, Firefox, Safari และ IE บางรุ่น

WebM (VP9 / Vorbis)

ทำตามคำแนะนำในคู่มือFFmpeg VP9และใช้วิธีการเข้ารหัสแบบสองรอบด้วยข้อ จำกัด ด้านอัตรา:

ffmpeg -y -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 1 -f webm /dev/null && \
ffmpeg -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 2 output.webm

บิตเรตเป้าหมายจะขึ้นอยู่กับความละเอียดอัตราเฟรมประเภทของเนื้อหาและคุณภาพที่คุณต้องการ 2.5 MBit / s น่าจะเหมาะกับวิดีโอ HD ที่ 30 fps ดูคำแนะนำของ Google นี้สำหรับคำแนะนำ

MP4 (H.264 / AAC)

ทำตามคำแนะนำในคู่มือFFmpeg H.264และใช้วิธีการเข้ารหัสแบบสองรอบด้วยข้อ จำกัด ด้านอัตรา:

ffmpeg -y -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 1 -c:a aac -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 2 -c:a aac -movflags faststart output.mp4

ที่นี่อัตราบิตเป้าหมายควรสูงกว่าวิดีโอ VP9 ประมาณ 50% เนื่องจาก H.264 นั้นไม่มีประสิทธิภาพ เพิ่ม-movflags faststartตัวเลือกในการผ่านครั้งที่สองเพื่อให้การโหลดวิดีโอเริ่มต้นเร็วขึ้น

สำหรับการตั้งค่าตัวเลือกเสียงดูคู่มือการเข้ารหัส AAC


1
ย่อหน้าหนึ่งของย่อหน้า 2013-12-19 ของคุณจะถูกตัดออกในช่วงกลางประโยค "เสียงเริ่มต้นที่ 128 kBit / s อีกครั้ง แต่คุณสามารถตั้งค่า q: a สำหรับบิตเรตตัวแปรซึ่งค่าอยู่ในช่วงตั้งแต่ 0 ถึง 500 100 เป็นค่าเริ่มต้นและสูงกว่าหมายถึงดีกว่าถ้า"
Alan De Smet

@slhck มีเหตุผลหลายอย่าง แต่สองเซนต์ของฉันคือคุณปล่อย Ogg และแทนที่ด้วย mpegts / m3u8 เพื่อรองรับอุปกรณ์ iOS ทั้งหมดหรือที่ยอมรับ HLS คุณสามารถใช้ไฟล์. mp4 อีกครั้งและเพิ่มการประมวลผล mpeg-ts ใน ffmpeg
Paul Gregoire

@Mainain จริง ๆ แต่ MPEG-TS / .m3u8 นั้นไม่ใช่วิดีโอที่เข้ากันได้กับ HTML5 คุณต้องการเซิร์ฟเวอร์ HLS และคุณจำเป็นต้องรู้เพิ่มเติมเกี่ยวกับการสตรีมเล็กน้อยซึ่งไม่ได้อยู่ในขอบเขตของคำถามนี้
slhck

คะแนนที่ดี แต่จากประสบการณ์ของฉันป่านนี้เซิร์ฟเวอร์ HTTP ธรรมดาสามารถให้บริการ m3u8 ไปยังแท็กวิดีโอ สิ่งเดียวที่ปกติต้องทำคือเพิ่มประเภท mime สำหรับ m3u8 และ ts ในการกำหนดค่าเซิร์ฟเวอร์ตามลำดับ
Paul Gregoire
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.