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.

d33pika
sumber
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.

DingoNV
sumber
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

NublaII
sumber
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