Primeiro, você deve entender a diferença entre o uso de perfis FFmpeg e as opções diretas da linha de comando. -vpre
usa um .ffpreset
arquivo localizado em /usr/share/ffmpeg/
ou onde o ffmpeg foi instalado. É uma série de pares opção = valor e, no seu caso, você teria que defini-lo você mesmo (pelo menos não conheço uma baseline
predefinição fornecida com ffmpeg).
Eu recomendaria não usar predefinições, a menos que você as tenha criado e saiba quais são as opções da linha de comando. Uso o ffmpeg há anos e nunca usei predefinições - nunca precisei.
Uma linha de comando típica para gerar vídeo H.264 compatível com a maioria dos dispositivos seria:
ffmpeg -i <input> \
-c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
-c:a aac -ac 2 -b:a 128k \
-movflags faststart \
output.mp4
Algumas notas:
H.264 / AAC é a melhor combinação para um amplo suporte em HTML5. Os navegadores que não possuem decodificadores H.264, no entanto, também precisam de um vídeo VP8 / Vorbis. Para alguns exemplos de linha de comando, consulte esta resposta . Veja também a página de suporte do navegador da Wikipedia para outros codecs.
O H.264 também funciona bem em dispositivos móveis.
As opções -profile:v baseline
e -level 3.0
são necessárias apenas para dispositivos móveis antigos que não podem lidar com os recursos intensivos de CPU do H.264. Normalmente, você pode deixá-los de fora ou usar -profile:v main
.
O CRF define a qualidade (18–28 é uma faixa razoável, menor significa melhor qualidade). Obviamente, você também pode usar uma taxa de bits fixa com -b:v 1000k
ou similar. Escolha uma taxa de bits que corresponda à resolução do vídeo. Alguns dispositivos de baixa energia podem não ser capazes de lidar com taxas de bits desnecessariamente altas.
A -movflags faststart
opção é essencial para o streaming, pois move os metadados do contêiner para o início do arquivo, em vez de deixá-lo no final. Isso permitirá que a reprodução inicie imediatamente, em vez de ter que esperar o carregamento completo do arquivo.
No entanto, tudo se resume a encontrar o menor denominador comum para todos os dispositivos que você está segmentando, que nem sempre existem. Certamente você não gostaria de usar outro codec (isto é, pior ) que o H.264. De fato, também não seria aconselhável oferecer vídeo codificado na linha de base para clientes que possam decodificar o perfil Principal ou Alto. Você trocaria qualidade contra complexidade de decodificação reduzida.
Pela minha experiência, os dispositivos Android podem reproduzir o Baseline H.264 com áudio AAC-LC em um contêiner MP4. Eu nunca tive problemas com isso. De fato, alguns dispositivos também podem reproduzir perfis mais altos, embora não sejam oficialmente suportados. O iOS geralmente também suporta a linha de base H.264, mas você também pode usar o perfil principal em alguns dispositivos. Veja esta postagem (que está um pouco desatualizada) para obter algumas diretrizes.
Se você tem usuários com problemas de reprodução, precisa descobrir qual vídeo está causando problemas e obter mais detalhes sobre o hardware e o software do player que estão usando. Poderíamos falar sobre a solução de problemas nesse caso específico.