Paralel olarak kaç FFmpeg komutu örneği çalıştırabilirim?


18

CPU'yu tam olarak kullanmak ve Video dönüşümlerini hızlandırmak için 8 komutu paralel olarak çalıştırmaktan yoruldum:

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 ila 3 tanesi durdu. Bu neden oluyor? Bu bir FFmpeg sınırlaması mıdır? Bunu 16 çekirdekli ve 4 çekirdekli makinelerde denedim, EC2 c1.xlarge ve cc2.8xlarge. Aynı davranış. Karmaşık komutları ve basit komutları denedim, hala aynı, 2 veya 3 durdu.


3
Bildiğim kadarıyla FFmpeg'de bunu yapmanıza engel olan hiçbir şey olmamalıdır. Kabuk sorunu olabilir mi?
— slhck

Her komut için farklı girişlerim varsa ne olur? Onları nasıl bağımsız yapabilirim, çünkü biri durursa hepsi durur.
— Samson

Çoklu işlemcileri kullanmak için herhangi bir parametre buldunuz mu ?!
— Dr.jacky

Burada "dur" demekle ne demek istiyorsun? bash onları duraklatılmış olarak gösterir mi?
— rogerdpack

Yanıtlar:


21

Orijinal soruyu cevaplarken, bazı işlerin neden durduğuna ilişkin olarak, komut satırındaki ffmpeg etkileşimlidir. Komut satırındaki sürekli girişi okuyor. Hepsini arka planda çalıştırmanız için bunu değiştirmeniz gerekir:

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

buna:

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

eklenmesi </dev/nullffmpeg'e girdi aramamasını söyler ve tüm işleriniz arka planda çalışmalıdır.


1
Bu nedir: 2> & 1
— Dr.jacky

Çok teşekkür ederim! Ben de aynı sorunu vardı ve bu bir cazibe gibi çalıştı, lütfen kabul edin!
— fr_andres DesteklerMonicaCellio

3
@ Mr.Hyde Bildiğim partiye geç, ancak 2> & 1 hata akışına şişman akışla aynı yere gitmesini söyler - so / dev / null. Bunun için kestirme > /dev/null 2>/dev/null.
— berry120

7

Komutunuzla ilgili bir düşünce: makineyi tek bir komutla çekiçlemenin çok daha kolay bir yolu, her şeyi tek bir satıra birleştirmektir:

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

Sunucuya mevcut tüm işlemcileri kullanmasını bildirmek için (ffmpeg sürümünüze bağlı olarak) bir bayrak eklemek isteyebilirsiniz

-threads 0

Referans için: http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs


Bunu denedim, tüm işlemcileri verimli bir şekilde kullanmıyor. Yük% 20-30'da kalır, hiper iplikler hiç kullanılmaz.
— d33pika

2
Belki EC2 makineleriyle bir ilgisi var? Ben sadece 16 çıkışlı 16 xeon çekirdekli bir makinede yukarıdaki komutu çalıştırın ve bu ne olsun: htop screenshot
— NublaII

FFmpeg'in en son sürümünde misiniz?
— d33pika

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

1
@ Mr.Hyde Sizden standart çıktıyı gizler ve size hata çıktılarını gösterir. Bunu okuyun: xaprb.com/blog/2006/06/06/what-does-devnull-21-mean
— Yuri Sucupira
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.