Qual comando ffmpeg converteria um vídeo para iPad / iPhone / iPod?

24

Atualmente, estou usando um arquivo em lotes que (entre outras coisas) executa a seguinte linha de comando do handbrakecli para converter um vídeo:

HandBrakeCLI.exe -v0 --input "D:\input.mkv" --preset="Universal" --ipod-atom -t 1 --angle 1 --gain 0 --output="D:\output.mp4"

Isso me serviu bem por muitos anos, produzindo um arquivo de vídeo menor que o original (bom quando você tem apenas dispositivos de 16 Gb), parece bom o suficiente e funciona em praticamente qualquer iPod, iPad e iPhone em que eu o coloquei.

No entanto, com o tempo, o handbrakecli está lutando para converter mais e mais vídeos ao ponto em que preciso procurar uma alternativa. Isso não é ajudado pelo fato de os logs não fornecerem absolutamente nenhuma informação sobre o motivo pelo qual houve uma falha. Este vídeo, por exemplo, caiu em 71% com a conversão e estas são as últimas 4 linhas:

AC3 Passthru requested and input codec is not compatible for track 2, using AC3 encoder
x264 [info]: using SAR=9593/9600
x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
x264 [info]: profile Constrained Baseline, level 3.0

Não é muito útil.

Eu olhei para usar o ffmpeg como uma alternativa, mas todos os exemplos que eu vi na internet fazem um ou mais dos seguintes:

  1. Não trabalhe (as opções de linha de comando não são reconhecidas) - comum!
  2. Resultar em um arquivo maior que o original - muito comum!
  3. Distorça a imagem, especialmente quando um tamanho de vídeo inesperado é convertido (por exemplo, PAL não widescreen)
  4. Retire o áudio
  5. Resultar em um vídeo que o iPhone, iPod ou iPad não reproduzirá

Existe uma linha de comando ffmepg decente para todos os fins, que fará qualquer vídeo rodar feliz em todos os dispositivos Apple, além de obter uma redução no tamanho do arquivo?

Pontos de bônus se diminuir (mas não distorcer) qualquer vídeo acima de 720p também.

Richard
fonte
Quando foi a última vez que você atualizou o handbrakecli?
Gene
Com bastante frequência, na esperança de que o erro fatal seja corrigido. No momento, estou executando o 0.10.2 (2015060900) - MinGW x86_64.
Richard
Eu tinha um vídeo mp4 que se recusava a trabalhar no iOS, e este foi o comando mais curto que pude conjurar que o corrigiu: ffmpeg -i broken_video.mp4 -pix_fmt yuv420p working_video.mp4
Bemmu

Respostas:

30

Aqui está a minha opinião. Vou levar o iPhone 4 ou mais recente (incluindo todos os iPads) como alvo: H.264 Perfil principal, nível 3.1

ffmpeg -i input.mp4 -vcodec libx264 -profile:v main -level 3.1 -preset medium -crf 23 -x264-params ref=4 -acodec copy -movflags +faststart output.mp4

Os valores que você pode alterar livremente:

  • -crf 23: A configuração de qualidade constante. Valor mais alto = menos qualidade, arquivo menor. Baixa = melhor qualidade, arquivo maior. Os valores sãos são [18 - 24]
  • -preset medium: Se isso for muito lento para você, use uma predefinição mais rápida. Se você tiver paciência, use um mais lento. Veja aqui para mais informações.
  • -acodec copy: Tenta copiar a faixa de áudio no contêiner MP4. Se não puder ser copiado, será necessário recodificá-lo para AAC / MP3 / AC3 ​​... por exemplo-acodec libmp3lame

Se o seu vídeo for maior que 720p, adicione o seguinte após a entrada:

-vf "scale=-2:720:flags=lanczos"

Isso reduzirá o vídeo para 720p e manterá a proporção. O algoritmo de escalonamento usado será lanczos, pois é muito melhor que o padrão.

Ely
fonte
3
Você pode usar em seu -vf "scale=-2:720:flags=lanczos"lugar. A adição -movflags +faststarté recomendada se o arquivo for visualizado por meio de download progressivo, como em um navegador (e, caso contrário, a opção certamente não dói).
Llogan 21/08/2015
A compilação Zeranoe que estou usando não suporta x264-params. Além de construí-lo, existe uma maneira de contornar esse problema?
Richard
Eu uso um Zeranoe me construir e -x264-paramsfunciona bem. Tem certeza de que não perdeu nada? A opção é principalmente uma segurança para evitar ter mais de 4 quadros de referência que podem não ser manipulados por um decodificador mais antigo.
Ely
-acodec libmp3lamenão funciona para mim. Para ativar o áudio no meu iPad Mini, reconstruí ffmpegcom uma nonfreevariante e usei libfdk_aaccodificado.
Vitaly S.
0

Isso é básico, mas funcionou imediatamente para mim em um iPad 3

ffmpeg -i inputfile outputfile.m4v
gritando
fonte