Если ваша цель - написать приложение на c ++ для этого, пожалуйста, не обращайте внимания на этот ответ, я просто оставлю его здесь для дальнейшего использования.Если нет, то вот как вы можете сделать это в bash:
Сначала убедитесь, что ваши изображения в хорошем формате, легко обрабатывается ffmpeg.Вы можете скопировать изображения в другой каталог:
mkdir tmp
x=1; for i in *jpg; do counter=$(printf %03d $x); cp "$i" tmp/img"$counter".jpg; x=$(($x+1)); done
Скопируйте ваши аудиоданные в каталог tmp и закодируйте видео.Допустим, ваша камера делала снимок каждые десять секунд:
cd tmp
ffmpeg -i audio.wav -f image2 -i img%03d.jpg -vcodec msmpeg4v2 -r 0.1 -intra out.avi
Где -r 0.1
указывает частоту кадров 0,1, что составляет один кадр каждые 10 секунд.
Возможные проблемы:
- Ваше аудио / видео может немного не синхронизироваться, если вы заранее не рассчитаете желаемую частоту кадров.Вы должны быть в состоянии получить длину аудио (или видео), используя ffmpeg и немного
grep
magic.Даже если синхронизация может быть проблемой с более длинными клипами. - , если у вас более 999 изображений, формата
%03d
будет недостаточно, обязательно измените 3
на желаемую длину индекса Видео будет наследовать его длину от более длинных потоков, вы можете ограничить его, используя переключатель -t
:
-t duration
- Restrict the transcoded/captured video sequence to the duration specified in seconds. "hh:mm:ss[.xxx]" syntax is also supported.