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.
ffmpeg
multi-core
multi-processor
d33pika
sumber
sumber
Jawaban:
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:
untuk ini:
penambahan
</dev/null
memberitahu ffmpeg untuk tidak mencari input, dan semua pekerjaan Anda harus berjalan di latar belakang.sumber
> /dev/null 2>/dev/null
.Hanya memikirkan perintah Anda: cara yang jauh lebih mudah untuk memalu mesin dengan satu perintah adalah menggabungkan semuanya menjadi satu baris:
Anda mungkin ingin menambahkan (tergantung pada versi ffmpeg Anda) bendera untuk memberi tahu server untuk menggunakan semua prosesor yang tersedia
Untuk referensi: http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs
sumber