Как сделать .avi, .mp4 файл с фреймами jpeg? - PullRequest
2 голосов
/ 25 марта 2012

Я работаю с IP-камерой, и у меня есть Jpeg-кадры и аудиоданные (PCM) с камеры.

Теперь я хочу создать видеофайл (как аудио, так и видео) в .avi илиФормат .mp4 из приведенных выше данных.

Я искал и знал, что библиотека ffmpeg может это сделать.Но я не знаю, как использовать ffmpeg для этого.

Можете ли вы предложить мне пример кода или функцию ffmpeg для этого?

1 Ответ

1 голос
/ 26 марта 2012

Если ваша цель - написать приложение на 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.

...