OpenCV videoWriter编解码器问题
OpenCV videoWriter codec issue
我正在尝试在Windows中的OpenCV中编写视频,在选择编解码器时遇到了各种问题。我不确定是我的代码中有什么东西,还是我没有必要的编解码器。代码为:
int main(int argc, char ** argv){
VideoCapture inputVideo("LFW.mp4");
Mat inputFrame, outputFrame;
VideoWriter outputVideo;
if (!inputVideo.isOpened()){
std::cout << "!!! Input video could not be opened" << std::endl;
return 1;
}
int ex = static_cast<int>(inputVideo.get(CV_CAP_PROP_FOURCC));
const string name = "Output.mp4";
Size size = Size((int) inputVideo.get(CV_CAP_PROP_FRAME_WIDTH), (int) inputVideo.get(CV_CAP_PROP_FRAME_HEIGHT));
outputVideo.open(name, CV_FOURCC('M','P','4','2'), inputVideo.get(CV_CAP_PROP_FPS), size, true);
if (!outputVideo.isOpened()){
std::cout << "!!! Output video could not be opened" << std::endl;
return 2;
}
return 0;
}
代码一直以代码2退出,因此videoWriter对象对其配置不满意。
我对windows上的许多编解码器都有问题。我已经正确安装了ffmpeg,但许多视频格式仍然存在问题。
试试这个CV_FOURCC('W','M','V','2')
VideoWriter video("Result.wmv", CV_FOURCC('W', 'M', 'V', '2'), 30, SizeOfFrame, true);
WMV格式很糟糕,但对我来说非常完美。我正在使用Visual Studio 2015和我自己构建的Opencv 3.0.0。
在Opencv 3.0.0中,我强烈建议也包括
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "opencv2/videoio/videoio.hpp"
还有其他建议。检查输入视频的大小和VideoWriter的大小。CV_CAP_PROP_FRAME_WITTH和CV_CAPPROP_FRAME_HEIGHT在某些情况下返回错误的值。视频前检查两种尺寸。写入(Mat)
您可以通过此循环检查您的视频编写器。将写入程序大小设置为伪常量。
Size SizeOfFrame=cv::大小(800600);
VideoWriter视频("Result.wmv",CV_FOURCC('W','M','V','2'),30,SizeOfFrame,true);
在视频循环中,将检索到的视频调整为与写入程序相同的大小。如果失败,您的安装可能是错误的。
for (;;)
{
bool Is = cap.grab();
if (Is == false) {
cout << "cannot grab video frame" << endl;
}
else {
cap.retrieve(LoadedImage, CV_CAP_OPENNI_BGR_IMAGE);
resize(LoadedImage, LoadedImage, Size(800, 600));
video.write(LoadedImage);
}
}
我的教程在这里
人们在使用VideoCapture和VideoWriter时遇到编解码器问题并不罕见。(另一个不太常见的问题是OpenCV是在没有编码器的情况下编译的(就像编译OpenCV时使用WITH_FFMPEG=NO
或WITH_VFW=NO
一样)
我会尝试以下方法来剖析问题(按所涉及的麻烦程度排序:):
-
尝试运行相同的程序,但将
-1
而不是CV_FOURCC('M','P','4','2')
作为outputVideo.open()
的第二个参数。然后,您将收到一个弹出窗口,要求您选择编解码器,然后可以查看OpenCV找到了哪些编解码器。 -
如果这对你没有帮助,请使用调试器进入outputVideo.open()。你可能会得到一个空函数(由于一些预处理器宏,
#ifdef
被删除)。不幸的是,您将不得不使用pdb文件调试编译OpenCV才能正确执行此操作。
- h264_cuvid编解码器未找到
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- 如何使用 ffmpeg 将 3840 nb_samples编码为请求 1024 的编解码器
- FFMPEG:为什么当我调用av_codec_next()时,我所有的编解码器都没有显示出来
- OpenCV 检查计算机上是否安装了视频编解码器 (C++)
- OpenCV:FFMPEG:编解码器 ID 12 和格式 'mp4 / MP4 不支持标记
- 带有 H264 编解码器的 libav 错误消息。"非严格单调PTS"
- 为什么编解码器X264/X265忽略了输入框架的PT和DTS
- 如何修复"UnicodeDecodeError:"utf-8"编解码器无法解码字节时使用Python C扩展?
- C++ avformat_open_input返回空编解码器、宽度和高度
- 如何为 OpenCV 的视频编写器动态选择可用的编解码器?
- 将FFMPEG命令行转换为C 编解码器设置
- codecvt_utf8<wchar_t>被转换为本机编解码器<wchar_t,字符>
- 寻求使用 FFmpeg 在 mp4 容器中 h264 编解码器的视频帧.数据包 pts 始终为 0
- C++ 无法实例化编解码器以在 txt 文件中写入 unicode
- 警告:找不到编解码器参数(././modules/higgui/src/cap_ffmpeg_impl.hpp:540)
- OpenCV videoWriter编解码器问题
- 编解码器在 gcc 中不起作用
- Qt5 QMediaPlayer使用随程序一起提供的编解码器
- 开源或低成本的跨平台视频编解码器库,可用于商业目的,并支持RGBA格式