Usando o ffmpeg 2.0, há algumas maneiras de fazer isso:
-
Um método é usar tempos de modificação de arquivos. Primeiro defina o horário de modificação dos arquivos de imagem para que cada arquivo de imagem tenha um tempo de modificação maior que o anterior; a diferença de tempo é a duração da imagem anterior (com resolução de 1 segundo). Em seguida, use a opção image2 demuxer
-ts_from_file 1
. Por exemplo:touch -t 01010000.00 image01.png touch -t 01010000.03 image02.png touch -t 01010000.08 image03.png ... ffmpeg -ts_from_file 1 -i image%2d.png -i audio.mp3 -c:a copy -vf fps=25 out.avi
-
Outro método é usar o
concat
demuxer , que pega uma lista de arquivos para concatenar , com durações opcionais. Primeiro, crie um arquivo com as imagens e as durações que se parecem com isso:ffconcat version 1.0 file image01.png duration 3 file image02.png duration 5 file image03.png
Em seguida, forneça este arquivo como entrada para o ffmpeg. Por exemplo:
ffmpeg -i in.ffconcat -i audio.mp3 -c:a copy -vf fps=25 out.avi
Você pode precisar duplicar o último arquivo após a duração final. -c:a copy
copia o áudio mp3 como está; Se você quiser convertê-lo em outro codec de áudio, poderá especificar isso em vez de copy
. Você também pode querer especificar um codec de vídeo diferente com -c:v
ou um formato de pixel diferente com -pix_fmt
, como -c:v libx264 -pix_fmt yuv420p
. -vf fps=25
fará a taxa de quadros de saída 25 fps. Se o seu áudio for mais longo e você quiser cortá-lo após as imagens, use a opção -shortest
.