การแปลงวิดีโอเป็น WebM ด้วย ffmpeg / avconv


18

ในขณะที่พยายามเพิ่มขนาดของโฮมวิดีโอของฉันฉันได้แปลงบางส่วนให้เป็น WebM เป็นแบบทดสอบโดยใช้ Pitivi บน Xubuntu ความแตกต่างของขนาดมีความสำคัญ ไฟล์ webm ที่ได้นั้นอยู่ที่ประมาณ 10% ของไฟล์ต้นฉบับในขณะที่คุณภาพของภาพนั้นค่อนข้างใกล้เคียงกับฉัน

ฉันพยายามแปลงโดยใช้avconvดังนั้นฉันจึงสามารถสคริปต์ได้ แต่ไฟล์ที่ได้จะดูแย่มาก หลังจากดูการตั้งค่าการเรนเดอร์ใน Pitivi ฉันลองใช้พารามิเตอร์บางอย่าง: avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webmแต่คุณภาพยังคงดูเหมือนว่าไร้สาระดังนั้นดูเหมือนว่าฉันขาดหายไป / ใช้พารามิเตอร์ที่ไม่ถูกต้อง มีใครรู้บ้างว่าเป็นพารามิเตอร์ที่ถูกต้องที่ใช้ในการแปลงภาพยนตร์ h264 เป็น webm และได้คุณภาพเช่นเดียวกับ Pitivi หรือไม่

นี่คือการตั้งค่าใน Pitivi: สร้างโครงการ Pitivi แสดงผลเป็น webm (วิดีโอ html5) การกำหนดค่าตัวแปลงสัญญาณ

คำตอบ:


53

หมายเหตุ:ข้อมูลนี้จะขึ้นอยู่กับ FFmpeg วิกิพีเดียในการเข้ารหัส VP9 โปรดอ้างอิงบทความนั้นสำหรับข้อมูลเพิ่มเติม - มันจะได้รับการบำรุงรักษาและขยายอย่างต่อเนื่อง เพื่อผลลัพธ์ที่ดีที่สุดคุณควรใช้รุ่นล่าสุดffmpegโดยดาวน์โหลดจากเว็บไซต์ของพวกเขา (บิลด์คงที่จะเพียงพอ; มันมีlibvps-vp9ตัวเข้ารหัส)

อัตราบิตผันแปร

การเข้ารหัส VBR ให้คุณภาพโดยรวมที่ดีที่สุดเนื่องจากตัวเข้ารหัสสามารถเลือกจำนวนบิตที่จะกำหนดให้กับเฟรมได้อย่างอิสระ เลือกโหมดนี้หากคุณไม่ได้เตรียมวิดีโอสำหรับการสตรีมแบบคงที่

ตัวเลือกที่ 1: การเข้ารหัสคุณภาพคงที่

โดยทั่วไปหากคุณไม่ต้องการกำหนดเป้าหมายขนาดไฟล์เฉพาะคุณควรปล่อยให้บิตเรตแตกต่างกันอย่างอิสระเนื่องจากจะทำให้คุณภาพสูงสุด คุณสามารถทำได้โดยการตั้งค่าบิตเรตเป็น 0 และปัจจัยอัตราคงที่ ( CRF ) เป็นระดับคุณภาพเป้าหมาย:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

ค่า CRF ได้ตั้งแต่ 0–63 ค่าที่ต่ำกว่าหมายถึงคุณภาพที่ดีขึ้น ค่าที่แนะนำอยู่ในช่วง 15–35 โดยแนะนำให้ใช้ 31 สำหรับวิดีโอ 1080p HD Google มีคู่มือที่มีข้อมูลเพิ่มเติมว่า

ตัวเลือกที่ 2: การเข้ารหัสสองรอบด้วยบิตเรตเป้าหมาย

หากคุณต้องการให้ไฟล์ของคุณมีบิตเรตเป้าหมายหรือขนาดไฟล์ที่เฉพาะเจาะจงคุณจะต้องระบุอัตราและใช้การเข้ารหัสแบบสองรอบ ที่นี่เราเลือก 5 MBit / s ซึ่งน่าจะเพียงพอสำหรับเนื้อหา 1080p

ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 1 -f webm /dev/null && \
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 2 output.webm

ผู้ใช้ Windows ต้องใช้NULแทน/dev/nullและแทน^\

อัตราบิตคงที่

ก่อนอื่น libvpx เสนอโหมดการเข้ารหัสบิตเรตและตัวแปรบิตคงที่ ควรหลีกเลี่ยงอัตราบิตคงที่เมื่อใดก็ตามที่เป็นไปได้ (เว้นแต่คุณจะกำหนดเป้าหมายขนาดไฟล์เฉพาะหรือสถานการณ์การสตรีม) เนื่องจากคุณภาพเฉลี่ยต่อขนาดไฟล์จะแย่ลง ยังคุณสามารถลองตั้งค่าบิตเรตคงที่หากไม่มีสิ่งใดที่เหมาะกับคุณเช่น 1 MBit / s

ffmpeg -i input.mp4 -c:v libvpx-vp9 -minrate 5M -maxrate 5M -b:v 5M output.webm

ดูที่เอาต์พุตและเพิ่มหรือลดอัตราบิตตามความชอบของคุณ (หรือข้อ จำกัด ขนาดไฟล์) ตัวอย่างเช่นคุณสามารถใช้500Kหรือ5Mอื่น ๆ

คุณต้องระบุ-minrate, -maxrateและบิต-b:vเพื่อให้การเข้ารหัสที่จะใช้ CBR พวกเขาทั้งหมดต้องมีค่าเท่ากันมิฉะนั้นจะเลือกบิตเรตเป้าหมายที่แตกต่างกันแทนและทำการเข้ารหัส VBR แต่มีคุณภาพไม่ดี

เสียง

ตัวแปลงสัญญาณเสียงปัจจุบันของตัวเลือกสำหรับการเข้ารหัส VP9 คือ Opus FFmpeg จะเลือกตัวเข้ารหัสที่จำเป็นและตัวเลือกตามค่าเริ่มต้น หากคุณต้องการตั้งค่าอย่างชัดเจน-c:a libopusคุณสามารถทำได้เช่นกัน อ้างถึงlibopusเอกสารประกอบสำหรับตัวเลือกเพิ่มเติม


4
นี่คือแนวทางที่ดีที่สุดในการเข้ารหัส VP8 บนอินเทอร์เน็ตทั้งหมด ทำได้ดีมากฉันหวังว่าฉันจะโหวตได้มากกว่านี้อีกครั้ง!
evilsoup

@evilsoup ขอบคุณ ฉันยังคงปรับเปลี่ยนมันและจะเพิ่มหน้าใหม่ใน FFmpeg wiki ในภายหลัง
slhck

นี่คือคำตอบที่ยอดเยี่ยมอย่างแท้จริง! ตอนนี้ฉันเข้าใจแล้วว่าทำไมวิดีโอของฉันถึงมีคุณภาพต่ำเหมือนกันเสมอเพราะจริงๆแล้วฉันใช้ค่าเริ่มต้นที่ 256 kBit / s ขอบคุณมาก!
jeroen

ความแตกต่างของขนาดระหว่าง mp4 ต้นฉบับกับ webm ที่แปลงแล้วคืออะไร
switz

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