Cheat sheets e presets-settings que realmente funcionam com o FFmpeg 1.0?


28

Já tentei várias 'folhas de dicas' disponíveis em outros lugares, mas quase todas estão desatualizadas e simplesmente NÃO funcionarão com a versão mais recente do FFMpeg.

Alguém pode me indicar configurações que funcionarão com o FFMpeg mais recente?

Estou interessado principalmente nos seguintes codecs

H.264, predefinições de baixa média e alta qualidade

assim como

Pré-ajustes ProRes, baixa qualidade média e alta

Respostas:


49

O FFmpeg não inclui predefinições e perfis baseados em arquivo de texto para a libx264, ou seja, o que você usou com a -vpreopção. Estes foram depreciados e removido em favor de acessar os presets x264 reais, perfis (e músicas) com o -preset, -profile:ve -tuneopções. Os arquivos de texto antigos emulavam apenas as predefinições e perfis oficiais do x264 e, devido a várias limitações, não podiam oferecer a funcionalidade completa fornecida pelo novo sistema. Também é muito mais fácil de manter.

Além disso, muitos codificadores têm suas próprias opções separadas; também chamado de "opções privadas". Você precisará procurar nas opções do codificador de áudio e vídeo os codecs comuns na documentação on-line do FFmpeg ou verificar a saída ffmpeg -h fullpara obter uma lista completa das opções suportadas. Por exemplo, x264 lista suas opções em libx264 AVOptionsna saída de ajuda completa.

Se o seu ffmpeg suportar -preset, nenhuma predefinição de arquivo de texto deverá ser usada, e o FFmpeg não será mais fornecido com outras que não sejam predefinições de iPod não padrão. É um equívoco comum que as predefinições de texto possam ser simplesmente copiadas de qualquer lugar e usadas com qualquer ffmpeg. Isso é falso e resultará em quebra.


Basicamente, as predefinições permitem que você faça o seguinte:

Controle a qualidade

A qualidade é controlada especificando uma taxa de bits através de -b:v(para vídeo) ou -b:a(para áudio) ou especificando qualquer outro método de codificação que o codec possa suportar.

Para x264, existem vários métodos de codificação, sendo o método do fator de taxa constante o mais sofisticado. Isso resulta em taxa de bits variável, mas boa qualidade geral em uma única passagem. Os valores de CRF variam de 0 a 51, mas os valores sãos estão entre 19 e 26, dependendo da fonte e da qualidade desejada. 23 é o padrão; portanto, você pode, por exemplo, escolher 18 para "alta qualidade" e 28 para "baixa qualidade", o que isso significa para você.

ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

O x264 também tem outros métodos de codificação , mas isso está fora do escopo aqui.

Restringir o perfil H.264

Esses perfis definem um conjunto de recursos que o codificador pode usar para corresponder aos recursos de um determinado decodificador. Em recente FFmpeg, use a seguinte sintaxe para especificar um perfil, onde perfil poderia ser baseline, mainou high:

ffmpeg -i input.mp4 -c:v libx264 -profile:v baseline output.mp4

Para obter mais informações e quando você deve usar qual perfil, consulte: Quais são as diferenças entre os perfis H.264?

Escolha uma codificação x264 preset

Essas predefinições afetam a velocidade da codificação. O uso de uma predefinição mais lenta fornece uma melhor compactação ou qualidade por tamanho de arquivo, enquanto as predefinições mais rápidas oferecem pior compactação. Em geral, você deve apenas usar a predefinição que pode esperar. Presets pode ser ultrafast, superfast, veryfast, faster, fast, medium(padrão), slowe veryslow. Aqui está um exemplo:

ffmpeg -i input.mp4 -c:v libx264 -preset slow output.mp4

Codificar vídeo sem perdas

Isso é possível especificando um CRF de 0, então basta usar -crf 0:

ffmpeg -i input.mp4 -c:v libx264 -crf 0 output.mp4

Por fim, vamos falar sobre o ProRes rapidamente. O ProRes aceita uma taxa de bits fixa com -b:vou você pode especificar o perfil, que deve ser um valor entre 0 e 3 , onde as taxas de bits são escolhidas de acordo com o perfil. Maior significa melhor:

ffmpeg -i input.mp4 -c:v prores -profile:v 0 output.mov

O ffmbc Wiki sugere que nomes de perfis podem ser usados ​​- mas isso falha no FFmpeg 1.0.


O que devo fazer para reduzir as chances de conversão falha, isso está acontecendo de forma aleatória, por vezes, doesnát acontecer
FlyingAtom

@FlyingAtom Ainda não ouvi falar em "Falha na conversão". Se você tiver uma pergunta específica com um problema reproduzível, faça uma nova pergunta: superuser.com/questions/ask
slhck 8/16/16

Então, com o que você efetivamente terminaria se tudo o que fornecesse fosse ffmpeg -i input.mp4 -c:v libx264 output.mp4? crf: 23 e predefinido: médio?
21416 Draven Bjelovuk

1
@ Drazen Sim, está certo.
slhck

Felicidades! -------
Drazen Bjelovuk

20

Fiz um teste no qual transcodifiquei (usando a codificação libx264 para .mp4) um vídeo de alta qualidade de uma câmera de vídeo Sony usando toda a gama de valores predefinidos (exceto placebo) em uma faixa de valores de CRF (18, 21, 24 e 27 ) Eu queria saber o que me daria a melhor combinação de velocidade de codificação, qualidade de saída e tamanho do arquivo.

