ffplay - como reproduzir juntos arquivos de áudio e vídeo separados

9

Então, eu sou capaz de transcodificar arquivos de vídeo e áudio separados em um arquivo de filme, da seguinte forma:

ffmpeg -ss 0 -lowres 0 -r 24 -i dcp/picture.mxf -vf "xyz2rgb" -i mov/sound.wav -ac 2 -ab 256k -vb 3000k -t 10 -y mov/movie.mp4

E veja e ouça o filme resultante assim:

ffplay -ss 0 -lowres 1 -vf "xyz2rgb" mov/movie.mp4

No entanto, para evitar a transcodificação do filme e o som juntos em um arquivo antes de poder vê-lo, eu gostaria de simplesmente reproduzir os dois arquivos separados juntos. Até onde eu sei, o ffplay não permite combinar dois arquivos diferentes (certo?).

Lendo esses fóruns, parece que você pode canalizar uma saída ffmpeg para ffplay . O seguinte é o mais próximo que cheguei. Não é tão perto. :( As informações do vídeo estão claramente sendo carregadas, mas são "neve" verde no tamanho de quadro correto, com dicas das imagens reais dançando dentro da horrível neve verde. Dessa forma, eu sei que algo dos dados reais da imagem está carregando , apenas não processando corretamente.

E nenhum áudio é reproduzido. O som não está carregando (acho que não). Agora ... estou preso. O seguinte sugere o que estou tentando fazer, mas não está funcionando:

ffmpeg -ss 0 -lowres 0 -r 24 -i dcp/picture.mxf -vf "xyz2rgb" -i mov/sound.wav -f rawvideo - | ffplay -f rawvideo -vf "xyz2rgb" -s 1998x1080 -
Bill Rudolph Yaber Russell
fonte

Respostas:

4

As informações do vídeo estão claramente sendo carregadas, mas são "neve" verde no tamanho de quadro correto, com dicas das imagens reais dançando dentro da horrível neve verde.

Este deve ser o formato de pixel. Você está aplicando o xyz2rgbfiltro que converte o espaço de cores do DCP em RGB e depois direciona o vídeo bruto para ffplay. Aqui, você está aplicando o xyz2rgbfiltro novamente , o que provavelmente causa distorções, pois o FFmpeg não tem idéia de como o vídeo bruto é codificado. Ele fará o que você quiser com o vídeo, até mesmo convertendo o espaço de cores duas vezes.


Tive bons resultados ao canalizar o formato Matroska, em ffplayvez de rawvideo, o que também permite decodificar o áudio (veja abaixo). O formato Matroska pode conter qualquer tipo de codec.

Observe que a ordem das opções é importante no FFmpeg, e você provavelmente deve usar uma versão mais recente, pois é mais rigoroso sobre onde colocar as opções:

  • Opções globais como o -yprimeiro.
  • Em seguida, especifique opções para a leitura de arquivos de entrada - -r 24força a taxa de quadros do picture.mxfarquivo.
  • Em seguida, especifique todos os arquivos de entrada.
  • Depois, vêm as opções de codec, como filtros de vídeo, taxa de bits do vídeo etc.

Na sua situação, faz sentido apenas copiar o fluxo de áudio, pois não precisamos realmente transcodificá-lo. O vídeo precisa ser transcodificado para poder aplicar o filtro.

Algo assim deve fazer. Observe como definimos explicitamente o formato de saída como matroskae deixamos ffplaydescobrir o resto:

ffmpeg -r 24 -i dcp/picture.mxf -i mov/sound.wav \
-filter:v "xyz2rgb" -b:v 3000k -c:a copy -t 10 -f matroska - | \
ffplay -

Eu usei a sintaxe (menos ambígua da OMI) para opções como em -filter:vvez de -vf, em -b:vvez de -vbe em -c:avez de -acodec.

Se esse formato não funcionar, tente o AVI:

ffmpeg -i picture.mxf -i sound.wav -f avi - | ffplay -

Isso funcionou para mim sem problemas e nem exigiu que eu usasse o filtro que você precisava. O áudio também estava funcionando.

slhck
fonte
slhck, obrigado por isso! OK, entendi: <br/> <br/> Não foi possível encontrar um formato de saída adequado para '-filter: v' -filter: v: argumento inválido <br> <br> ?? (o mesmo para -vf). O codec e o filtro são daqui: goo.gl/avE1f - o autor o escreveu e projetou uma instalação personalizada do ffmpeg (apenas uma versão que funciona com este procedimento e seus arquivos) que inclui o codec proprietário e o filtro de espaço de cores e, portanto, pode decodificá-lo. A instalação personalizada do ffmeg precisa ser capaz de ler a sequência de imagem proprietária JPEG2000 MJPEG contida na parte interna da imagem MFX. Se isso ajuda a nota :)
Bill Rudolph YABER Russell
Opa, eu sou um boneco, esqueci de remover as quebras "\" na linha de comando. De qualquer forma, agora, quando insiro sua sugestão, os números mostram a transmissão, mas nenhuma janela se abre; em seguida, cerca de 20 segundos depois, ela pára com: <br /> <br /> Falha na segmentação: 1136.0 size = 138kB time = 00: 00: 00.08 bitrate = 13445,2kbits / s
Bill Rudolph Yaber Russell
Uma imagem vale mais que mil palavras - aqui, este prático mostras de vídeo captura de tela o que está funcionando eo que não é: dl.dropbox.com/u/11290938/screen_grab_ffdcp_750.mov
Bill Rudolph YABER Russell
Muito obrigado pelo vídeo. Primeiro de tudo, seu primeiro comando rawvideo tem o problema de você especificar o tamanho errado. Sua entrada tem 500 x 270 - ou, pelo menos, é isso que é canalizado ffplay. Além disso, sua saída tem rgb48lecomo o formato de pixel (por causa do filtro), mas ffplayassume yuv420p, assim que você também precisa especificar que: ffplay -f rawvideo -s 500x270 -pix_fmt rgb48le -. Quanto ao segfault: Não faço ideia ... talvez você possa criar e enviar um pequeno arquivo de teste em algum lugar?
slhck #
Ooo goodie, arquivos de teste! De fato, obrigado. A razão para 500x270 é que eu especifiquei "lores 2", que diminui o tamanho duas vezes (para caber em uma tela limpa para você :) Parece que eu perdi uma. Como pano de fundo, esse arquivo é um DCP caseiro (pense em "impressão de filme digital" para um cinema, e é por isso que a mídia é tão estranha)), 2K em 1998x1080 (aspecto de pixel quadrado de 1,85). Ao extrair a sequência de imagens, está correta. Enviei o pacote ontem e o tocaram em um DLP no cinema onde será exibido (por uma noite no festival) - e estava certo (ufa!).
Bill Rudolph YABER Russell
3

