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.