make a video from a subset of images and audio

550 Views Asked by At

I want to create a video of three images and three audio files but the duration time of each image should be the time of the corresponding audio file.

Lets say I have three images image_0.png, image_1.png and image_2.png and three audio files audio_0.mp3 (length 10 seconds) , audio_1.mp3 (length 15 seconds), audio_2.mp3 (length 12 seconds).

I want to create a video showing first image_0.png with audio_0.mp3 for 10 seconds, then image_1.png with audio_1.mp3 for 15 seconds and in the end image_2.png with audio_2.mp3 for 12 seconds.

I tried to make this with avconv. I tried different variations of -i commands

avconv -i imageInputFile.png -i audioInputFile.mp3 -c copy output.avi

nothing worked. Indeed, I could make for each image+audio a single avi video, but I failed concatenating all single avi files... Besides this is not the best way I think because of quality loss.

How would you do this? Is this even possible with avconv?

1

There are 1 best solutions below

0
On

first concatenate all your .mp3 in one single .mp3 then name your .png something like img01.png, img02.png ... imgxx.png

then try:

mencoder 'mf://img*.png' -oac mp3lame -ovc lavc -fps 1 -ofps 25 -vf harddup -audiofile audio.mp3 -o test.avi

obviously replace lavc with your preferred codec and 1 with a reasonable value to fit the frames in your audio track.
some may argue that it's stupid to recompress audio again and I can use -oac copy instead but when converting from multiple sources it can cause issues.
this command creates a 25 fps video stream with 15-26 duplicated frames per second, if you remove -ofps 25 you will avoid duplicate frames but some decoders could hang, especially when seeking