继上一博文:QT打开图片文件夹快速播放图片现在要将图片做成视频
1,第一种方式:cmd 的调用:因为什么都不懂,刚开始是想用命令行来做,在cmd下用命令能合成比较模糊的视频了
因输入文件的方式有两种调用方式:
第一种:ffmpeg -f image2 -pattern_type glob -framerate 24 -i 'IMG_*.JPG' ./IMG_.avi
第二种:ffmpeg -f image2 -r 1/5 -i img%03d.png -vcodec libx264 -pix_fmt yuv420p out.mp4
第二种方式要求输入图片文件名要有规则,如:%03d 代表 001 开始 如:%04d 代表 0001开始
我的文件的命名是 IMG_0152.JPG IMG_0220.JPG IMG_0288.JPG ...... 因此用第一种方式,第一种方式的输出文件名必是IMG_与文件名一样,而且不知为什么,当改成mp4时就生成不了视频了。
参考:http://ffmpeg.org/ffmpeg.html https://stackoverflow.com/questions/21586256/turning-images-into-videos-with-ffmpeg
接下来是在代码中调用了,最后不知什么原因运行不起来ffmpeg,不知哪里不对,真是小白,代码还是上来吧:
QString inputFiles = srcDir + "/IMG_0660.JPG";
QString outputFile = "/Users/ljx/IMG_.avi";
QString cmd = "ffmpeg";///usr/loacl/ffmpeg.app";
//QString cmd = "ffmpeg -f image2 -pattern_type glob -framerate 18 -i "+inputFiles + " " + outputFile;
qDebug() << "on_createAviBtn_clicked inputFiles:"<< inputFiles << " out:" <<outputFile;
QStringList arguments;
// //arguments.append("ffmpeg");
// arguments.append("-f");
// arguments.append("image2");
// arguments.append("-pattern_type");
// arguments.append("glob");
// arguments.append("-framerate");
// arguments.append("18");
// arguments.append("-i");
// arguments.append(inputFiles);
// arguments.append(" ");
// arguments.append(outputFile);
arguments.append("-version");
QProcess *p = new QProcess(this);
int in = p->execute(cmd,arguments);
//p.start(cmd,arguments);
bool b = p->waitForStarted();
bool b2 = p->waitForFinished();//等待完成
QString strTemp=QString::fromLocal8Bit(p->readAllStandardOutput());
qDebug() << "QProcess finished in: "<< in <<" b:"<< b + " b2:"<<b2 << "