Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用动画从图像创建视频_C++_Opencv_Ffmpeg - Fatal编程技术网

C++ 使用动画从图像创建视频

C++ 使用动画从图像创建视频,c++,opencv,ffmpeg,C++,Opencv,Ffmpeg,我有十个图像来创建一个带有动画的视频,就像那样 它使用freeImage和FFmpeg MovieWriter writer(fileName, IMG_WIDTH, IMG_HEIGHT); vector<char*> ls = { "D:/createVideo/src/c/1.jpg", "D:/createVideo/src/c/2.jpg", "D:/createVideo/src/c/3.jpg", "D:/createVideo/src

我有十个图像来创建一个带有动画的视频,就像那样

它使用freeImage和FFmpeg

    MovieWriter writer(fileName, IMG_WIDTH, IMG_HEIGHT);
        vector<char*> ls = {
 "D:/createVideo/src/c/1.jpg",
 "D:/createVideo/src/c/2.jpg",
 "D:/createVideo/src/c/3.jpg",
 "D:/createVideo/src/c/4.jpg",
 "D:/createVideo/src/c/5.jpg",
 "D:/createVideo/src/c/6.jpg",
 "D:/createVideo/src/c/7.jpg",
 "D:/createVideo/src/c/8.jpg",
 "D:/createVideo/src/c/9.jpg",
 "D:/createVideo/src/c/10.jpg",
};
        FREE_IMAGE_FORMAT pic_type = FIF_JPEG;
        FIBITMAP *fiCopy = NULL;
        FIBITMAP *corpImg = NULL;
        uint8_t *ut = NULL;
        for (int i=0;i<10;i++)
        {
            char *src_pic_path = ls[i];

            FIBITMAP *fi = FreeImage_Load(pic_type, src_pic_path);

            if(fi==NULL){
                continue;
            }
            int w = IMG_WIDTH;
            int h = IMG_HEIGHT;
            unsigned int index = 0;

            while (w > IMG_MIN_W_SCALE || h > IMG_MIN_H_SCALE)
            {       
                fiCopy = FreeImage_RescaleRect(fi,  IMG_WIDTH, IMG_HEIGHT,0, 0, w * 2, h * 2);
                if(fiCopy == NULL){
                    break;
                }
                corpImg = FreeImage_Rescale(fiCopy, IMG_WIDTH, IMG_HEIGHT);
                if(corpImg == NULL){
                    break;
                }
                ut = FreeImage_GetBits(corpImg);
                if(ut == NULL){
                    break;
                }
                w -= ONE_W_PIECE;
                h -= ONE_H_PIECE;
                writer.addFrame(ut);
                FreeImage_Unload(corpImg);
                FreeImage_Unload(fiCopy);
                index++;
            }
        }
MovieWriter-writer(文件名、IMG\u宽度、IMG\u高度);
向量ls={
“D:/createVideo/src/c/1.jpg”,
“D:/createVideo/src/c/2.jpg”,
“D:/createVideo/src/c/3.jpg”,
“D:/createVideo/src/c/4.jpg”,
“D:/createVideo/src/c/5.jpg”,
“D:/createVideo/src/c/6.jpg”,
“D:/createVideo/src/c/7.jpg”,
“D:/createVideo/src/c/8.jpg”,
“D:/createVideo/src/c/9.jpg”,
“D:/createVideo/src/c/10.jpg”,
};
自由图像格式pic\U type=FIF\U JPEG;
FIBITMAP*fiCopy=NULL;
FIBITMAP*corpImg=NULL;
uint8_t*ut=NULL;
对于(int i=0;i IMG_MIN_W_SCALE | h>IMG_MIN_h_SCALE)
{       
fiCopy=自由图像重新缩放(fi,图像宽度,图像高度,0,0,w*2,h*2);
if(fiCopy==NULL){
打破
}
corpImg=自由图像重新缩放(菲比、图像宽度、图像高度);
if(corpImg==NULL){
打破
}
ut=自由图像_GetBits(corpImg);
if(ut==NULL){
打破
}
w-=一件;
h-=一件;
writer.addFrame(ut);
FreeImage_卸载(corpImg);
FreeImage_卸载(fiCopy);
索引++;
}
}
但是它这么慢,如何优化那段代码呢?或者如何更快地创建该视频


您知道这样做的选项吗?

我注意到我的原始图像文件大小为3M,所有视频帧数据都超过100M,但最终创建的文件大小为3.4M,视频直接帮助我压缩关键帧。我想通过设置关键帧找到一种直接书写的方法,但我找不到。。。。我认为这应该是可行的…也许其他人知道?为什么你需要重新缩放图像?我想重新缩放图像要慢慢来。是的,你说得对,因为我需要制作一个缩放动画。