สูตรชีทและการตั้งค่าล่วงหน้าที่ทำงานกับ FFmpeg 1.0 จริงหรือ


28

ลองใช้ 'cheat sheets' จำนวนหนึ่งที่มีในที่อื่น แต่เกือบทั้งหมดล้าสมัยแล้วและจะไม่ทำงานกับ FFMpeg เวอร์ชันล่าสุด

ทุกคนสามารถชี้ให้ฉันเห็นการตั้งค่าที่จะทำงานกับ FFMpeg ล่าสุดได้หรือไม่

ฉันสนใจตัวแปลงสัญญาณต่อไปนี้เป็นหลัก

H.264 ค่าที่ตั้งล่วงหน้าคุณภาพต่ำและปานกลาง

เช่นกัน

ProRes ค่าที่ตั้งไว้ล่วงหน้าคุณภาพปานกลางและสูง

คำตอบ:


49

FFmpeg ไม่รวมค่าที่ตั้งไว้ล่วงหน้าที่ใช้ไฟล์ข้อความและโปรไฟล์อีกต่อไปสำหรับ libx264 นั่นคือสิ่งที่คุณใช้กับ-vpreตัวเลือก เหล่านี้ได้รับการตัดค่าเสื่อมราคาและลบออกในความโปรดปรานของการเข้าถึงที่เกิดขึ้นจริง x264 ที่ตั้งไว้ล่วงหน้าโปรไฟล์ (และเพลง) ด้วย-preset, -profile:vและ-tuneตัวเลือก ไฟล์ข้อความเก่าเลียนแบบ x264 ที่ตั้งไว้ล่วงหน้าอย่างเป็นทางการและโปรไฟล์และเนื่องจากข้อ จำกัด หลายประการไม่สามารถให้การทำงานเต็มรูปแบบที่ระบบใหม่ให้ นอกจากนี้ยังง่ายต่อการบำรุงรักษา

นอกจากนี้ตัวเข้ารหัสหลายตัวมีตัวเลือกแยกต่างหาก เรียกอีกอย่างว่า "ตัวเลือกส่วนตัว" คุณจะต้องดูที่ตัวเลือกการเข้ารหัสเสียงและวิดีโอสำหรับตัวแปลงสัญญาณทั่วไปในเอกสารคู่มือ FFmpeg ออนไลน์หรือตรวจสอบผลลัพธ์ของffmpeg -h fullรายการตัวเลือกที่รองรับทั้งหมด ตัวอย่างเช่น x264 แสดงรายการตัวเลือกภายใต้libx264 AVOptionsในวิธีใช้แบบเต็ม

หาก ffmpeg ของคุณรองรับ-presetดังนั้นคุณไม่ควรใช้การตั้งค่าไฟล์ข้อความใด ๆ และ FFmpeg จะไม่มาพร้อมกับสิ่งอื่นนอกเหนือจากที่ตั้งไว้ล่วงหน้าของ iPod ที่ไม่ได้มาตรฐาน เป็นความเข้าใจผิดทั่วไปที่ข้อความที่ตั้งไว้ล่วงหน้าสามารถคัดลอกจากที่ใดก็ได้และใช้กับ ffmpeg ใด ๆ สิ่งนี้ไม่จริงและจะส่งผลให้เกิดการแตกหัก


โดยทั่วไปค่าที่ตั้งล่วงหน้าอนุญาตให้คุณทำสิ่งต่อไปนี้:

ควบคุมคุณภาพ

ควบคุมคุณภาพโดยการระบุบิตเรตผ่าน-b:v(สำหรับวิดีโอ) หรือ-b:a(สำหรับเสียง) หรือโดยการระบุวิธีการเข้ารหัสอื่น ๆ ที่ตัวแปลงสัญญาณอาจสนับสนุน

