Este é o meu comando atual para redimensionar vídeos (1080p) de 2 GB a 300 MB, mas leva muito tempo:
mkdir newfiles
for %%a in ("*.mp4") do ffmpeg -i "%%a" -c:v libx264 -preset slow -crf 21 -c:a aac -b:a 128k -vf scale=678:-2 "newfiles\%%~na.mp4"
pause
Eu tentei nvenc com minha NVIDIA GTX1070:
mkdir newfiles
for %%a in ("*.mp4") do ffmpeg -i "%%a" -c:v h264_nvenc -preset slow -c:a aac -b:a 128k -vf scale=678:-2 "newfiles\%%~na.mp4"
pause
O tamanho da saída é sempre 3⨉ ou 5⨉ do tamanho original - o nvenc não usa -crf
.
Então, como uso o nvenc com ffmpeg para converter / redimensionar um vídeo com alta qualidade e tamanho pequeno? Devo usar a GPU para codificação?
ffmpeg
video-encoding
hongducwb
fonte
fonte
slow
parafast
no seu primeiro comando. O CRF não está implementado nonvenc
.Respostas:
Para codificações baseadas em CRF, transmita os seguintes argumentos no snippet abaixo para FFmpeg:
Obviamente, você precisará ajustar as taxas de bits de destino e um
cq
valor fixo . 19 é a configuração recomendada como visualmente idêntica a 0, mas preserva uma boa troca de compactação para o tamanho do arquivo. Veja este artigo para saber mais sobre o que o CRF faz.Observe que a
-cq
escala é logarítmica, significando que 0 é essencialmente sem perdas e 51 seria o pior absoluto.A qualidade pode ser aprimorada ainda mais com a adição de opções como quadros B (limite isso para 3, no máximo, e isso requer o perfil principal H.264 e acima. Os perfis de linha de base não suportam quadros B. Para fazer isso, passe
-bf {uint}
para o codificador de vídeo, de modo que-bf:v 4
o codificador use 4 quadros B.As peças-chave são o
-cq:v 19
e os-rc:v vbr_hq
argumentos, que lhe permitem ajustar o codificador tanto com uma taxa de bits variável predefinido e um bitrate máximo permitido (-b:v
e-maxrate:v
) ao aderir a um valor CRF de 19.E agora, pequenas notas sobre o NVENC e o ajuste para codificação de alta qualidade:
O NVENC, como qualquer outro codificador baseado em hardware, tem várias limitações e, em particular, com o HEVC, aqui estão as limitações conhecidas:
Em Pascal:
Para codificações HEVC, as seguintes limitações se aplicam:
Turing tem todos os aprimoramentos disponíveis para o Pascal, com a adição do suporte de quadros B para HEVC e a capacidade de usar quadros B como referência. Veja esta resposta para um exemplo sobre esse recurso.
E no Maxwell Gen 2 (GPUs da série GM200x):
A codificação HEVC não possui os seguintes recursos:
O impacto aqui para Maxwell é que cenas pesadas em movimento com HEVC sob taxas de bits restritas podem sofrer artefatos (bloqueios) devido às funções de lookahead ausentes e aos recursos de filtragem de loop de deslocamento de amostra adaptável (SAO). O Pascal melhorou um pouco esse recurso, mas, dependendo da versão do SDK com a qual o codificador de vídeo foi criado, nem todos os recursos podem estar disponíveis.
Por exemplo, o modo de previsão ponderada para codificação H.264 no Pascal requer o NVENC SDK 8.0x e superior, e esse modo de codificação também desativará o suporte a quadros B. Da mesma forma, a combinação de escaladores baseados em hardware que executam o Nvidia Performance Primitives (NPP) com o NVENC pode introduzir aprimoramentos de desempenho nos aplicativos de escalabilidade de vídeo à custa de escalar artefatos, particularmente com conteúdo escalonado. O mesmo também afeta o pipeline de codificação de vídeo, pois as funções de dimensionamento da NPP executam os núcleos CUDA na GPU e, como tal, o impacto no desempenho introduzido pela carga extra deve ser analisado caso a caso para determinar se a qualidade do desempenho o trade-off é aceitável.
Lembre-se: um codificador baseado em hardware sempre oferecerá personalização um pouco menor do que uma implementação equivalente baseada em software e, como tal, sua milhagem e qualidade de saída aceitável sempre serão diferentes.
E para sua referência:
Com o FFmpeg, você sempre pode consultar as configurações de um codificador para personalização:
Portanto, para codificadores baseados em NVENC, você pode executar:
Você também pode ver todos os codificadores baseados em NVENC e escaladores baseados em NPP (se criados como tais) executando:
Exemplo de saída no meu testbed:
fonte
vbr_minqp
parece estar obsoleto agora. Concordo que essa resposta pode ser mal interpretada, pois não existe um modo de CRFh264_nvenc
.Acredito que encontrei uma solução:
Parece que h264_nvenc usa em
-qp
vez de-crf
. Esta opção funciona apenas enquanto-rc
estiver definida comoconstqp
.fonte
-qp
é tudo diferente de-crf
. h264_nvenc 's-qp
é equivalente a libx264 ' s-qp
Para
-crf
substituição da libx264 pode ser-cq
ou-qp
de h264_nvenc:-crf
Selecione a qualidade para o modo de qualidade constante-cq
Defina o nível de qualidade desejado (0 a 51, 0 significa automático) para o modo de qualidade constante no controle de taxa VBR-qp
Método de controle de taxa de parâmetro de quantização constante (de -1 a 51) (padrão -1)Método de codificação acelerada por hardware mais rápido:
-resize
resolução na entrada (em hardware); não é necessário compilar o ffmpeg--enable-libnpp
para oscale_npp
filtro.Para mais informações:
ffmpeg -h encoder=h264_nvenc
fonte