วิธีการเปลี่ยนการตั้งค่า ffmpeg -threads


15

ทำงานในไซต์หลอด ฉันทำงานวิดีโอผ่านffmpegบนลินุกซ์เซิร์ฟเวอร์ทุ่มเทให้กับการแปลงเป็นmp4

รายละเอียดเซิร์ฟเวอร์:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Stepping:              3
CPU MHz:               3491.749
BogoMIPS:              6983.49
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7

ปัญหาระหว่างการทดสอบคือการทำ 4-5 ครั้งในคราวเดียวเซิร์ฟเวอร์โหลด skyrockets ไปที่ค่าเฉลี่ยประมาณ 36 นี่เป็นเพียงคนเดียว ฉันคิดว่ามันเปิดเมื่อมีคนจำนวนมากจะถูกอัปโหลดพร้อมกัน

ดูเหมือนว่าffmpegพยายามที่จะใช้ทรัพยากรทั้งหมดที่มีต่อการแปลง

ฉันได้ยินมาว่ามีการตั้งค่าเธรดที่คุณสามารถเปลี่ยนได้ แต่ฉันหามันไม่เจอ ฉันมีเซิร์ฟเวอร์ซีพียู 8 ตัว มันใช้สำหรับการแปลงเท่านั้นดังนั้นฉันได้ยินมาว่าการตั้งค่าที่ดีที่สุดจะอยู่ระหว่าง 2 ถึง 4 ฉันสามารถทดสอบได้

แต่ฉันจะเปลี่ยนการตั้งค่านี้ได้อย่างไร ทุกอย่างที่ฉันเห็นทางออนไลน์พูดถึงการตั้งค่านี้ แต่ไม่ใช่ขั้นตอนในการเปลี่ยนแปลง

linux  ffmpeg  cpu  mp4 

คำตอบ:


17

การตั้งค่าสถานะตัวเลือกที่คุณต้องการนั้นแท้จริง-threadsแล้วคุณจะใช้เช่นนี้ (สำหรับเพียงหนึ่งเธรด):

ffmpeg -i somefile.wmv -c:a libfdk_aac -c:v libx264  -threads 1 transcoded.mp4

อย่างไรก็ตามมีรายละเอียดย่อยบางอย่างที่จะเพิ่มภาระเซิร์ฟเวอร์และเวลาของคุณเช่นการลดขนาดการใช้ตัวกรองและคุณภาพเฟรม / อัตราเฟรมสุดท้าย - ไม่พูดถึงข้อเท็จจริงที่ว่าสถาปัตยกรรม VM บางอย่างอ่านและเขียนทุกอย่างจริง ๆ สองครั้ง และอีกครั้งจริง !!!)

ต่อไปนี้เป็นเคล็ดลับในการเพิ่มความเร็ว:

  1. ใช้คิวเพื่อให้มีเพียงหนึ่งไอเท็มเท่านั้นที่ถูกแปลงในแต่ละครั้ง
  2. ขอไฟล์ขนาดเล็กจากผู้ใช้ของคุณ
  3. ใช้แรงม้าเต็มของเครื่องของคุณโดย:
    • การอ่านและการเขียนจาก ramdisk
    • เปลี่ยนเป็นโลหะเปลือยสำหรับการแปลงรหัส
    • ใช้ -threads 0

ไม่ว่าคุณจะทำอะไรให้ผู้ใช้แจ้งเกี่ยวกับกระบวนการแปลงรหัสเพราะใช้เวลา (IJTT)

[แก้ไขคำสั่งเพื่อสะท้อนความคิดเห็นของ LordNeckbeard]


10
ตัวเลือกการวางตำแหน่งมีความสำคัญ ด้วย-threadsก่อนที่จะป้อนข้อมูลที่คุณจะใช้ตัวเลือกนี้การป้อนข้อมูล (ถอดรหัส) ffmpeg [global options] [input options] -i input [output options] outputการใช้งานทั่วไปคือ
llogan

ดังนั้นคุณจะแนะนำให้วางไว้ที่ไหน? ฉันคิดว่าตอนแรกมันถูกใช้ทั่วโลก?
denjello

3
เป็นตัวเลือกเอาต์พุตดังนั้นมันจึงกลายเป็นตัวเลือกการเข้ารหัส ดูเอกสาร FFmpeg(global)ไปยังมุมมองตัวเลือกที่ถูกทำเครื่องหมายเป็น
llogan

