7
votes

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....

2
What is the actual ffmpeg command and can you also show the complete ffmpeg console output?llogan
How do you mean the actual ffmpeg command? Opencv will automatically call the right ffmpeg commands when I use the code that I included in my first post?alcon
How can you know it is the correct command without seeing it?llogan

2 Answers

5
votes

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.

2
votes

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.