Criando vídeos MP4 prontos para streaming HTTP

20

Como posso converter some.flv ou some.avi ou some.wmv com o FFmpeg para ter certeza de que este vídeo será reproduzível e procurado no JW Player?

    
por abrahab 18.06.2012 / 18:48

4 respostas

8

Esta é uma resposta para o último comentário de você @abrahab.

Você não precisa mp4box de um arquivo para poder fazer pseudo streaming via nginx. O módulo de streaming MP4 cuida dele independentemente do posicionamento dos átomos de moov ( mp4box muda o átomo de moov para o início do arquivo).

Agora, para o erro de 500 servidores, você está usando a opção "-frag" com o mp4box? O módulo de streaming MP4 não pode ler arquivos MP4 fragmentados. O bom uso de mp4box para o pseudo streaming é intercalar os vídeos para uma melhor busca. O deslocamento de átomos de Moov é uma vantagem adicional.

Sempre faço isso para mp4box um arquivo codificado em FFmpeg

MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4

Isso também entrelaçará o arquivo MP4 em 500 milissegundos de partes por padrão.

    
por 13.07.2012 / 12:22
39

H.264 em MP4

Geralmente, você deseja criar um vídeo x264 em um contêiner MP4. Esta opção é suportada basicamente por qualquer dispositivo e navegador.

O seguinte deve ser o suficiente. Certifique-se de substituir o nome de entrada e as opções de CRF. O segundo define a qualidade, onde os valores sãos variam de 19 a 25 - menor significa melhor qualidade, mas também maior taxa de bits:

ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4

Você também pode usar o Handbrake para codificar, se você gostar do modo GUI.

Usando a opção faststart

Agora, o que você precisa fazer é mover o MOOV atom do contêiner MP4 para o início. Este átomo (em essência, uma unidade de dados no contêiner MP4) contém metadados importantes sobre os próprios fluxos de vídeo / áudio. -movflags faststart deve fazer exatamente isso.

Se a sua versão do FFmpeg não tiver essa opção, considere a atualização. Se você não pode atualizar, você pode conseguir a mesma coisa com qualquer uma das ferramentas abaixo:

  • QTIndexSwapper , um aplicativo do Adobe AIR

  • MP4Box , gratuito e de código aberto, executando um comando semelhante ao seguinte, onde você pode alterar o intervalo (aqui, 500):

    mp4box -inter 500 input.mp4

  • qt-faststart no Python , que funciona em todos os lugares onde o Python está instalado.

    qtfaststart input.mp4

É sobre isso.

Controlando a taxa de bits / qualidade

Agora, é claro, para streaming você pode querer restringir a taxa de bits para permanecer dentro de certos limites. Você pode ler mais sobre isso em meu post no blog sobre métodos de controle de taxa .

Por exemplo, adicionando -maxrate 2M -bufsize 2M às opções de codificação, você limita a codificação a 2 Mbit / s, o que pode ser suficiente para o vídeo de 720p. A taxa de bits exigida dependerá, obviamente, da complexidade do conteúdo. Isso leva algumas tentativas e erros.

    
por 18.06.2012 / 21:51
3

Você pode simplesmente converter um AVI ou MP4 sem streamable, também sem recodificar tudo, fazendo isso:

ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4

Não há necessidade de recodificar nada, porque apenas o átomo do moov precisa ser movido.

    
por 10.09.2017 / 13:07
-1

Você pode tentar isso com o ffmpeg:

ffmpeg.exe -i "INPUT_FILE.AVI" -threads 2 -s 800x600 -r 25.00 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 2048k -async 1 -acodec pcm_s16le -ar 22050 -ac 1 -ab 128k -y "OUTPUT_FILE.mp4"
    
por 26.08.2012 / 02:57