ฉันจะแปลตัวเลือก HandbrakeCLI เป็นตัวเลือก FFmpeg ได้อย่างไร


13

ฉันมีการตั้งค่า commandline หลายอย่างที่ทำงานกับเบรกมือ แต่บางครั้งในวิดีโอบางอัน (ฉันไม่รู้ว่าทำไม) เบรกมือพ่น "Out of memory exception" ฉันสงสัยว่าฉันสามารถหาปุ่มตัวเลือกเดียวกันและใช้ FFmpeg ได้หรือไม่ แต่ดูเหมือนจะไม่ใช่เรื่องง่ายที่จะทำ

FFmpeg บางครั้งอาจไม่มีตัวเลือกเหล่านั้นหรือทำสิ่งต่าง ๆ ตามค่าเริ่มต้น ตัวอย่างเช่นฉันไม่รู้วิธีกำหนด anamorphic แบบกำหนดเองด้วย FFmpeg สำหรับฉันเป็นสิ่งสำคัญมากที่วิดีโอที่ได้จะเป็นผลดีกับมือเบรก นี่คือบรรทัดสำหรับ Handbrake:

HandBrakeCLI.exe --input "d:\input.mpg" --output "d:\output.mp4" --rate 29.97 --cfr --arate 44.1 --format mp4 --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0 --encoder x264 --vb 5200 --aencoder faac --ab 128 --mixdown stereo -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200:level=42:bframes=2:min-keyint=60:keyint=60:ref=4:me=umh:merange=64:subme=7:8x8dct:cabac=1  -v3 -2 -a none

ฉันจะเปลี่ยนสิ่งนี้เป็นคำสั่ง FFmpeg ได้อย่างไร

คำตอบ:


20

Handbrake ใช้ตัวเข้ารหัส x264 สำหรับการแปลงวิดีโอ มีไซต์ที่มีภาพรวมของตัวเลือก x264 และ FFmpegทั้งหมด อย่างไรก็ตามตัวเลือกเหล่านี้จะถูกคัดค้านเล็กน้อยและตัวเลือกเหล่านี้บางตัวไม่ทำงานอีกต่อไปหรืออาจถูกเปลี่ยนชื่อ คุณควรใช้โปรไฟล์ x264 สำหรับตัวเลือกรายละเอียดส่วนใหญ่ แต่เราจะไปที่นั่น

หลายตัวเลือก Handbrake พื้นฐาน (เช่นอัตราเฟรม) ไม่ได้เฉพาะเจาะจงกับ x264 และพวกเขาจะกระจายอยู่ทั่วเอกสารออนไลน์ FFmpeg

ก่อนที่เราจะเริ่มต้นโปรดตรวจสอบว่าคุณใช้ FFmpeg เวอร์ชันล่าสุด เว็บไซต์ดาวน์โหลดของพวกเขามีการสร้างแบบคงที่สำหรับระบบปฏิบัติการที่สำคัญทั้งหมด

