Como posso canalizar a saída do ffmpeg para o ffplay?

18

Como posso canalizar a saída do ffmpeg para o ffplay?

No momento, uso uma solução alternativa no bash:

mkfifo spam
(ffplay spam 2> /dev/null &) ; capture /dev/stdout | ffmpeg -i - spam
    
por wim 12.08.2011 / 09:11

4 respostas

15

Eu não sei se é ffmpeg que não pode enviar seus dados para stdout, ou ffplay que não pode receber sua entrada de stdin.

Se for ffmpeg , não é possível exportar seus dados para stdout:

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

(Você precisa adicionar um argumento - a ffplay , então ele recebe sua entrada de stdin.)

Se for ffplay que não pode receber sua entrada de stdin:

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

Para mais informações sobre a construção <(command) e >(command) , consulte a seção Substituição do processo do manual do bash.

    
por 12.08.2011 / 14:12
11
ffmpeg -i input.avi <options> -f matroska - | ffplay -

funcionará; você precisa definir um formato de contêiner para a saída. Normalmente, isso é definido com o ffmpeg olhando para a extensão que você fornece a saída, mas aqui você deve configurá-lo manualmente com -f . Eu recomendo matroska (MKV) porque ele pode conter quase qualquer vídeo, então o que quer que você esteja transcodificando deve funcionar perfeitamente.

Note que se você estiver usando o Ubuntu 12.04, o ffmpeg foi substituído pelo fork do libav, e você deve usar avconv e avplay ; a sintaxe é idêntica. Há um tipo de ffmpeg lá, mas é prejudicado pelo design.

    
por 18.12.2012 / 12:15
9

O ffmpeg suporta operações de tubulação. Veja essa seção da documentação aqui .

Eu 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:

ffmpeg -i input.flv pipe:1 | ffplay -i -
    
por 12.08.2011 / 17:24
8

parece com o trabalho de tubos normais (pelo menos no Windows):

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

ainda não experimentou com entrada / saída mais complicada ...

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

é um arranque ligeiramente mais rápido

    
por 17.10.2012 / 19:33