Respostas:
Esta é uma resposta para o último comentário feito por você @abrahab.
Você não precisa de mp4box
um arquivo para poder transmiti-lo 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 do servidor 500, você está usando a opção "-frag" no mp4box? O módulo de streaming MP4 não pode ler arquivos MP4 fragmentados. Um bom uso mp4box
para pseudo streaming é intercalar os vídeos para uma melhor busca. A mudança de átomos de Moov é uma vantagem adicional.
Eu sempre faço isso em mp4box
um arquivo codificado em FFmpeg
MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4
Isso também intercalará o arquivo MP4 em 500 milissegundos de pedaços por padrão.
Geralmente, você deseja criar um vídeo x264 em um contêiner MP4. Esta opção é suportada por basicamente qualquer dispositivo e navegador.
O seguinte deve ser suficiente. Certifique-se de substituir o nome da entrada e as opções de CRF. O último 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 codificação, se desejar da GUI.
faststart
opçãoAgora, o que você precisa fazer é mover o átomo MOOV do contêiner MP4 para o início. Esse á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 sua versão do FFmpeg não tiver essa opção, considere a atualização. Se você não pode atualizar, você pode conseguir o mesmo com qualquer uma das ferramentas abaixo:
QTIndexSwapper , um aplicativo Adobe AIR
MP4Box , de código aberto e gratuito, 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 qualquer lugar onde o Python está instalado.
qtfaststart input.mp4
É sobre isso.
Agora, é claro, para o streaming, você pode realmente restringir a taxa de bits para permanecer dentro de certos limites. Você pode ler mais sobre isso no meu post sobre métodos de controle de taxas .
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 vídeo 720p. A taxa de bits necessária dependerá, é claro, de quão complexo é o conteúdo. Isso leva algumas tentativas e erros.
ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4
isso mp4box
e o mp4 não pode procurar e o relatório nginx 500 internal server error
para o parâmetro start mais que 0
. quando o vídeo é codificado sem -vcoded libx264
(codificador padrão do mp4) todo o arquivo de trabalho (mas quality! sick!) :( (desculpe, agora, não é permitido que você responda com um
-movflags faststart
exatamente o que eu precisava
Você pode simplesmente converter um AVI ou MP4 não streamable, também sem recodificar tudo, fazendo o seguinte:
ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4
Não há necessidade de recodificar nada, porque apenas o átomo moov precisa ser movido.
Você pode tentar isso com 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"
-acodec pcm_s16le
(erro Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
:). Um bom motivo, como um rascunho da IETF, para a escolha exata desses parâmetros também parece estar ausente.
MP4Box -isma -inter 500 Myvideo.mp4