我试图运行一个位于HERE的存储库。基本上,只是针对SimpleVideoSummarizer.cc
,它使用OpenCV进行一些基本的视频处理。我使用Ubuntu 14.04。以下是代码的保存部分:
void SimpleVideoSummarizer::playAndSaveSummaryVideo(char* videoFileSave) {
cv::VideoCapture capture(videoFile);
cv::Mat frame;
capture.set(CV_CAP_PROP_POS_FRAMES, 0);
cv::VideoWriter videoWriter;
if (videoFileSave != "") {
videoWriter = cv::VideoWriter(videoFileSave, CV_FOURCC('M', 'J', 'P', 'G'), static_cast<int>(capture.get(CV_CAP_PROP_FPS)), cv::Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT)));
}
for (std::set<int>::iterator it = summarySet.begin(); it != summarySet.end(); it++) {
capture.set(CV_CAP_PROP_POS_FRAMES, segmentStartTimes[*it] * frameRate);
for (int i = segmentStartTimes[*it]; i < segmentStartTimes[*it + 1]; i++) {
for (int j = 0; j < frameRate; j++) {
capture >> frame;
cv::putText(frame, "Time: " + IntToString(i) + " seconds", cvPoint(30, 30),
cv::FONT_HERSHEY_COMPLEX_SMALL, 0.8, cvScalar(200, 200, 250), 1, CV_AA);
if (frame.data) {
cv::imshow("Summary Video", frame);
}
if (videoFileSave != "") {
videoWriter.write(frame);
}
// Press ESC on keyboard to exit
char c = static_cast<char>(cv::waitKey(25));
if (c == 27) {
break;
}
}
}
}
capture.release();
}
我传递了一个input.mp4
文件,并指定了一个out.mp4
。不幸的是,当示例试图保存输出视频文件时,它在FOURCC上抛出错误:
OpenCV: FFMPEG: tag 0x44495658/'XVID' is not supported with codec id 12 and format 'mp4 / MP4 (MPEG-4 Part 14)'
OpenCV: FFMPEG: fallback to use tag 0x7634706d/'mp4v'
或另一个:
OpenCV: FFMPEG: tag 0x3234504d/'MP42' is not supported with codec id 15 and format 'mp4 / MP4 (MPEG-4 Part 14)'
[mp4 @ 0x16bc700] Could not find tag for codec msmpeg4v2 in stream #0, codec not currently supported in container
我试图改变FOURCC在这部分代码写的视频,并应用XVID,MJPG,X264,MP42,MP4V.没有工作,抛出类似的错误.
问题是什么?如何解决?
4条答案
按热度按时间5q4ezhmt1#
我基本上把"mp4v“换成了”mp4v",解决了这个问题。看起来API是大小写敏感的。
oyjwcjzk2#
对于由于相同错误而滞留在这里的任何人,要将帧写入
.mp4
输出文件,请使用这些字符作为参数:或
在你的代码中尝试替换
与
我在这个GitHub评论的帮助下解决了我的问题。
如果没有帮助,请考虑NVIDIA forum的这篇文章,并直接在
cv2.VideoWriter()
中插入ASCII数字,而不是像这样使用cv2.VideoWriter_fourcc()
:zzlelutf3#
我通过安装ffmpeg修复了macOS上的类似问题:
macOS:
Ubuntu:
kokeuurv4#
您必须使用**
'a', 'v', 'c', '1'
**(avc1
)来请求H.264。ffmpeg认为“H264”在MP4容器中是无效的fourcc。
mp4v
不是H.264。mp4v
是以前的压缩标准,由DivX/XviD实现。