【问题标题】:OpenCV: FFMPEG: tag is not supported with codec id 12 and format 'mp4 / MP4OpenCV:FFMPEG:编解码器 id 12 和格式不支持标记 'mp4 / MP4
【发布时间】:2020-01-07 14:37:57
【问题描述】:

我试图运行位于HERE 的存储库。基本上,只针对使用 OpenCV 进行一些基本视频处理的 SimpleVideoSummarizer.cc。我正在使用 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。没有任何工作并引发类似的错误。

有什么问题?如何解决?

【问题讨论】:

  • OpenCV 看起来对哪些编解码器可以在哪些容器中使用很挑剔。所以 XVID 必须进入 AVI 格式,即使 ffmpeg 允许。
  • @Gyan 是的,它成功了!那么.mp4 容器应该搭配什么编解码器呢?
  • 'H','2','6','4'

标签: c++ opencv ffmpeg mp4 fourcc


【解决方案1】:

我基本上用“mp4v”替换了“MP4V”并解决了这个问题。 API似乎区分大小写。

【讨论】:

    【解决方案2】:

    我通过安装 ffmpeg 修复了 macOS 上的类似问题:

    macOS:

    brew install ffmpeg
    

    Ubuntu:

    sudo apt install ffmpeg
    

    【讨论】:

      猜你喜欢
      • 2019-03-26
      • 2017-06-08
      • 2016-03-14
      • 2012-08-23
      • 1970-01-01
      • 2013-12-02
      • 2021-09-15
      • 2018-10-15
      • 2023-03-23
      相关资源
      最近更新 更多