Comment puis-je diriger la sortie de ffmpeg vers ffplay?

22

Comment puis-je diriger la sortie de ffmpeg vers ffplay?

Pour le moment, j'utilise une solution de contournement dans bash:

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

Réponses:

18

Je ne sais pas si c'est ffmpegqui ne peut pas sortir ses données vers stdout, ou ffplayqui ne peut pas prendre son entrée depuis stdin.

Si ce n'est ffmpegpas le cas, il ne peut pas exporter ses données vers stdout:

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

(Vous devez migth ajouter un -argument pour ffplayqu'il prenne son entrée de stdin.)

Si c'est le cas ffplayqui ne peut pas prendre son entrée depuis stdin:

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

Pour plus d'informations sur la construction <(command)et >(command), consultez la section Substitution de processus du manuel bash.

jfg956
la source
4
pour moi, cela n'a pas fonctionné sans spécifier explicitement le format de sortie avec "-f". comme spécifié sur ffmpeg.org/ffmpeg.html : "le format est normalement détecté automatiquement pour les fichiers d'entrée et deviné à partir de l'extension de fichier pour les fichiers de sortie". dans une réponse donnée, ffmpeg ne pourra pas deviner le format de sortie. donc je pense que ffmpeg devrait avoir "-f fmt" ajouté.
Pavel K.
1
ffmpeg 2.8.6 prend en charge l'entrée stdin comme mentionné dans d'autres réponses. Vous pouvez vérifier ce soutien avec: stackoverflow.com/questions/12999674/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
17
ffmpeg -i input.avi <options> -f matroska - | ffplay -

marchera; vous devez définir un format de conteneur pour la sortie. Ceci est normalement réglé avec ffmpeg en regardant l'extension avec laquelle vous donnez la sortie, mais ici vous devez la régler manuellement avec -f. Je recommande le matroska (MKV) car il peut contenir presque toutes les vidéos, donc tout ce que vous transcodez devrait parfaitement fonctionner.

Notez que si vous utilisez Ubuntu 12.04, ffmpeg a été remplacé par le fork libav, et vous devriez utiliser avconvet à la avplayplace; la syntaxe est par ailleurs identique. Il existe une sorte de ffmpeg, mais il est paralysé par la conception.

evilsoup
la source
Win10: une erreur se produit comme pipe:: Invalid data found when processing inputKdans Power Shell, mais fonctionne bien dans l'invite de commande
John
11

ffmpeg prend en charge les opérations de tuyauterie. Voir cette section de la documentation ici .

Je ne sais pas comment fonctionne ffplay, mais pour diriger la sortie de ffmpeg vers la sortie standard, vous pouvez ajouter la commande pipe à la fin de la commande ffmpeg. Exemple:

ffmpeg -i input.flv pipe:1 | ffplay -i -
matzahboy
la source
1
merci, j'ai en quelque sorte manqué cette section des pages de manuel .. mais je n'ai pas pu faire fonctionner cette construction, le nom du fichier de sortie doit être supprimé de ffmpeg et le tuyau d'entrée ajouté aux arguments de ffplay. je modifierai votre message en conséquence ..
wim
Merci. Comme je l'ai dit, je n'ai jamais utilisé ffplay auparavant, mais je connais ffmpeg.
matzahboy
Dans mon man ffplay, je ne vois pas ffplaysoutenir le -icommutateur - est-ce peut-être ffmpegseulement?
sdaau
1
pipe:1vs -? -fonctionne sur ffmpeg 2.8.6.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
9

ressemble à des tuyaux normaux (au moins dans les fenêtres):

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

je ne l'ai pas essayé avec des entrées / sorties plus compliquées ...

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

est un démarrage légèrement plus rapide

rogerdpack
la source
5
J'obtenais Unable to find a suitable output format for 'pipe:'- j'avais besoin de spécifier un codec avec -f.
i336_
Fonctionne, mais qualité d'image très faible
John
Si la qualité d'image est faible, assurez-vous que ce que vous capturez initialement est une qualité d'image élevée (enregistrez-le d'abord dans un fichier, etc.), cela "devrait" être de qualité normale ...
rogerdpack