Ffmpeg çıkışını ffplay'e nasıl yönlendirebilirim?


22

Ffmpeg çıktısını ffplay'e nasıl aktarabilirim?

Şu anda bash'ta geçici bir çözüm kullanıyorum:

mkfifo spam
(ffplay spam 2> /dev/null &) ; capture /dev/stdout | ffmpeg -i - spam

Yanıtlar:


18

ffmpegVerilerini stdout'a ffplaygönderemiyor mu , yoksa girişini stdin'den alamıyor mu bilemiyorum .

Eğer öyleyse ffmpego olamaz çıkış standart çıktıya veriler:

capture /dev/stdout | ffmpeg -i - >(ffplay 2> /dev/null)

(Girdiini stdin'den alabilmesi için -argüman eklemeniz gerekir ffplay.)

Eğer bu ffplaygirdiyi stdin'den alamazsa:

ffplay <(capture /dev/stdout | ffmpeg -i -) 2> /dev/null

<(command)Ve >(command)yapı hakkında daha fazla bilgi için , bash el kitabının İşlem Değiştirme bölümüne bakın.


4
Benim için bu çıktı biçimini "-f" ile açıkça belirtmeden işe yaramadı. ffmpeg.org/ffmpeg.html adresinde belirtildiği gibi : "biçim normalde girdi dosyaları için otomatik olarak algılanır ve çıktı dosyaları için dosya uzantısından tahmin edilir". Verilen cevapta ffmpeg çıktı formatını tahmin edemez. bu yüzden ffmpeg'in "-f fmt" eklenmiş olması gerektiğini düşünüyorum.
Pavel K.,

1
ffmpeg 2.8.6, diğer cevaplarda belirtildiği gibi stdin girişini desteklemektedir. Sen o destek için kontrol edebilirsiniz: stackoverflow.com/questions/12999674/...
Ciro Santilli新疆改造中心法轮功六四事件

17
ffmpeg -i input.avi <options> -f matroska - | ffplay -

çalışacak; çıktı için bir kap formatı ayarlamanız gerekir. Bu normalde çıktıya verdiğiniz uzantıya bakarak ffmpeg ile ayarlanır, ancak burada manuel olarak ayarlamanız gerekir -f. Hemen hemen her videoyu içerebildiği için matroska'yı (MKV) öneririm, bu yüzden dönüştürdüğünüz her şeyin mükemmel çalışması gerekir.

Ubuntu 12.04 kullanıyorsanız Not ffmpeg libav çatalla almıştır ve kullanmak gerektiğini avconvve avplaybunun yerine; sözdizimi aksi halde aynıdır. Orada bir çeşit ffmpeg var, ama tasarım yüzünden sakat kalmış.


Win10: pipe:: Invalid data found when processing inputKPower Shell'deki gibi hata oluşuyor , ancak komut isteminde iyi çalışıyor
John

11

ffmpeg borulama işlemlerini destekler. Buradaki belgelerin bu bölümüne bakın .

Ffplay'in nasıl çalıştığını bilmiyorum, ancak ffmpeg'in çıktısını standart çıktıya yönlendirmek için, ffmpeg komutunun sonuna pipe komutunu ekleyebilirsiniz. Örnek:

ffmpeg -i input.flv pipe:1 | ffplay -i -

1
teşekkürler, bir şekilde man sayfalarının bu bölümünü özledim .. ancak bu yapının çalışmasını sağlayamadım, çıktı dosya adının ffmpeg ve ffplay arglarına eklenen girdi borusundan kaldırılması gerekiyor. yazınızı buna göre düzenleyeceğim ..
wim

Teşekkürler. Dediğim gibi, daha önce hiç ffplay kullanmadım, ama ffmpeg'i biliyorum.
matzahboy

Benim açımdan man ffplay, anahtarı ffplaydesteklediğini göremiyorum -i- belki ffmpegsadece bu mu?
sdaau

1
pipe:1vs -? -ffmpeg'de çalışır 2.8.6.
Ciro Santilli,

9

normal boru çalışması gibi görünüyor (en azından pencerelerde):

ffmpeg -i sintel.mpg -pix_fmt yuv420p -f rawvideo - | ffplay -f rawvideo -pix_fmt yuv420p -s 720x480 -

daha karmaşık girdi / çıktılarla denemedim ama ...

ffmpeg -f dshow -i video=screen-capture-recorder -pix_fmt yuv420p -f mpegts - | ffplay -analyzeduration 10 -f mpegts -

biraz daha hızlı başlangıç


5
Alıyordum Unable to find a suitable output format for 'pipe:'- bir codec bileşeni belirtmem gerekiyordu -f.
i336_

Çalışır, ancak çok düşük görüntü kalitesi
John

Görüntü kalitesi düşükse, başlangıçta yakaladığınız şeyin yüksek görüntü kalitesi olduğundan emin olun (önce bir dosyaya kaydedin, vb.) "Normal" olmalı "
rogerdpack
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.