Primeiro, você deve entender a diferença entre usar os perfis FFmpeg e as opções de linha de comando direta. -vpre
usa um arquivo .ffpreset
localizado em /usr/share/ffmpeg/
ou onde o ffmpeg foi instalado. É uma série de pares option = value e, no seu caso, você teria que defini-lo por conta própria (pelo menos eu não conheço uma predefinição baseline
enviada com o ffmpeg).
Eu recomendaria o uso de predefinições, a menos que você mesmo as tenha criado e saiba para que servem as opções da linha de comando. Eu venho usando o ffmpeg há anos, e nunca usei presets - nunca precisei fazer isso.
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:
-
O 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 precisarão de um vídeo VP8 / Vorbis. Para alguns exemplos de linha de comando, veja esta resposta . Veja também a página suporte ao 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 conseguem lidar com recursos intensivos de CPU do H.264. Normalmente você pode deixar isso de lado ou usar-profile:v main
. -
O CRF define a qualidade (18–28 é um intervalo razoável, menor significa melhor qualidade). É claro que 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 potência podem não conseguir lidar com altas taxas de bits desnecessariamente altas. -
A opção
-movflags faststart
é essencial para o fluxo contínuo, 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 comece imediatamente, em vez de ter que esperar que o arquivo seja totalmente carregado.
No entanto, tudo se resume a encontrar o menor denominador comum para todos os dispositivos que você está segmentando, o que pode nem sempre existir. Certamente você não desejaria usar nenhum outro codec (pior que ele) do que o H.264. Na verdade, também não seria sensato oferecer vídeo com codificação de linha de base a clientes que possam decodificar perfil Principal ou Alto. Você trocaria qualidade por uma redução na complexidade de decodificação.
Da minha experiência, os dispositivos Android podem reproduzir Baseline H.264 com áudio AAC-LC em um contêiner MP4 muito bem. 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 o Baseline H.264, mas você também pode usar o perfil principal em alguns dispositivos. Veja este post (que é um pouco desatualizado) para algumas orientações.
Se você tiver usuários com problemas de reprodução, precisará descobrir qual vídeo está causando problemas e obter mais detalhes sobre qual hardware e software de player estão usando. Então poderíamos falar sobre como solucionar esse caso em particular.