สำหรับ x264 นั้นมีวิธีการเข้ารหัสที่หลากหลายด้วยวิธีอัตราคงที่ที่มีความซับซ้อนที่สุด มันส่งผลให้อัตราบิตผันแปร แต่คุณภาพโดยรวมที่ดีในหนึ่งผ่าน ค่า CRF อยู่ในช่วงตั้งแต่ 0 ถึง 51 แต่ค่ามีเหตุผลอยู่ระหว่าง 19 ถึง 26 ขึ้นอยู่กับแหล่งที่มาของคุณและคุณภาพที่คุณต้องการ 23 เป็นค่าเริ่มต้นตัวอย่างเช่นคุณสามารถเลือก 18 สำหรับ "คุณภาพสูง" และ 28 สำหรับ "คุณภาพต่ำ" ไม่ว่าสิ่งใดจะมีความหมายสำหรับคุณ

ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

x264 มีวิธีการเข้ารหัสอื่น ๆเช่นกัน แต่นี่อยู่นอกขอบเขตที่นี่

จำกัดโปรไฟล์ H.264

ส่วนกำหนดค่าเหล่านี้กำหนดคุณลักษณะที่ตัวเข้ารหัสอาจใช้เพื่อจับคู่ความสามารถของตัวถอดรหัสบางตัว ใน FFmpeg ที่ผ่านมาใช้ไวยากรณ์ต่อไปนี้เพื่อระบุรายละเอียดที่รายละเอียดอาจจะbaseline, mainหรือhigh:

ffmpeg -i input.mp4 -c:v libx264 -profile:v baseline output.mp4

สำหรับข้อมูลเพิ่มเติมและเวลาที่คุณควรใช้โปรไฟล์ใดให้ดู: ความแตกต่างระหว่างโปรไฟล์ H.264 คืออะไร

เลือกการเข้ารหัส x264 preset

ค่าที่ตั้งล่วงหน้าเหล่านี้มีผลต่อความเร็วการเข้ารหัส การใช้การตั้งค่าล่วงหน้าที่ช้าลงจะช่วยให้คุณบีบอัดได้ดีขึ้นหรือคุณภาพต่อขนาดไฟล์ในขณะที่การตั้งค่าล่วงหน้าที่เร็วขึ้นจะทำให้การบีบอัดแย่ลง โดยทั่วไปคุณควรใช้ค่าที่ตั้งล่วงหน้าที่คุณสามารถจ่ายได้ ค่าที่ตั้งไว้สามารถultrafast, superfast, veryfast, faster, fast, medium(เริ่มต้น), และslow veryslowนี่คือตัวอย่าง:

ffmpeg -i input.mp4 -c:v libx264 -preset slow output.mp4

เข้ารหัสวิดีโอ lossless

สิ่งนี้เป็นไปได้โดยการระบุ CRF เป็น 0 ดังนั้นใช้-crf 0:

ffmpeg -i input.mp4 -c:v libx264 -crf 0 output.mp4

ในที่สุดเรามาพูดถึง ProRes อย่างรวดเร็ว ProRes ยอมรับบิตเรตที่คงที่ด้วย-b:vหรือคุณสามารถระบุโปรไฟล์ซึ่งควรเป็นค่าระหว่าง 0 ถึง 3โดยที่บิตเรตจะถูกเลือกตามโปรไฟล์ สูงกว่าหมายถึงดีกว่า:

ffmpeg -i input.mp4 -c:v prores -profile:v 0 output.mov

ffmbc วิกิพีเดียแสดงให้เห็นว่าชื่อของโปรไฟล์สามารถนำมาใช้ - นี้ แต่ล้มเหลวในการ FFmpeg 1.0


ฉันควรทำอย่างไรเพื่อลดโอกาสของการล้มเหลวในการแปลงเกิดขึ้นโดยการสุ่มบางครั้งไม่เกิดขึ้น
FlyingAtom

@FlyingAtom ฉันยังไม่เคยได้ยินเรื่อง "Conversion Fail" เลย หากคุณมีคำถามเฉพาะที่มีปัญหาที่สามารถจำลองได้โปรดถามคำถามใหม่: superuser.com/questions/ask
slhck

