Come posso inviare l'output di ffmpeg a ffplay?


22

Come posso inviare l'output di ffmpeg a ffplay?

Al momento uso una soluzione alternativa in bash:

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

Risposte:


18

Non so se è ffmpegche non può trasmettere i suoi dati a stdout o ffplayche non può prendere il suo input da stdin.

Se è ffmpegche non è in grado di trasmettere i suoi dati a stdout:

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

(È necessario aggiungere un -argomento a in ffplaymodo che prenda il suo input da stdin.)

Se è ffplayche non può prendere il suo input da stdin:

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

Per maggiori informazioni su <(command)e il >(command)costrutto, consultare la sezione Sostituzione del processo del manuale di bash.


4
per me questo non ha funzionato senza specificare esplicitamente il formato di output con "-f". come specificato su ffmpeg.org/ffmpeg.html : "il formato viene normalmente rilevato automaticamente per i file di input e indovinato dall'estensione dei file di output". nella risposta data ffmpeg non sarà in grado di indovinare il formato di output. quindi penso che ffmpeg dovrebbe avere "-f fmt" aggiunto ad esso.
Pavel K.

1
ffmpeg 2.8.6 supporta l'input stdin come indicato in altre risposte. È possibile verificare che il sostegno di: stackoverflow.com/questions/12999674/...
Ciro Santilli新疆改造中心法轮功六四事件

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

funzionerà; è necessario impostare un formato contenitore per l'output. Questo è normalmente impostato con ffmpeg guardando l'estensione che si dà l'output, ma qui è necessario impostarlo manualmente -f. Consiglio matroska (MKV) perché può contenere quasi tutti i video, quindi qualunque cosa tu lo stia transcodificando dovrebbe funzionare perfettamente.

Si noti che se si sta utilizzando Ubuntu 12.04, ffmpeg è stata sostituita dalla forcella libav, e si dovrebbe usare avconve avplayinvece; la sintassi è altrimenti identica. C'è una specie di ffmpeg lì, ma è paralizzato dal design.


Win10: L'errore si verifica come pipe:: Invalid data found when processing inputKin Power Shell, ma funziona bene nel prompt dei comandi
John

11

ffmpeg supporta le operazioni di piping. Vedi quella sezione della documentazione qui .

Non so come funziona ffplay, ma per reindirizzare l'output di ffmpeg all'output standard, è possibile aggiungere il comando pipe alla fine del comando ffmpeg. Esempio:

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

1
grazie, in qualche modo ho perso quella sezione delle pagine man .. tuttavia non sono riuscito a far funzionare questo costrutto, il nome del file di output deve essere rimosso da ffmpeg e la pipe di input aggiunta agli argomenti di ffplay. modificherò il tuo post di conseguenza ..
wim

Grazie. Come ho detto, non ho mai usato ffplay prima, ma conosco ffmpeg.
matzahboy,

Nel mio man ffplay, non riesco a vedere il ffplaysupporto dello -iswitch - è forse ffmpegsolo?
sdaau,

1
pipe:1vs -? -funziona su ffmpeg 2.8.6.
Ciro Santilli 17 改造 中心 法轮功 六四 事件

9

sembra che i normali tubi funzionino (almeno in Windows):

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

non l'ho provato con input / output più complicati però ...

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

è l'avvio leggermente più veloce


5
Stavo ottenendo Unable to find a suitable output format for 'pipe:'- dovevo specificare un codec con -f.
i336_

Funziona, ma la qualità dell'immagine è molto bassa
John

Se la qualità dell'immagine è bassa, assicurati che ciò che stai catturando inizialmente sia un'alta qualità dell'immagine (salvalo prima su un file, ecc.) "Dovrebbe" essere di qualità normale ...
rogerdpack,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.