Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenCV videowriter H264 codec (ffmpeg)

I want to save a video with opencv with lossless compresion so I don't lose any details of the frames. Everything works with the xvid codec but offcourse this is not a lossless compression so I found that the x264 codec is suitable. However it doesn't work, I tried the following sample code but while running I get the following error: "could not find encoder for codec id 28: encoder not found."

cv::VideoWriter makeVideo;
makeVideo.open("makevideo//newVideo.mp4", CV_FOURCC('X','2','6','4'), 30, cv::Size(1600,1200), true);
cv::Mat image = imread("makevideo//frames//111.png");

for(int i = 0; i < 200; i++)
    makeVideo << image;

makeVideo.release();

I found that for this to work, I need to have ffmpeg support. I'm currently using opencv2.4.6 and in this discussion (how can I use the openCV FFMPEG video I/O rather than the DirectShow one in Windows?) someone mentioned that in opencv2.4 ffmpeg is automatically included. But its not working....

Here (How to compile OpenCV 2.3 with ffmpeg support with Visual Studio 2010) I found how to compile opencv and ffmpeg yourself on windows. I followed all the steps sucessfully but still I get the same error....

like image 207
alcon Avatar asked Nov 12 '13 16:11

alcon


2 Answers

I had the same problem and could not find a solution. So now I always use -1 as FOURCC and choose the x264 codec by hand.

like image 148
littleimp Avatar answered Oct 14 '22 20:10

littleimp


I managed to work it out on ubuntu, write down for your reference.

  1. In order to have x264 codec work, you need to: Build FFmpeg with x264 enabled!
  2. Before debug about OpenCV, please make sure you could generate x264 with ffmpeg, by itself.

Try the below command to verify H264 codec:

ffmpeg -i x264-input.mp4 -vcodec libx264 -f mp4 x264-output.mp4

Follow the FFmpeg officially doc to install from source.

like image 41
hao Avatar answered Oct 14 '22 20:10

hao