Isso não transcodificaria os fluxos:

ffmpeg -i video.mkv -i audio.mkv -c copy -map 0:0 -map 1:1 output.mkv

-map 1:1= segundo arquivo, fluxo 1 (geralmente áudio). -c copy= -c:v copy -c:a copy. Por padrão, o arquivo compactado tem o tamanho do arquivo mais longo, mas o -shortestfaria com o arquivo mais curto.

Lri
fonte
Obrigado por esta informação. Não preciso de um arquivo de saída, mas essas opções são realmente boas para conhecer.
Bill Rudolph YABER Russell
3
ffmpeg -lowres 2 -ss 0 -r24 -i MOVIE.MOV -ss 0 -i AUDIO.WAV -vf xyz2rgb -ac: 2 -c:v mpeg2video -f avi - | ffplay -

Para meus propósitos, isso permite uma rápida revisão do conteúdo de um DCP (Digital Cinema Package) que você pode criar com ferramentas de código aberto . O DCP usa o espaço de cores xyz; portanto, você precisa ter um filtro de vídeo xyz instalado ; caso contrário, não poderá usá-lo na linha acima. (Tudo bem, ele ficará com uma cor muito alaranjada, e você não verá as cores verdadeiras.)

Adicionei o codec mpeg2video b / c, apesar de reduzir a qualidade, é baixa taxa e amortece um pouco, para que ele tenha um desempenho mais suave na minha máquina. (Além disso, por alguma razão, sem transcodificar primeiro, recebo apenas um quadro congelado da sequência jpeg2000 mjpeg, alimentando a 125mb / s poderosos do MXF, a menos que inicie "- ss 0", ou seja, no início do Com uma máquina MUITO RÁPIDA, não especificando nenhum codec (remova "-c: v mpeg2video"), tamanho completo ("-lores 0") e começando em 0 (-ss 0), você pode teoricamente revisar o cinema 2K qualidade DCP exatamente como está. Bem, exceto por instruções especiais incluídas no XML - legendas ou outra programação. Mas geralmente. (BTW "-ac: 2" faz downmixes 5.1 a 2.0 - embora você possa ter um hardware compatível com a audição 5.1; nesse caso, use "-c: a copy".)

Agradeço a Matthias em Belle-Nuit e slhck acima por POR PACIENTE me guiar por isso. Obrigado!!!! Isso é bastante útil. E, de fato, me salvou de uma exibição de filme potencialmente embaraçosa no teatro Aero no domingo à noite. Minha numeração de sequência de imagens estava fora de sequência - encontrei com isso e foi corrigida!

Uau, tudo isso por apenas uma linha de comando, quem sabia;)

Cheereo - b worldpoop.com

Bill Rudolph Yaber Russell
fonte
Eu recebi este erro: Não existe esse filtro: 'xyz2rgb'
Dr.jacky