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.