Por que o vídeo do ffmpeg não é exibido no QuickTime, no iMovie ou na visualização rápida?

20

Estou usando o ffmpeg para a conversão ocasional de vídeo há algum tempo e descobri recentemente que os vídeos H.264 (libx264) gerados pelo ffmpeg não estão funcionando no iMovie ou no QuickTime (nem reproduzem ou exibem uma visualização no Finder com o recurso de visualização rápida).

Se eu gerar vídeos usando aplicativos OS X que usam internamente o ffmpeg (por exemplo, MP4tools ou Adapter ), os vídeos funcionam bem, mas não quando tento usar o ffmpeg diretamente, por exemplo, para converter um vídeo:

# ffmpeg -i input.avi output.mp4

ou para combinar algumas imagens em um vídeo:

# ffmpeg -f image2 -pattern_type sequence image-%04d.png output.mp4

O iMovie apenas importa o vídeo como preto / branco, a visualização rápida mostra apenas as informações do arquivo (mas não a visualização do vídeo) e o Quicktime diz que não pode reproduzi-lo:

documento não pôde ser aberto

O que está acontecendo?!

drfrogsplat
fonte

Respostas:

31

Em resumo, você (geralmente) precisa incluir o argumento -pix_fmt yuv420pao usar o ffmpeg para gerar conteúdo H.264 para dispositivos / softwares da Apple e vários outros decodificadores que não lidam com yuv444p.

# ffmpeg -i input.avi -pix_fmt yuv420p output.mp4

Isso não é mencionado na saída ao usar os padrões, mas pode ser encontrado no guia Encode / H.264 .

Ele despeja que ffmpeg ter escolhido um formato padrão de pixel de yuv444p para codificação libx264 (em algumas circunstâncias), que não é compatível com software / hardware da Apple H.264 decodificadores (e talvez não muito amplamente compatível em geral? ). Infelizmente, parece improvável que isso mude, e não há nenhum aviso sobre isso, então é algo que você precisa saber se estiver usando o ffmpeg para criar arquivos H.264.

Tanto quanto eu posso dizer, se converter um vídeo que já estiver usando o yuv420p, manterá isso, mas se converter de algo um pouco mais exótico (por exemplo, imagens ou GIF ou qualquer outra coisa), o formato de pixel deve ser especificado para compatibilidade geral com a Apple.

drfrogsplat
fonte
11
Não ajuda na versão atual do iMovie (Yosemite). Alguma outra ideia?
Milan Babuškov 16/03/2015
11
Você pode postar a saída de ffprobe -select_streams v -show_streams output.mp4?
drfrogsplat
+1, até vídeos yuv420p também não estão sendo reproduzidos em High Sierra.
trisweb
Não apenas a Apple, mas também o Windows media player às vezes não pode reproduzir a saída se você não especificar essa opção. E se você tentar reproduzi-lo com outros players, seria uma tela cinza simples com artefatos exibidos no vídeo.
Shayan