ดังนั้นสิ่งที่คุณจะได้อย่างมีประสิทธิภาพถ้าทั้งหมดที่คุณให้มาคือffmpeg -i input.mp4 -c:v libx264 output.mp4อะไร? CRF: 23 และที่ตั้งไว้ล่วงหน้า: ปานกลาง
Drazen Bjelovuk

1
@ Drazen ใช่ถูกต้อง
slhck

ไชโย! -------
Drazen Bjelovuk

20

ฉันทำการทดสอบที่ฉันแปลงรหัส (โดยใช้การเข้ารหัส libx264 เป็น.mp4) วิดีโอคุณภาพสูงจากกล้องถ่ายวิดีโอ Sony โดยใช้ช่วงเต็มของค่าที่ตั้งไว้ล่วงหน้า (ยกเว้นยาหลอก) ในช่วงของค่า CRF (18, 21, 24 และ 27 ) ฉันอยากรู้ว่าอะไรจะให้ความเร็วการเข้ารหัสคุณภาพผลผลิตและขนาดไฟล์ที่ดีที่สุด

สำหรับค่า CRF แต่ละค่าฉันให้คะแนน transcode ในการเข้ารหัสแต่ละครั้ง (เช่นสำหรับ CRF = 18 ค่าที่ตั้งไว้เร็วมากเวลา 5.7 วินาทีได้ 1.0 คะแนนเวลาที่ช้ามาก 162 วินาทีได้ 0 ด้วยทั้งหมด คะแนนอื่น ๆ จะอยู่ระหว่าง) ฉันคำนวณคะแนนขนาดไฟล์ที่ส่งออกในทำนองเดียวกันแน่นอนว่าให้คะแนนที่เล็กที่สุดเป็นคะแนนที่ดีที่สุด ฉันเพิ่มคะแนนสองคะแนนสำหรับคะแนน "รวม" / ความเร็ว

สำหรับค่า CRF แต่ละค่าสี่ค่าที่ตั้งล่วงหน้า "เร็วมาก" นั้นเป็นรางวัลชนะเลิศที่มีคะแนนต่ำที่สุดคือ 1.94 (สำหรับ CRF 18 และ 21), 1.96 (CRF 24) และ 1.97 (CRF 27) ฉันพบว่ามันแปลกมากที่ "เร็วมาก" ผลิตไฟล์ขนาดเล็กที่สุดเกือบทุกครั้งสูญเสียเพียง "ช้ามาก" และไม่มาก

ข้อแตกต่างอย่างหนึ่งที่ฉันสังเกตเห็นได้จากค่าที่ตั้งไว้ล่วงหน้าต่างๆคือระบบปฏิบัติการ (Windows 7) จะให้ภาพขนาดย่อที่แตกต่างกัน ค่าที่ตั้งล่วงหน้าที่เร็วขึ้นจะแสดงภาพขนาดย่อในวิดีโอหลายวินาทีโดยที่ภาพขนาดย่อสำหรับสถานีที่ตั้งล่วงหน้าช้าลงจะสะท้อนถึงเฟรมเปิดของวิดีโอ นั่นไม่สำคัญสำหรับฉัน สิ่งที่ฉันเรียนรู้คือ "-preset veryfast" น่าจะเป็นตัวเลือกที่ง่าย

นี่คือผลลัพธ์ของฉัน (เป็นภาพสแนปชอตของสเปรดชีต Excel):
excel snapshot

นี่คือสเปรดชีต Excel เป็นข้อความ csv:

