Como canalizar a saída de ffmpeg para ffplay?
No momento, eu uso uma solução alternativa no bash:
mkfifo spam
(ffplay spam 2> /dev/null &) ; capture /dev/stdout | ffmpeg -i - spam
Não sei se é ffmpeg
que não é possível enviar seus dados para stdout ou ffplay
que não é possível receber sua entrada de stdin.
Se for ffmpeg
que não pode enviar seus dados para stdout:
capture /dev/stdout | ffmpeg -i - >(ffplay 2> /dev/null)
(Você deve adicionar um -
argumento para ffplay
que ele receba sua entrada de stdin.)
Se for ffplay
que não pode receber sua entrada do stdin:
ffplay <(capture /dev/stdout | ffmpeg -i -) 2> /dev/null
Para obter mais informações sobre <(command)
e >(command)
construção, consulte a seção Substituição de processo do manual do bash.
vai funcionar; você precisa definir um formato de contêiner para a saída. Isso normalmente é definido com o ffmpeg olhando para a extensão que você fornece, mas aqui você deve configurá-lo manualmente
-f
. Eu recomendo o matroska (MKV) porque ele pode conter quase qualquer vídeo; portanto, o que quer que você esteja transcodificando deve funcionar perfeitamente.Observe que se você estiver usando o Ubuntu 12.04, o ffmpeg foi substituído pelo fork do libav, e você deve usá
avconv
-loavplay
; a sintaxe é idêntica. Existe um tipo de ffmpeg lá, mas é prejudicado pelo design.fonte
pipe:: Invalid data found when processing inputK
no Power Shell, mas funciona bem no prompt de comandoO ffmpeg suporta operações de tubulação. Veja essa seção da documentação aqui .
Não sei como o ffplay funciona, mas para canalizar a saída do ffmpeg para a saída padrão, você pode adicionar o comando pipe ao final do comando ffmpeg. Exemplo:
fonte
man ffplay
, não consigo ver offplay
suporte ao-i
switch - talvez sejaffmpeg
apenas?pipe:1
vs-
?-
funciona no ffmpeg 2.8.6.parece que os tubos normais funcionam (pelo menos no Windows):
ainda não tentei com entradas / saídas mais complicadas ...
é inicialização um pouco mais rápida
fonte
Unable to find a suitable output format for 'pipe:'
- eu precisava especificar um codec com-f
.