本文最后更新于 2025-11-16 22:13:52
0、如果路径中存在空格,用””把路径包括起来
1、使用ffmpeg命令
1 2 3 4 5
| ffmpeg -y -framerate 10 -start_number 1 -i E:\Image\Image_%d.bmp E:\test.mp4 -y 表示输出时覆盖输出目录已存在的同名文件 -framerate 10 表示视频帧率 -start_number 1 表示图片序号从1开始 -i E:\Image\Image_%d.bmp 表示图片输入流格式
|
2、c++ 实现 ffmpeg命令
2.1、system方式
1 2
| system("ffmpeg.exe -y -framerate 10 -start_number 1 -i E:\Image\Image_%d.bmp E:\test.mp4");
|
2.2、ShellExecuteEx方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| SHELLEXECUTEINFO ShExecInfo = { 0 }; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = L"open"; ShExecInfo.lpFile = L"ffmpeg.exe"; ShExecInfo.lpParameters = L"ffmpeg.exe -y -framerate 10 -start_number 1 -i E:\Image\Image_%d.bmp E:\test.mp4";
ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_HIDE; ShExecInfo.hInstApp = NULL; if (ShellExecuteEx(&ShExecInfo)) { if (ShExecInfo.hProcess) { WaitForSingleObject(ShExecInfo.hProcess, INFINITE); } }
|
3、使用opencv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| cv::Mat image; int fps = 10;
cv::VideoWriter writer("video_out.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, cv::Size(3840, 2748), 0);
for (size_t i = 1; i <= 100; i++) { image = cv::imread("Image_" + std::to_string(i) + ".bmp", cv::IMREAD_GRAYSCALE); if (!image.empty()) { writer.write(image); } }
|
c++通过OpenCV/FFmpeg把图片序列化视频
https://njit-77.github.io/2020/08/15/图片转视频/