Como codificar um vídeo a 30 FPS a partir de imagens tiradas a 7 FPS


21

Não tenho nenhum conhecimento sobre codificação de vídeo, tenho um aplicativo escrito em OpenGL e estou salvando os quadros gerados em pngimagens. Os quadros do meu aplicativo estão em 7 FPS e estou tentando criar um vídeo a partir deles.

Para esse fim, eu uso o ffmpeg como este

ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

que foi tirado deste site , no entanto, eu queria saber se é possível ter um vídeo que mostre a animação a 30 FPS?



Basta ajustar o -framerateparâmetro para obter os resultados desejados.
nullptr

Respostas:


21

Estou usando o código abaixo para fazer a mesma coisa.

ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -pix_fmt yuv420p -crf 23 output.mp4

Quebrando o comando:

ffmpeg             <- call ffmpeg
  -framerate 30    <- set the input framerate to 30
  -i img%03d.png   <- read PNG images with filename img001, img002, img003, etc..
                     img can be changed to another prefix
                     %03d can be changed to %04d for 0001, %05d for 00001 formats, etc...
  -c:v libx264     <- Set the codec to libx264
  -pix_fmt yuv420p <- Set the pixel format to planar YUV 4:2:0, 12bpp
  -crf 23          <- set the Constant Rate Factor to 23 (default value)
  -output.mp4      <- the output filename

Isso lê a entrada a 30 qps (a -framerate 30opção) e a codifica usando o libx264codec com fator de taxa constante de 23 (a -crf 23opção).


26

Há duas taxas de quadros a serem consideradas: a entrada e a saída.

Por padrão, a taxa de quadros de entrada é 25 e a saída usará a mesma taxa de quadros que a entrada, a menos que você diga o contrário.

Mesma taxa de quadros para entrada e saída

Se você deseja que a entrada e a saída tenham a mesma taxa de quadros, forneça apenas a taxa de quadros de entrada. Este exemplo definirá uma taxa de quadros de 30000/1001 (vídeo NTSC):

ffmpeg -framerate 30000/1001 -i input output.mp4
  • Como alternativa, neste exemplo, você poderia usar em ntscvez de 30000/1001, mas não use, 29.97porque isso não é exato ou correto. Veja outros aliases de taxa de quadros .

  • Como a taxa de quadros de entrada padrão é 25 e, se você definir apenas uma taxa de quadros de saída, os quadros serão descartados ou duplicados para compensar. É por isso que a taxa de quadros de entrada é definida nessa situação.

Taxa de quadros diferente para entrada e saída

Às vezes, você pode querer que a taxa de quadros de entrada e a taxa de quadros de saída sejam diferentes. Por exemplo, convém inserir os quadros em uma determinada taxa e, em seguida, duplicar ou soltar os quadros para que a saída tenha uma taxa de quadros diferente. Você pode fazer isso devido a problemas de compatibilidade com seu contêiner de formato de saída, seu player e / ou seu dispositivo:

ffmpeg -framerate 10 -i input -r 25 output.mp4
  • Neste exemplo, os quadros serão duplicados para ir de 10 a 25. A saída do console informará se os quadros estão sendo descartados ou duplicados.

  • O desmuxador de arquivo de imagem usa -framerate, enquanto a taxa de quadros de saída é definida usando -r.

  • Pode ser necessário adicionar a -pix_fmt yuv420popção em algumas circunstâncias, se você estiver produzindo vídeo H.264 (a ffmpegsaída do console avisará se você precisar). Isso usará um esquema de subamostragem de croma compatível com todos os players.


2
ffmpeg versão 3.2.2 me diz: Option framerate not found.:-(
erik

Sim você está certo. Mas, no entanto, a opção -frameratenão existe mais. Excluirei meu comentário, pois ele realmente não tem nada a ver com a conversão de uma série de imagens em um vídeo com uma determinada taxa de quadros.
Erik

4
@erik -framerateexiste. É usado pelos desmuxadores de imagem e vídeo bruto e por alguns dispositivos de entrada como x11grab e v4l2.
Llogan

1
Onde está -frameratedocumentada a opção ? Eu li a man ffmpegpágina, mas não a encontrei. Algum ponteiro, talvez?
Atcold

1
OK, encontrei ... FFMPEG-DEVICES(1).
Atcold 27/02

1
ffmpeg -framerate 30 -i img%03d.png output.mp4  

será suficiente na versão mais recente do ffmpeg.

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.