มันสำคัญไหมถ้าคุณใส่-threadsarg ก่อนหรือหลัง-iarg? นอกจากนี้ฉันควรกำหนดจำนวนเธรดที่ฉันควรใช้อย่างไร ฉันแค่กำลังทำอยู่โดยทั่วไป-c copy
chovy

3

นี่อาจจะเก่าไปหน่อย แต่มันฟังดูเหมาะสำหรับที่เก็บของอย่างนักเทียบท่า

  • ให้ ffmpeg ทำงานด้วยfull horsepower(ตามที่ denjello เรียกว่า)
  • แต่ปล่อยให้มันทำงานภายในนักเทียบท่า

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

มากขึ้น: บางทีคุณอาจมีงานที่แตกต่างกันซึ่งอาจทำงานในพื้นหลังและคุณไม่สนใจว่าจะต้องใช้เวลานานแค่ไหนและคุณมีงานที่ควรทำงานเร็วดังนั้นคุณจึงสามารถกำหนดงานที่แตกต่างกันได้

ดูhttps://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources

มีภาพ ffmpeg ที่กำหนดไว้ล่วงหน้าแล้วบน github: https://github.com/jrottenberg/ffmpeg

docker run jrottenberg/ffmpeg \
        -i http://url/to/media.mp4 \
        -stats \
        $ffmpeg_options  - > out.mp4

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


มันสุดยอดไปเลยใช่ไหมที่จะเรียกใช้มันภายในนักเทียบท่า? มีวิธีที่ดีกว่าอื่น ๆ อีกมากมายในการ จำกัด การใช้งานตัวประมวลผลบน Linux scoutapm.com/blog/…
yurtesen

ทำไม? พิจารณาว่าคุณได้ติดตั้งนักเทียบท่าแล้วใช้คอนเทนเนอร์ที่มี--rmแฟล็กเพื่อทำงานและลบคอนเทนเนอร์หลังจากออกเป็นสิ่งที่ผู้ดูแลระบบปกติสามารถทำได้และควรทำในปี 2562 โดยเฉพาะอย่างยิ่งสำหรับการแปลงเอกสาร การแปลงล้มเหลว? ลองเวอร์ชันตัวแปลงอื่นโดยไม่ต้องอัพเกรด / ลดระดับ toolchain ในพื้นที่ของคุณหรือไม่ คุณไม่เชื่อถือเอกสารเพราะมันถูกดาวน์โหลดมาจากอินเทอร์เน็ต? แยกงานในภาชนะ Ffmpeg ไม่ใช่ข้อยกเว้น cvedetails.com/vulnerability-list/vendor_id-3611/Ffmpeg.html
Jürgen Steinblock

ฟังดูเหมือนการพูดคุยด้านการตลาด นักเทียบท่าไม่สมบูรณ์แบบเหมือนที่คุณวางไว้ -> techbeacon.com/security/… ใน Linux ผู้ใช้ทั่วไปยังสนุกกับการเข้าถึงที่ จำกัด และความปลอดภัยของระบบ ความต้องการของการลดระดับรุ่นโปรแกรมนั้นหายากมากและสามารถทำได้ผ่านที่เก็บข้อมูล ภาพนักเทียบท่าหลายคนทำโดยคนสุ่ม บางทีอิมเมจของเครื่องมือแปลงเอกสารอาจถูกบุกรุกและส่งสำเนาเอกสารทั้งหมดของคุณไปยังเซิร์ฟเวอร์ระยะไกล ดังนั้นการใช้อิมเมจของนักเทียบท่าจึงเพิ่มโอกาสที่จะเกิดช่องโหว่ดังกล่าว ถ้าเช่นนั้นจะเป็นอย่างไร
yurtesen

Perhaps the document converter docker image was compromised and sent copy of all your documents to a remote server. So, using docker images increase possibility such vulnerability. What then?ชำระเงิน repo ตรวจสอบ dockerfile และใช้docker build -t myimageเพื่อสร้างภาพในตัวคุณเอง หรือสร้าง dockerfile ของคุณเองมันไม่ใช่วิทยาศาสตร์จรวดgithub.com/alfg/docker-ffmpeg/blob/master/Dockerfile
Jürgen Steinblock
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.