ฉันเห็นว่ามี-threads <count>
ตัวเลือกบรรทัดคำสั่งใน ffmpeg ค่าเริ่มต้นของตัวเลือกนี้คืออะไร?
ฉันเห็นว่ามี-threads <count>
ตัวเลือกบรรทัดคำสั่งใน ffmpeg ค่าเริ่มต้นของตัวเลือกนี้คืออะไร?
คำตอบ:
ขึ้นอยู่กับตัวแปลงสัญญาณที่ใช้รุ่น ffmpeg และจำนวน CPU core ของคุณ บางครั้งก็เป็นเพียงหนึ่งเธรดต่อคอร์ บางครั้งมันซับซ้อนกว่าเช่น:
ด้วย libx264 มันเป็นแกน x 1.5 สำหรับเธรดเฟรมและแกน x 1 สำหรับเธรดสไลซ์
ในปี 2014 ใช้หมายเลขที่เหมาะสมที่สุด
คุณสามารถตรวจสอบสิ่งนี้ได้ในคอมพิวเตอร์แบบมัลติคอร์โดยตรวจสอบโหลดซีพียู (Linux:, top
Windows: ตัวจัดการงาน) ด้วยตัวเลือกต่างๆใน ffmpeg:
-threads 0
(ดีที่สุด);
-threads 1
(เธรดเดียว);
-threads 2
(2 เธรดสำหรับเช่น Intel Core 2 Duo)
ไม่มี (ค่าเริ่มต้นยังดีที่สุด)
การแก้ไขในปี 2558:บนซีพียู 12 คอร์คำสั่งบางคำสั่ง ffmpeg มีลีนุกซ์top
แสดงมากถึง 200% cpu (มีเพียง 2 คอร์) ไม่ว่าจะให้เบอร์-threads
ไหน ดังนั้นค่าเริ่มต้นอาจยังดีที่สุดในแง่ของ "ดีเท่า ffmpeg ไบนารีนี้" แต่ไม่ดีที่สุดในแง่ของ "ใช้ประโยชน์ leet CPU ของฉันอย่างเต็มที่"
ในปี 2015 บน Ubuntu 14.04 ด้วย ffmpeg 0.8.10-6 มันใช้ 1 คอร์ในระบบ 4 คอร์
htop
แสดงให้เห็นนี้ ใช้แกนเดียวเท่านั้นและฉันได้อัตราการแปลง 16 fps สำหรับวิดีโอ FullHD
ใช้-threads 4
ทำให้แกน CPU ทั้งหมดของฉันไปที่ 100% และฉันได้รับอัตราการแปลง 47 fps
ฉันใช้คำสั่งต่อไปนี้:
$ ffmpeg -i foo.mp4 -y -target pal-dvd -aspect 16:9 dvd-out.mpg
บางคำตอบเหล่านี้ค่อนข้างเก่าและฉันแค่อยากจะเพิ่มมันด้วยการffmpeg 4.1
เข้ารหัสของฉันlibx264
ทั้งหมด 6 คอร์ / 12 เธรดของระบบ Ryzen 5 2600X ของฉันถูก maxed โดยไม่มี-thread
ข้อโต้แย้งใด ๆ
-vcodec libx264 -profile:v high444 -refs 14 -preset ultrafast -crf 18 -tune fastdecode
นั่นคือตัวแปรสองสามตัวที่จะแยก การเพิ่มใน-threads 12
ไม่มีผลใด ๆ
ฉันกำลังเล่นกับการแปลงใน CentOS 6.5 VM (Ryzen 1700 8c / 16t - vm กำหนด 12 จาก 16 คอร์) การทดลองที่มีภาพยนตร์ 480p ได้รับการสนับสนุนดังนี้:
ตัวเลือกเธรด / อัตราการแปลง (fps @ 60 วินาที)
(none/default)/130fps
-threads 1/70fps
-threads 2/120fps
-threads 4/185fps
-threads 6/228fps
-threads 8/204fps
-threads 10/181fps
ส่วนที่น่าสนใจคือการโหลด CPU (ใช้htop
เพื่อดู)
การใช้-threads
ตัวเลือกไม่มีผลกระทบกับช่วง 130fps โดยมีการกระจายโหลดทั่วทั้งคอร์ที่ระดับโหลดต่ำ
การใช้ 1 เธรดทำอย่างนั้นโหลดหนึ่งคอร์ที่ 100% การใช้สิ่งอื่นทำให้เกิดสถานการณ์การแพร่กระจายอีกครั้ง
อย่างที่คุณเห็นมีจุดลดน้อยลงดังนั้นคุณต้องปรับตัวเลือก -threads สำหรับเครื่องเฉพาะของคุณ สำหรับการตั้งค่าของฉันโดยเฉพาะการใช้ -threads 6 (บนเครื่อง 12 คอร์) ทำให้ FPS ที่ดีที่สุดเมื่อแปลงวิดีโอ (จาก h264 ถึง x264 ที่บิตเรตที่แตกต่างกันเพื่อบังคับการแปลง) และกลับลดเธรดที่ฉันโยนลงไป มัน.
อาจเป็นปัญหาเกี่ยวกับหน่วยความจำด้วย - มีเพียง 1GB ที่กำหนดให้กับ VM ฉันอาจปรับแต่งและดูว่ามีการเปลี่ยนแปลงอะไร ยัง - มันแสดงให้เห็นว่าการใช้-threads
ตัวเลือกนี้สามารถเพิ่มประสิทธิภาพดังนั้นให้ทำการทดสอบบางอย่างกับเครื่องของคุณในระดับต่างๆเพื่อค้นหาจุดที่ตั้งค่าของคุณ
สมมติว่าคุณเปิดใช้เธรดแล้วจะกำหนดจำนวนแกน 1.5 เท่า
-x264-params sliced-threads=1
อาจจะมี -tune zerolatency
หรือผ่านการใช้งานของ