ffmpeg ใช้เธรดจำนวนเท่าใดตามค่าเริ่มต้น


46

ฉันเห็นว่ามี-threads <count>ตัวเลือกบรรทัดคำสั่งใน ffmpeg ค่าเริ่มต้นของตัวเลือกนี้คืออะไร?

คำตอบ:


24

ขึ้นอยู่กับตัวแปลงสัญญาณที่ใช้รุ่น ffmpeg และจำนวน CPU core ของคุณ บางครั้งก็เป็นเพียงหนึ่งเธรดต่อคอร์ บางครั้งมันซับซ้อนกว่าเช่น:

ด้วย libx264 มันเป็นแกน x 1.5 สำหรับเธรดเฟรมและแกน x 1 สำหรับเธรดสไลซ์


ขอบคุณ คุณมีการอ้างอิงถึงค่าเริ่มต้นสำหรับตัวแปลงสัญญาณมาตรฐานที่สนับสนุนโดย ffmpeg หรือไม่
Edward Dale

6
อย่าพึ่งมัน ffmpeg 0.7.8 ของฉันบน Linux ใช้ 1 เธรดโดยค่าเริ่มต้นไม่ว่าจะเกิดอะไรขึ้น
Barafu Albino

ค่าอะไรที่สามารถใช้เพื่อให้ได้ผลลัพธ์ที่ดีกว่า PS ฉันใช้ FFMpeg ในกรอบงาน Android
นักฆ่า

23

ในปี 2014 ใช้หมายเลขที่เหมาะสมที่สุด

คุณสามารถตรวจสอบสิ่งนี้ได้ในคอมพิวเตอร์แบบมัลติคอร์โดยตรวจสอบโหลดซีพียู (Linux:, topWindows: ตัวจัดการงาน) ด้วยตัวเลือกต่างๆใน ffmpeg:

  • -threads 0 (ดีที่สุด);

  • -threads 1 (เธรดเดียว);

  • -threads 2 (2 เธรดสำหรับเช่น Intel Core 2 Duo)

  • ไม่มี (ค่าเริ่มต้นยังดีที่สุด)

การแก้ไขในปี 2558:บนซีพียู 12 คอร์คำสั่งบางคำสั่ง ffmpeg มีลีนุกซ์topแสดงมากถึง 200% cpu (มีเพียง 2 คอร์) ไม่ว่าจะให้เบอร์-threadsไหน ดังนั้นค่าเริ่มต้นอาจยังดีที่สุดในแง่ของ "ดีเท่า ffmpeg ไบนารีนี้" แต่ไม่ดีที่สุดในแง่ของ "ใช้ประโยชน์ leet CPU ของฉันอย่างเต็มที่"


1
โปรดทราบว่านี่เป็นเพียงการเข้ารหัสเท่านั้นไม่ใช่การประมวลผลทั่วไป ถ้ามันไม่ได้สร้างเฟรมเอาท์พุทจริงๆมันก็จะไม่ขนานกัน เช่นหากคุณกำลังสั่นเทาตั้งแต่เวลา 02:00 น. เป็นต้นไปคุณจะได้รับการขนานกันตั้งแต่ 02:00 น. เป็นต้นไป แต่ทุกอย่างจนถึง 02:00 นจะยังคงต้องดำเนินการตามลำดับ
Mehrdad

6

ในปี 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

6

บางคำตอบเหล่านี้ค่อนข้างเก่าและฉันแค่อยากจะเพิ่มมันด้วยการffmpeg 4.1เข้ารหัสของฉันlibx264ทั้งหมด 6 คอร์ / 12 เธรดของระบบ Ryzen 5 2600X ของฉันถูก maxed โดยไม่มี-threadข้อโต้แย้งใด ๆ


ฉันมี 1800X และฉันสังเกตว่ามีการใช้งานไม่ถึง 20% ทั่วทั้ง 16 เธรด แต่ฉันกำลังใช้อาร์กิวเมนต์ตัวเลือกไม่กี่ตัวเช่นกัน: -vcodec libx264 -profile:v high444 -refs 14 -preset ultrafast -crf 18 -tune fastdecodeนั่นคือตัวแปรสองสามตัวที่จะแยก การเพิ่มใน-threads 12ไม่มีผลใด ๆ
Elaskanator

3

ฉันกำลังเล่นกับการแปลงใน 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ตัวเลือกนี้สามารถเพิ่มประสิทธิภาพดังนั้นให้ทำการทดสอบบางอย่างกับเครื่องของคุณในระดับต่างๆเพื่อค้นหาจุดที่ตั้งค่าของคุณ


คุณช่วยเพิ่มความหมายของคำว่า "การแปลง" ได้ไหม? เป็นการดีที่คำสั่งที่แน่นอน
Ondra Žižka

4.1.3 บน Ubuntu 18.04 และผลลัพธ์ที่คล้ายกันมาก ค่าเริ่มต้นคือ "โหลดต่ำในทุกแกน"
Roel Van de Paar

ฉันเดาว่าทำไมคุณถึงดีที่สุดที่ 6 เธรดในเครื่อง "12 core" (ไม่ได้ระบุ cpu แตกต่างจากรายการแรก) คือ 6 อาจเป็นจำนวนแกนจริงและ 12 จำนวนเธรด?
Roel Van de Paar

1

สมมติว่าคุณเปิดใช้เธรดแล้วจะกำหนดจำนวนแกน 1.5 เท่า


1.5 แกนจำนวนแกนสำหรับเธรดเฟรม 1 แกนจำนวน x สำหรับเธรดสไลซ์ นี่เป็นเฉพาะสำหรับ (lib) x264 ฉันไม่แน่ใจว่าการจัดสรรสำหรับตัวเข้ารหัสอื่นคืออะไร
15209 llogan

@LordNeckbeard วิธีการสลับระหว่างการทำเกลียวเฟรมและการทำเกลียวชิ้น!?
Dr.jacky

1
@ Mr.Hyde -x264-params sliced-threads=1อาจจะมี -tune zerolatencyหรือผ่านการใช้งานของ
llogan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.