C++ 使用动画从图像创建视频
我有十个图像来创建一个带有动画的视频,就像那样 它使用freeImage和FFmpegC++ 使用动画从图像创建视频,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
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,视频直接帮助我压缩关键帧。我想通过设置关键帧找到一种直接书写的方法,但我找不到。。。。我认为这应该是可行的…也许其他人知道?为什么你需要重新缩放图像?我想重新缩放图像要慢慢来。是的,你说得对,因为我需要制作一个缩放动画。