De quais scripts ffmpeg eu preciso para obter o “Vídeo para todos” compatível com HTML5?

12

Que lista de comandos devo fazer no ffmpeg / mencoder / some_other_CLI_app para obter um vídeo nos formatos certos para usar o Video for Everybody ?

Existe uma sutileza que impede que exista um tutorial mecânico que diga

VIDEO=video.mp4
TYPE=$(ffmpeg --find-information-about-the-video ... )
ffmpeg ... > video.mov
ffmpeg ... > video.flv
ffmpeg ... > video.webm
ffmpeg ... > video.h.264
...

Em seguida, copie e cole o código do Video for Everybody na sua página?

Meu objetivo é ter um vídeo incorporado em minha página pessoal hospedada por mim. O HTML5 com fallback de flash é o preferido; portanto, a maneira mais simples parece ser o Vídeo para Todos. Mas essa página deixa a parte mais complicada, codificando o vídeo em todos os diferentes formatos, para o leitor descobrir lendo um artigo longo e completo sobre os formatos de vídeo . Certamente isso não é necessário. Eu poderia fornecer uma lista de comandos para um usuário converter cegamente um arquivo de áudio em vários formatos diferentes. Espero que um guru do ffmpeg possa fazer o mesmo com o vídeo.

John Baber-Lucero
fonte
1
Comentário secundário aos seus exemplos de pseudocódigo: não .movhá vídeo para HTML5 e também não há h.264extensão. Não é .264 , que é a bytestream Anexo B cru para unidades NAL. Codificação de vídeo não é ciência do foguete, mas você precisa investir um pouco de tempo para conhecer os conceitos.
Slhck

Respostas:

21

Nota: Esta resposta foi fortemente editada desde a postagem original. Agora é 2017; o streaming funciona de maneira diferente do que costumava ser. Este guia pressupõe o download progressivo simples de um fluxo de vídeo em uma determinada resolução - sem fluxo adaptável.

Exigências

Primeiro, certifique-se de baixar uma ffmpegversão recente (faça o download de uma compilação estática; não chame apt-get install ffmpegou similar). Idealmente, compile você mesmo . Não demora muito.

Para gerar vídeos suportados pela maioria dos navegadores, sempre verifique a tabela de compatibilidade mais recente . Não existe um codec / formato único que funcione em todos os navegadores, mas se você gerar H.264 em MP4 e VP9 no WebM, com o respectivo codec de áudio, terá suporte para Chrome, Firefox, Safari e algumas versões do IE.

WebM (VP9 / Vorbis)

Siga as recomendações no guia FFmpeg VP9 e use uma abordagem de codificação de duas passagens com restrições de taxa:

ffmpeg -y -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 1 -f webm /dev/null && \
ffmpeg -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 2 output.webm

A taxa de bits de destino depende da sua resolução, taxa de quadros, do tipo de conteúdo e da qualidade desejada. 2,5 MBit / s deve ser um bom compromisso para vídeo HD a 30 qps. Consulte este guia do Google para obter algumas recomendações.

MP4 (H.264 / AAC)

Siga as recomendações no guia FFmpeg H.264 e use uma abordagem de codificação de duas passagens com restrições de taxa:

ffmpeg -y -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 1 -c:a aac -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 2 -c:a aac -movflags faststart output.mp4

Aqui, a taxa de bits de destino deve ser cerca de 50% superior à do vídeo VP9, ​​pois o H.264 não é tão eficiente. Adicione a -movflags faststartopção à segunda passagem para acelerar o carregamento inicial do vídeo.

Para definir opções de áudio, consulte o guia de codificação AAC .

slhck
fonte
1
A versão 2013-12-19 de um de seus parágrafos é interrompida no meio da frase. "O áudio assume o padrão de 128 kBit / s novamente, mas você pode definir q: a para taxa de bits variável, onde os valores variam de 0 a 500. 100 é o padrão e mais alto significa melhor. Se"
Alan De Smet
O @slhck faz muito sentido, mas meus dois centavos são que você solta o Ogg e o substitui por mpegts / m3u8 para suportar todos os dispositivos iOS ou aqueles que aceitam HLS. Você pode reutilizar os arquivos .mp4 e apenas adicionar o processamento mpeg-ts no ffmpeg.
Paul Gregoire
@Mondain De fato, mas MPEG-TS / .m3u8 geralmente não é um vídeo compatível com HTML5. Você precisa de um servidor HLS e precisa conhecer um pouco mais sobre o streaming, o que não está realmente dentro do escopo desta pergunta.
slhck
Bons pontos, mas da minha experiência até agora um servidor http simples pode servir m3u8 a uma tag de vídeo. Normalmente, a única coisa que você precisa fazer é adicionar os tipos MIME para m3u8 e ts à respectiva configuração do servidor.
Paul Gregoire