Que linha de comando do ffmpeg produz vídeo mais compatível em todos os dispositivos?

8

Então eu tenho usuários dizendo H264 vídeos MP4 não tocam áudio no IPad da Apple e eu luto para obter vídeos MP4 para jogar corretamente no Android também.

Existem duas linhas de comando diferentes que linha de comando é aquela que eu deveria estar usando.

-profile:v baseline -level 3.0

E:

-vpre baseline

O que devo usar para que funcione em todos os dispositivos?

Eu também li que poderia ser a taxa de bits de áudio que minha taxa de bits de áudio atual é

-ab 192k

Talvez eu deva abaixar para

-ab 160k

Linha de comando usada para codificar áudio MP3 em arquivos MP4.

"C:/server/ffmpeg/bin/ffmpeg.exe" -y -i Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/54bbf30bb11a0f6b9dc832114c26fd29.mp4 -strict experimental -acodec libmp3lame -ar 44100 -ac 2 -ab 192k -s 480x360 -aspect 16:9 -r 24000/1001 -vcodec libx264 -b:v 1000k -minrate 800k -maxrate 1000k -bufsize 800K -crf 18 -preset veryslow -f mp4 -threads 0 -movflags +faststart Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/98382d43d31d4ff91ea44cb2aa1bbc49.mp4 2>&1
    
por C0nw0nk 31.12.2014 / 19:53

1 resposta

12

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.

    
por 31.12.2014 / 23:04