Para cada valor de CRF, atribui uma pontuação a cada operação trans-código por seu tempo de codificação (por exemplo, para CRF = 18, o valor predefinido, o tempo do ultrafast de 5,7 segundos obteve uma pontuação de 1,0, o tempo do veryslow de 162 segundos obteve um 0, com todos outras pontuações escalonadas no meio). Calculei as pontuações do tamanho do arquivo de saída da mesma forma, é claro, dando ao menor arquivo a melhor pontuação. Em seguida, adicionei as duas pontuações para uma velocidade / tamanho "combinados".

Para cada um dos quatro valores de CRF, a predefinição "muito rápida" foi a vencedora, com pontuações quase perfeitas de 1,94 (para CRF 18 e 21), 1,96 (CRF 24) e 1,97 (CRF 27). Acho muito curioso que "veryfast" produzisse quase sempre o menor tamanho de arquivo , perdendo apenas para "muito lento" e nunca muito.

Uma diferença que notei entre os vários valores predefinidos foi que o sistema operacional (Windows 7) me daria miniaturas diferentes. As predefinições mais rápidas exibem uma miniatura por alguns segundos no vídeo, onde as miniaturas das predefinições mais lentas refletem o (s) quadro (s) de abertura do vídeo. Isso não é importante para mim; o que aprendi foi que "-preset veryfast" parece ser uma escolha fácil.

Aqui estão meus resultados (como uma imagem instantânea de uma planilha do Excel):
instantâneo do excel

Aqui está a planilha do Excel como texto csv:

CRF,Preset,Seconds,score,MB,score,totalscore
18,1_ultrafast,5.7,1.00,59.5,0.09,1.09
18,2_superfast,8.4,0.98,62.3,0.00,0.98
18,3_veryfast,10.8,0.97,30.9,0.98,1.94
18,4_faster,16.0,0.93,33.5,0.89,1.83
18,5_fast,24.0,0.88,36.8,0.79,1.68
18,6_medium,29.1,0.85,34.9,0.85,1.70
18,7_slow,48.1,0.73,33.9,0.88,1.61
18,8_slower,84.9,0.49,33.0,0.91,1.40
18,9_veryslow,162.0,0.00,30.1,1.00,1.00
21,1_ultrafast,5.7,1.00,38.0,0.00,1.00
21,2_superfast,7.9,0.98,35.0,0.15,1.14
21,3_veryfast,10.0,0.97,19.0,0.97,1.94
21,4_faster,14.2,0.94,21.0,0.87,1.80
21,5_fast,19.9,0.89,23.0,0.77,1.66
21,6_medium,24.6,0.86,22.0,0.82,1.67
21,7_slow,43.1,0.72,21.0,0.87,1.58
21,8_slower,69.8,0.51,20.5,0.89,1.41
21,9_veryslow,137.3,0.00,18.4,1.00,1.00
24,1_ultrafast,5.5,1.00,24.9,0.00,1.00
24,2_superfast,7.5,0.98,21.4,0.27,1.25
24,3_veryfast,9.3,0.97,12.0,0.99,1.96
24,4_faster,13.2,0.93,14.0,0.84,1.77
24,5_fast,17.4,0.90,15.0,0.76,1.66
24,6_medium,21.0,0.87,14.4,0.81,1.67
24,7_slow,37.3,0.72,14.0,0.84,1.56
24,8_slower,62.2,0.51,13.0,0.92,1.42
24,9_veryslow,121.1,0.00,11.9,1.00,1.00
27,1_ultrafast,5.5,1.00,16.8,0.00,1.00
27,2_superfast,7.4,0.98,13.6,0.38,1.36
27,3_veryfast,9.0,0.97,8.4,1.00,1.97
27,4_faster,12.6,0.93,10.1,0.80,1.73
27,5_fast,15.8,0.90,10.4,0.76,1.66
27,6_medium,18.8,0.87,10.0,0.81,1.68
27,7_slow,34.1,0.73,9.8,0.83,1.56
27,8_slower,59.6,0.48,9.0,0.93,1.41
27,9_veryslow,109.7,0.00,8.4,1.00,1.00

3
Sei que as opções de formatação do Superusuário são medíocres, mas pode ser útil se você postou os dados como texto - possivelmente usando formatação de código.
Scott

1
Fascinante. Também é mais rápido na minha máquina. Obrigado!
Joeytwiddle

1
Devo admitir que observei seus resultados com suspeita, mas repeti o teste e obtive v. Resultados semelhantes, usando o ffmpeg versão 3.3.2-1 em um clipe de filme de 2 min 1080p. De fato, o veryfast gerou o menor tamanho de arquivo em 60% das vezes e ficou em 2º lugar para diminuir 40% das vezes (mas não muito). De agora em diante, eu vou usar muito rápido para todos os meus códigos, juntamente com um valor CRF razoavelmente baixo (18, 19, 20), pois muito rápido foi apenas um pouco mais lento com os valores mais baixos de CRF do que com os mais altos. Obrigado, você me salvou muito tempo. Dados brutos e script no comentário abaixo.
mattst

1
Continuando com o comentário acima ... Aqui estão meus dados brutos - CRFs 18 a 27 e o script bash do Linux / UNIX que escrevi para executar as codificações (caso alguém deseje executar um teste semelhante).
mattst

1
Aqui estão algumas ótimas postagens de blog sobre os assuntos, com testes realizados para x264 e x265 (os resultados são, previsivelmente, muito diferentes para cada um)
forresthopkinsa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.