CRF,Preset,Seconds,score,MB,score,totalscore
18,1_ultrafast,5.7,1.00,59.5,0.09,1.09
18,2_superfast,8.4,0.98,62.3,0.00,0.98
18,3_veryfast,10.8,0.97,30.9,0.98,1.94
18,4_faster,16.0,0.93,33.5,0.89,1.83
18,5_fast,24.0,0.88,36.8,0.79,1.68
18,6_medium,29.1,0.85,34.9,0.85,1.70
18,7_slow,48.1,0.73,33.9,0.88,1.61
18,8_slower,84.9,0.49,33.0,0.91,1.40
18,9_veryslow,162.0,0.00,30.1,1.00,1.00
21,1_ultrafast,5.7,1.00,38.0,0.00,1.00
21,2_superfast,7.9,0.98,35.0,0.15,1.14
21,3_veryfast,10.0,0.97,19.0,0.97,1.94
21,4_faster,14.2,0.94,21.0,0.87,1.80
21,5_fast,19.9,0.89,23.0,0.77,1.66
21,6_medium,24.6,0.86,22.0,0.82,1.67
21,7_slow,43.1,0.72,21.0,0.87,1.58
21,8_slower,69.8,0.51,20.5,0.89,1.41
21,9_veryslow,137.3,0.00,18.4,1.00,1.00
24,1_ultrafast,5.5,1.00,24.9,0.00,1.00
24,2_superfast,7.5,0.98,21.4,0.27,1.25
24,3_veryfast,9.3,0.97,12.0,0.99,1.96
24,4_faster,13.2,0.93,14.0,0.84,1.77
24,5_fast,17.4,0.90,15.0,0.76,1.66
24,6_medium,21.0,0.87,14.4,0.81,1.67
24,7_slow,37.3,0.72,14.0,0.84,1.56
24,8_slower,62.2,0.51,13.0,0.92,1.42
24,9_veryslow,121.1,0.00,11.9,1.00,1.00
27,1_ultrafast,5.5,1.00,16.8,0.00,1.00
27,2_superfast,7.4,0.98,13.6,0.38,1.36
27,3_veryfast,9.0,0.97,8.4,1.00,1.97
27,4_faster,12.6,0.93,10.1,0.80,1.73
27,5_fast,15.8,0.90,10.4,0.76,1.66
27,6_medium,18.8,0.87,10.0,0.81,1.68
27,7_slow,34.1,0.73,9.8,0.83,1.56
27,8_slower,59.6,0.48,9.0,0.93,1.41
27,9_veryslow,109.7,0.00,8.4,1.00,1.00

3
ฉันรู้ว่าตัวเลือกการจัดรูปแบบของ Super User นั้นปานกลาง แต่อาจเป็นประโยชน์ถ้าคุณโพสต์ข้อมูลเป็นข้อความ - อาจใช้การจัดรูปแบบโค้ด
Scott

1
มโนหร มันยังเร็วกว่าในเครื่องของฉัน ขอบคุณ!
joeytwiddle

1
ฉันต้องยอมรับว่าฉันดูผลลัพธ์ของคุณด้วยความสงสัย แต่ฉันได้ทำการทดสอบซ้ำและได้ผลลัพธ์ที่คล้ายกันโดยใช้ ffmpeg รุ่น 3.3.2-1 ในคลิปภาพยนตร์ 1080p ความละเอียด 2 นาที ในความเป็นจริงแล้วการสร้างไฟล์ขนาดเล็กที่สุดนั้นรวดเร็วมาก 60% ของเวลาและการเข้าชมอันดับสองถึงช้ามากถึง 40% ของเวลา (แต่ไม่มากนัก) จากนี้ไปฉันจะใช้เร็วมากสำหรับการเข้ารหัสทั้งหมดของฉันพร้อมกับค่า CRF ที่ค่อนข้างต่ำ (18, 19, 20) เนื่องจากเร็วมากนั้นช้าเพียงเล็กน้อยกับค่า CRF ที่ต่ำกว่าเมื่อเทียบกับค่าที่สูงกว่า ขอบคุณที่ช่วยให้ฉันประหยัดเวลาได้มาก ข้อมูลดิบและสคริปต์ในความคิดเห็นด้านล่าง
mattst 9'18

1
ต่อจากความคิดเห็นข้างต้น ... นี่คือข้อมูลดิบของฉัน- CRFs 18-27และสคริปต์ทุบตี Linux / UNIX ที่ฉันเขียนเพื่อเรียกใช้การเข้ารหัส (ในกรณีที่ทุกคนต้องการทดสอบแบบเดียวกัน)
mattst 9'18

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