ffmpeg configurações para converter imagens fixas em vídeo para arquivamento

1

Eu preciso converter um conjunto de imagens estáticas (câmeras estáticas apontadas em uma estrada) para um vídeo.

Eu considerei codecs de vídeo como Theora, H.264, VP8, VP9, HEVC e Snow.

O vídeo deve ter um tamanho mínimo com a máxima qualidade de imagem. Agora, de todos os argumentos de linha de comando disponíveis, estou usando framerate (fps), b:v (bitrate) e s (width * height). Além disso, para H.264 e HEVC, há -crf e -preset .

Quais outros argumentos de linha de comando podem ser úteis para alcançar o que eu estou procurando? Em ffmpeg, dúzias de argumentos de linha de comando e análise podem levar muito tempo.

    
por Maxim Fedorov 23.05.2017 / 15:35

1 resposta

3

Se você deseja a mais alta qualidade e o tamanho mínimo do arquivo, use um codec eficiente na compactação. No entanto, primeiro você precisa pensar se deseja fazer uma codificação (sem problemas), sem perda visual ou com perdas:

  • As codificações sem perdas resultarão, naturalmente, em tamanhos de arquivo maiores, mas oferecem o benefício de preservar os dados originais. Você pode então extrair quadros individuais do vídeo sem perda de qualidade. Aqui, codecs como HuffYUV ou FFV1 poderiam ser usados. Estes são freqüentemente usados para propósitos de arquivamento, onde o material original precisa ser preservado, e a perda de geração deve ser evitada. libx264 (H.264), libx265 (HEVC) e libvpx-vp9 também podem ser usados no modo sem perdas:

    ffmpeg -i <input> -c:v huffyuv output.avi
    ffmpeg -i <input> -c:v ffv1 output.avi
    ffmpeg -i <input> -c:v libx264 -crf 0 output.mp4
    ffmpeg -i <input> -c:v libx265 -crf 0 output.mp4
    ffmpeg -i <input> -c:v libvpx-vp9 -lossless 1 output.webm
    
  • As codificações Visualmente sem perdas eliminam alguns dados, mas preservam a qualidade de tal maneira que os humanos provavelmente não notarão qualquer diferença entre o vídeo original e o vídeo codificado. Os chamados codecs "intermediários", como o ProRes (consulte aqui ) são freqüentemente usados para essa finalidade. Você também pode fazer codificações visualmente sem perdas com libx265 ou libx264 especificando um valor de CRF baixo o suficiente ( explicação do CRF aqui ) , por exemplo entre 10 e 18 para x264.

    ffmpeg -i <input> -c:v prores -profile:v 3 output.mov
    ffmpeg -i <input> -c:v libx264 -crf 10 -preset ultraslow output.mp4
    ...
    
  • Codecs

    Lossy , existem muitos. Se você puder sacrificar a qualidade, poderá reduzir drasticamente o tamanho do arquivo. O VP9 e o HEVC são mais eficientes que o H.264 em termos de quanto espaço eles exigem, mas podem levar mais tempo para codificar. Esqueça o Theora e o VP8. Com VP9, HEVC e H.264 (pelo menos com os encoders disponíveis no ffmpeg) você pode definir um parâmetro CRF que lhe ofereça a qualidade desejada. Você precisa verificar visualmente sua saída para certificar-se de que a quantidade de perda não é muito severa para o seu propósito. Para libx264 , os valores de CRF entre 18 e 23 parecem "bons".

    ffmpeg -i <input> -c:v libx264 -crf 23 -preset ultraslow output.mp4
    ffmpeg -i <input> -c:v libvpx-vp9 -crf 10 -b:v 0 output.webm
    ...
    

Geralmente, se você deseja arquivar conteúdo, não deve especificar apenas uma taxa de bits de destino. Em vez disso, você deseja usar um modo de qualidade constante, onde o codificador está livre para usar quantos bits forem necessários para manter a qualidade da imagem (dentro de certos limites). Especialmente com os codificadores H.264 ou HEVC libx264 e libx265 , o uso de -b:v para uma codificação de passagem única não é recomendado, pois pode levar a enormes variações de qualidade ao longo do tempo. (Eu escrevi um artigo sobre diferentes modos de controle de taxa aqui.) Para resumir, se você está arquivando, simplesmente vá para um valor de CRF constante.

Também é muito importante que você não redimensione o vídeo, já que ele introduz o desfoque (ao melhorar o valor) ou elimina os dados (ao reduzir o tamanho). Simplesmente deixe de fora a opção -s:v , a menos que suas imagens sejam muito grandes para o vídeo.

Por fim, ao executar codificações visualmente sem perdas ou com perdas, você pode trocar a velocidade com a eficiência de compactação. Em outras palavras, se você esperar mais, poderá diminuir o tamanho do arquivo. Aqui, as opções preset entram em cena: Se você escolher uma predefinição como ultraslow , o processo de codificação demorará muito tempo, mas o arquivo resultante - assumindo um determinado CRF - será menor, mesmo que tenha a mesma qualidade. O VP9 tem diferentes opções para controlar a velocidade, consulte aqui .

Mais uma coisa: com libx264 , você pode usar a opção -tune stillimage para otimizar a codificação de imagens. Além disso, escolher a taxa de quadros mais baixa necessária ajudará a economizar o tamanho do arquivo, é claro.

Alguma documentação:

por 23.05.2017 / 16:12