ไปกันเถอะ:

  • --input "d:\input.mpg" --output "d:\output.mp4"

    ไวยากรณ์ FFmpeg ffmpeg -i input.mpg … d:\output.mp4เป็น

  • --rate 29.97

    -r 29.97ระบุอัตราเฟรมวิดีโอด้วย (Handbrake --cfrเพิ่งกำหนดอัตราเฟรมคงที่ไม่จำเป็นที่นี่)

  • --arate 44.1

    กำหนดอัตราตัวอย่างเสียงด้วย-ar 44100(เป็น Hz)

  • --format mp4

    ไม่จำเป็นเพราะ FFmpeg รู้ว่าคุณต้องการ MP4

  • --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0

    สิ่งนี้ไม่ได้ทำอะไรนอกเหนือจากการตั้งค่าขนาดเป็น 1920 × 1080 ใน FFmpeg, ทำมันด้วยหรือถ้าคุณต้องการใช้ฟิลเตอร์,-s:v 1920x1080-filter:v "scale=1920:1080"

  • --encoder x264 --vb 5200

    ตั้งค่าการเข้ารหัสด้วยและอัตราบิตไปอย่างต่อเนื่องกับ-c:v libx264 -b:v 5200Kโปรดทราบว่าเรายังไม่ได้มีเมื่อมันมาถึงการตั้งค่าคุณภาพ

  • --aencoder faac --ab 128 --mixdown stereo

    -c:a libfaac -b:a 128K -ac 2คล้ายกับข้างต้นด้วย โปรดทราบว่า FAAC ไม่ได้รับการสนับสนุนใน FFmpeg อีกต่อไป ให้ใช้ตัวเข้ารหัส FFmpeg ในตัวด้วย-c:a aac -b:a 128Kแทน

  • -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200

    สิ่งนี้ตั้งค่าโหมดการเข้ารหัสเป็นVBVซึ่งกำหนดเป้าหมายสถานการณ์การสตรีมแทนที่จะเป็นบิตเรตหรือคุณภาพคงที่อย่างต่อเนื่อง คุณภาพคงที่เรียกอีกอย่างว่าCRFค่าเริ่มต้นสำหรับ x264 - เรียกว่า "Rate Factor" ใน Handbrake ในขณะที่ CRF มักจะให้การเข้ารหัสที่มีคุณภาพดีที่สุดโหมด VBV จะให้ไฟล์ที่เหมาะสำหรับการสตรีมออนไลน์หรืออุปกรณ์ที่มีความสามารถ จำกัด

    ในการตั้งค่า VBV ให้ใช้-maxrate 5200Kและ-bufsize 5200Kตัวเลือกใน ffmpeg

    ในการตั้งค่า CRF ให้ใช้-crf 23ใน ffmpeg

  • level=42

    -level 42ใช้ นี่คือระดับ H.264

  • bframes=2:min-keyint=60:keyint=60:ref=4

    กำหนดจำนวนของ -bf 2B-เฟรมด้วย ช่วงเวลาขั้นต่ำคีย์เฟรมมีการตั้งค่าด้วยและช่วงเวลาสูงสุดด้วย-keyint_min 60 จำนวนภาพอ้างอิงจะกำหนดด้วย-g 60-refs 4

  • me=umh:merange=64:subme=7:8x8dct:cabac=1

    ตัวเลือกเหล่านี้เป็นตัวเลือกที่คุณสามารถตั้งค่าใน ffmpeg เพิ่มเติมได้-x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1เช่น - การตั้งค่าตัวเข้ารหัส x264 อื่น ๆ ที่ไม่ได้แมปโดยตรงกับตัวเลือก ffmpeg

    ต่อไปนี้เป็นรุ่น "TL; DR" หากคุณขี้เกียจไม่สนใจรายละเอียดหรือหากสิ่งต่าง ๆ ใช้งานไม่ได้: ใช้-preset:v medium(หรือปล่อยทิ้งไว้เนื่องจากค่าตั้งล่วงหน้าขนาดกลางเป็นค่าเริ่มต้น) ที่ตั้งไว้ล่วงหน้า x264 เลือกชุดของตัวเลือกที่แลกเปลี่ยนความเร็วในการเข้ารหัสเพื่อประสิทธิภาพการบีบอัด พวกเขากำลังอำนวยความสะดวกจากการตั้งชื่อultrafast, superfast, veryfast, faster, fast, mediumเพื่อslow, และslower veryslowเลือกสิ่งที่คุณรู้สึกสบายใจ

ดังนั้นเพื่อสรุปรุ่นยาว:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -level 42 -bf 2 -keyint_min 60 -g 60 -refs 4 -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1 -c:a aac -b:a 128K -ar 44100 d:\output.mp4

หรือตัวย่อที่ฉันจะใช้ (ด้วยการเข้ารหัส VBV และตัวเลือกรายละเอียดเล็กน้อยถูกลบออก):

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -c:a aac -b:a 128K -ar 44100 d:\output.mp4

การเปลี่ยนเป็นการเข้ารหัสคุณภาพคงที่สำหรับการแปลงอเนกประสงค์ใช้สิ่งนี้และเปลี่ยน-crfพารามิเตอร์จาก 18 เป็น 28 โดยที่ต่ำกว่าหมายถึงคุณภาพที่ดีกว่าและ 23 เป็นค่าเริ่มต้น:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -crf 23 -c:a aac -b:a 128K -ar 44100 d:\output.mp4

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