Berapa banyak contoh perintah FFmpeg yang bisa saya jalankan secara paralel?


18

Saya lelah menjalankan 8 perintah secara paralel untuk sepenuhnya memanfaatkan CPU dan mempercepat konversi Video, seperti ini:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/b.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/c.mp4 > /dev/null 2>&1  &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/d.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/e.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/f.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60  -f mp4 /mnt/g.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4  /mnt/h.mp4 > /dev/null 2>&1 &

2 sampai 3 dari mereka dihentikan. Mengapa ini terjadi? Apakah ini batasan FFmpeg? Saya telah mencoba ini pada 16 inti dan 4 mesin inti, EC2 c1.xlarge dan cc2.8xlarge. Perilaku yang sama. Saya telah mencoba perintah yang rumit dan yang sederhana, masih sama, 2 atau 3 dihentikan.


3
Sepengetahuan saya seharusnya tidak ada apa pun di FFmpeg yang menghentikan Anda melakukannya. Bisa jadi masalah shell?
— slhck

Bagaimana jika saya memiliki input berbeda untuk setiap perintah? Bagaimana saya bisa membuat mereka mandiri, karena jika seseorang berhenti mereka semua berhenti
— Samson

Apakah Anda menemukan parameter untuk menggunakan multi prosesor ?!
— Dr.jacky

apa maksudmu dengan "berhenti" di sini? bash menunjukkannya sebagai dijeda?
— rogerdpack

Jawaban:


21

Dalam menjawab pertanyaan awal, mengapa beberapa pekerjaan berhenti, ffmpeg pada baris perintah bersifat interaktif. Itu terus-menerus membaca input pada baris perintah. Agar Anda dapat menjalankan semuanya di latar belakang, Anda harus mengubah ini:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 > /dev/null 2>&1 &

untuk ini:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 </dev/null > /dev/null 2>&1 &

penambahan </dev/nullmemberitahu ffmpeg untuk tidak mencari input, dan semua pekerjaan Anda harus berjalan di latar belakang.


1
Apa ini: 2> & 1
— Dr.jacky

Terima kasih banyak! Saya memiliki masalah yang sama dan ini bekerja dengan sangat baik, terimalah!
— fr_andres DukunganMonicaCellio

3
@ Mr.Hyde Terlambat ke pesta yang saya tahu, tetapi 2> & 1 memberitahu aliran kesalahan untuk pergi ke tempat yang sama dengan aliran kokoh - jadi / dev / null. Ini singkatan untuk > /dev/null 2>/dev/null.
— berry120

7

Hanya memikirkan perintah Anda: cara yang jauh lebih mudah untuk memalu mesin dengan satu perintah adalah menggabungkan semuanya menjadi satu baris:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 \
 -f mp4 /mnt/b.mp4 \
 -f mp4 /mnt/c.mp4 \
 -f mp4 /mnt/d.mp4 \
 -f mp4 /mnt/e.mp4 \
 -f mp4 /mnt/f.mp4 \
 -f mp4 /mnt/g.mp4 \
 -f mp4  /mnt/h.mp4 > /dev/null 2>&1

Anda mungkin ingin menambahkan (tergantung pada versi ffmpeg Anda) bendera untuk memberi tahu server untuk menggunakan semua prosesor yang tersedia

-threads 0

Untuk referensi: http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs


Saya sudah mencoba ini, tidak menggunakan semua prosesor secara efisien. Beban tetap 20-30%, hyper thread tidak terbiasa sama sekali.
— d33pika

2
Mungkin ada hubungannya dengan mesin EC2? Saya hanya menjalankan perintah di atas pada mesin inti 16 xeon dengan 16 keluaran dan inilah yang saya dapatkan: tangkapan layar htop
— NublaII

Apakah Anda menggunakan FFmpeg versi terbaru?
— d33pika

@NublaII Apa itu> / dev / null 2> & 1!?
— Dr.jacky

1
@ Mr.Hyde Menyembunyikan output standar dari Anda dan menunjukkan kepada Anda output kesalahan. Baca ini: xaprb.com/blog/2006/06/06/what-does-devnull-21-mean
— Yuri Sucupira
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.