How to make .avi, .mp4 file with jpeg frames?

痴心易碎 提交于 2021-02-05 06:43:11

问题


I'm working with IP camera, and I have got Jpeg frames and audio data (PCM) from camera.

Now, I want to create video file (both audio and video) under .avi or .mp4 format from above data.

I searched and I knew that ffmpeg library can do it. But I don't know how to using ffmpeg to do this.

Can you suggest me some sample code or the function of ffmpeg to do it?


回答1:


If your objective is to write a c++ app to do this for you please disregard this answer, I'll just leave it here for future reference. If not, here's how you can do it in bash:

First, make sure your images are in a nice format, easy to handle by ffmpeg. You can copy the images to a different directory:

mkdir tmp
x=1; for i in *jpg; do counter=$(printf %03d $x); cp "$i" tmp/img"$counter".jpg; x=$(($x+1)); done

Copy your audio data to the tmp directory and encode the video. Let's say your camera took a picture every ten seconds:

cd tmp
ffmpeg -i audio.wav -f image2 -i img%03d.jpg -vcodec msmpeg4v2 -r 0.1 -intra out.avi

Where -r 0.1 indicates a framerate of 0.1 which is one frame every 10 seconds.

The possible issues here are:

  • Your audio/video might go slightly out of sync unless you calculate your desired framerate carefully in advance. You should be able to get the length of the audio (or video) using ffmpeg and some grep magic. Even so the sync might be an issue with longer clips.
  • if you have more than 999 images the %03d format will not be enough, make sure to change the 3 to the desired length of the index
  • The video will inherit its length from the longer of the streams, you can restrict it using the -t switch:

    -t duration - Restrict the transcoded/captured video sequence to the duration specified in seconds. "hh:mm:ss[.xxx]" syntax is also supported.



来源:https://stackoverflow.com/questions/9861595/how-to-make-avi-mp4-file-with-jpeg-frames

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!