วิธีแปลง mp4 เป็น webm อย่างรวดเร็วโดยใช้ ffmpeg


20

ฉันต้องแปลงไฟล์ mp4 เป็น webm เพื่อใช้ในเว็บไซต์ที่ใช้วิดีโอ HTML5 ฉันกำลังพูดถึงไฟล์ mp4 ประมาณ 10 Gb ... ฉันรู้ว่าฉันขอให้ ffmpeg ทำเช่นนั้นโดยใช้:

ffmpeg -i input_file.mp4 output_file.webm

แน่นอนฉันจะทำซ้ำโดย:

find ./ -name '*.mp4' -exec bash -c 'ffmpeg -i "$0" "${0%%.mp4}.webm"' {} \;

ฉันลองสิ่งที่ฉันพบที่ไหนสักแห่งบนอินเทอร์เน็ต:

ffmpeg -i input_file.mp4 -cpu-used 4 -threads 8 output_file.webm

แต่สิ่งนี้คือมันจะไม่พาฉันไปน้อยกว่าหนึ่งสัปดาห์ !!! ผมทำอะไรผิดหรือเปล่า? มีวิธีใดที่เป็นไปได้ในการเร่งความเร็วนี้หรือไม่? ถ้าฉันแปลงเป็น ogg ฉันจะได้รับความเร็วหรือไม่ กรุณาช่วย!!!


2
ดูFFmpeg วิกิพีเดีย: VPX (WebM) การให้รหัสคู่มือ
llogan

@LordNeckbeard คุณควรเขียนคำตอบตามคู่มือนั้น นอกจากนี้ก็ควรจะตั้งข้อสังเกตว่าการเข้ารหัส VPX ช้าเป็นกากน้ำตาลแม้จะมีสติตั้งค่าอื่น ๆ เมื่อเทียบกับ x264 ... จนกว่าคุณจะยินดีที่จะเสียสละจำนวนมากที่มีคุณภาพไฟเป็นไปไม่ได้ที่จะได้รับมันอย่างรวดเร็วถอดรหัสกับมัน
evilsoup

ปัญหาเกี่ยวกับความเข้ากันได้ .. นี่คือตารางความเข้ากันได้เล็กน้อย: {x264: IE (+) Safari (+) Chrome (+) Firefox (-) Opera (-)} {webm: IE (-) Safari (-) Chrome (+) Firefox (+) Opera (+)} ฉันรู้ว่าพวกเขาบอกว่า Safari และ IE ถือเป็นส่วนที่ใหญ่ที่สุดของตลาด แต่ฉันสงสัยอย่างจริงจังและจะพนันใน Firefox และ Opera! ;)
pr.nizar

@ pr.nizar ขอบคุณที่ Cisco ปล่อย OpenH264 ภายใต้ BSD ตอนนี้ firefox รองรับ h.264
Wyatt8740

คำตอบ:


11

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

นี่คือจุดเริ่มต้น:

http://blog.pcode.nl/2010/10/17/encoding-webm-using-ffmpeg/

การตั้งค่าเหล่านั้นจะเข้ารหัสเป็นบิตเรตเฉลี่ยโดยเฉพาะ(บิตเรตวิดีโอ 3900kbit) ดังนั้นจะมีเดือยแหลมในบิตเรต

MP4 และ WebM ใช้ตัวแปลงสัญญาณวิดีโอที่แตกต่างกันดังนั้นจึงไม่มีทางลัด วิดีโอต้องแปลงรหัส

แน่นอนความเร็วในการเข้ารหัสจะแตกต่างกันอย่างมากขึ้นอยู่กับขนาดของเฟรมอัตราเฟรมและการตั้งค่าคุณภาพ สำหรับการเข้ารหัส 720p คุณอาจคาดว่าจะสามารถเข้ารหัสได้ประมาณ 1: 1 (เช่นวิดีโอ 10 ชั่วโมงใน 10 ชั่วโมง) บน CPU จากสองสามปีที่ผ่านมา หากคุณทำการเข้ารหัส ABR แบบสองรอบเหมือนในตัวอย่างที่ให้ไว้ในลิงก์ให้เพิ่มเป็นสองเท่า


8

สองเท่าหรือครึ่งตัดนั่น? ดังนั้นมันจึงเป็นจุดจบ .. ฉันจะไม่เล่นกับบิตเรตฉันไม่รู้เลยว่าจะคาดหวังอะไรจากคุณภาพหรือขนาด .. ฉันคิดว่าฉันจะยึดติดกับสิ่งนี้

find ./ -name '*.mp4' -exec bash -c 'ffmpeg -i "$0" -vcodec libvpx -acodec libvorbis -cpu-used 5 -threads 8 "${0%%.mp4}.webm"' {} \;

ฉันโพสต์ไว้สำหรับผู้ใช้ในอนาคตจริง ๆ แล้วฉันได้ความเร็ว แต่ CPU ของฉันทำงานเหมือนนรก: 60 ถึง 80% สำหรับแต่ละคอร์! ตอนนี้ฉันคิดว่ามันใช้เวลาน้อยกว่า: 3 วันแทนที่จะเป็น 6 หรือ 7 .. ฉันหวังว่ามันจะไม่พัง .. ^ _ ^

ขอบคุณคนต่อไป!

แก้ไข: ลบสวิตช์ -sameq หลังจากความคิดเห็นจาก LordNeckbeard และ neon_overload -sameq ไม่ได้หมายความว่า "คุณภาพ" เดียวกัน


3
-sameqไม่ได้หมายถึง "คุณภาพเดียวกัน"และถูกลบอัปสตรีม อย่าใช้มัน อ้างถึงลิงค์ในความคิดเห็นของฉันสำหรับคำถามของคุณสำหรับคำแนะนำการเข้ารหัส libvpx โดยละเอียด
llogan

2
-sameq หมายถึง quantizer เดียวกัน แต่เป็นไปไม่ได้ที่จะเปรียบเทียบ quantizers ระหว่าง h.264 และ VP8 ดังนั้นแม้ว่าสิ่งนี้จะได้ผลคุณเกือบจะได้รับผลเสียหายถ้าคุณใช้มัน - ดังนั้นอย่า
thomasrutter

2
ขอบคุณผู้ชายที่ให้ความสนใจฉัน! ฉันแก้ไขคำตอบของฉัน .. ;) ที่จริงฉันไม่ได้ใช้สวิตช์นั้นเพราะฉันเห็นว่ามันทำให้ช้าลง .. ฉันยังลด ffmpeg และใช้ avconv: มันเร็วกว่าวิธีเดิม! งานเสร็จในหนึ่งวันครึ่งด้วยสิ่งนี้: find ./ -name '* .mp4' -exec bash -c 'avconv -i "$ 0" -vcodec libvpx -acodec libvorbis -cpu-used 5 -threads 8 " $ {0 %%. mp4} .webm "'{} \; ฉันรู้ว่าฉันเปลี่ยนใจเรื่องนี้ด้วยความคิดเห็นนี้ แต่ฉันคิดว่ามันคุ้มค่าที่จะบอกว่า .. ^ _ ^ หวังว่ามันจะช่วยให้ใครบางคนออกไป! ;)
pr.nizar

สำหรับคุณภาพจริงๆแล้วฉันไม่สามารถบอกความแตกต่างระหว่างไฟล์ต้นฉบับกับไฟล์ webm trancoded ได้: มันเกือบจะเหมือนกันกับคุณภาพเสียงและวิดีโอ!
pr.nizar

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