Wie kann ich die Ausgabe von ffmpeg an ffplay leiten?

22

Wie kann ich die Ausgabe von ffmpeg an ffplay leiten?

Im Moment verwende ich eine Problemumgehung in Bash:

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

Antworten:

18

Ich weiß nicht, ob es das ist ffmpeg, das seine Daten nicht an stdout ausgeben ffplaykann oder das seine Eingabe nicht von stdin nehmen kann.

Wenn dies ffmpegder Fall ist , können die Daten nicht an stdout ausgegeben werden:

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

(Sie müssen ein -Argument hinzufügen , ffplaydamit es die Eingabe von stdin erhält .)

Wenn dies der ffplayFall ist , kann die Eingabe nicht von stdin übernommen werden:

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

Weitere Informationen zu <(command)und zum >(command)Konstrukt finden Sie im Abschnitt Prozessersetzung im bash-Handbuch.

jfg956
quelle
4
Für mich hat dies nicht funktioniert, ohne das Ausgabeformat explizit mit "-f" anzugeben. wie auf ffmpeg.org/ffmpeg.html angegeben : "Das Format wird normalerweise automatisch für Eingabedateien erkannt und anhand der Dateierweiterung für Ausgabedateien erraten". In der gegebenen Antwort kann ffmpeg das Ausgabeformat nicht erraten. Ich denke, ffmpeg sollte "-f fmt" hinzugefügt haben.
Pavel K.
1
ffmpeg 2.8.6 unterstützt stdin-eingaben, wie in anderen antworten erwähnt. Sie können für diese Unterstützung mit überprüfen: stackoverflow.com/questions/12999674/…
Ciro Santilli 新疆 改造 中心 六四 事件
17
ffmpeg -i input.avi <options> -f matroska - | ffplay -

wird funktionieren; Sie müssen ein Containerformat für die Ausgabe festlegen. Dies wird normalerweise eingestellt, indem ffmpeg auf die Erweiterung schaut, die Sie der Ausgabe geben, aber hier müssen Sie sie manuell einstellen -f. Ich empfehle matroska (MKV), da es fast jedes Video enthalten kann, also sollte alles, in das Sie es umcodieren, perfekt funktionieren.

Beachten Sie, dass wenn Sie Ubuntu 12.04 verwenden, ffmpeg durch die libav-Verzweigung ersetzt wurde und Sie stattdessen avconvund avplayverwenden sollten. Die Syntax ist ansonsten identisch. Es gibt eine Art ffmpeg dort, aber es ist von Natur aus verkrüppelt.

Übelsuppe
quelle
Win10: Fehler tritt wie pipe:: Invalid data found when processing inputKin Power Shell auf, funktioniert aber gut in der Eingabeaufforderung
John,
11

ffmpeg unterstützt Piping-Operationen. Siehe diesen Abschnitt der Dokumentation hier .

Ich weiß nicht, wie ffplay funktioniert, aber um die Ausgabe von ffmpeg an die Standardausgabe weiterzuleiten, können Sie den Befehl pipe am Ende des Befehls ffmpeg einfügen. Beispiel:

ffmpeg -i input.flv pipe:1 | ffplay -i -
matzahboy
quelle
1
danke, ich habe diesen Abschnitt der Manpages irgendwie verpasst. Jedoch konnte ich dieses Konstrukt nicht zum Laufen bringen, der Ausgabedateiname muss aus ffmpeg entfernt und die Eingabe-Pipe zu ffplay args hinzugefügt werden. ich bearbeite deinen Beitrag entsprechend ..
wim 18.08.11
Vielen Dank. Wie gesagt, ich habe ffplay noch nie benutzt, aber ich kenne ffmpeg.
Matzahboy
In meinem man ffplaykann ich ffplayden -iSchalter nicht sehen - ist es vielleicht ffmpegnur?
Sdaau
1
pipe:1vs -? -funktioniert auf ffmpeg 2.8.6.
Ciro Santilli
9

sieht aus wie normale Rohre funktionieren (zumindest in Fenstern):

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

Ich habe es noch nicht mit komplizierteren Ein- / Ausgängen versucht ...

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

ist etwas schneller Start

Rogerdpack
quelle
5
Ich bekam Unable to find a suitable output format for 'pipe:'- ich musste einen Codec mit angeben -f.
i336_
Funktioniert, aber sehr niedrige Bildqualität
John
Wenn die Bildqualität niedrig ist, vergewissern Sie sich, dass das, was Sie anfänglich aufnehmen, eine hohe Bildqualität ist (speichern Sie es zuerst in einer Datei usw.), "sollte" die normale Qualität sein ...
Rogerdpack