OpenCV:如何获取可用编解码器列表?

问题描述 投票:0回答:2

如何获取当前系统上可用的编解码器列表,即据我所知,当编解码器不可用时,cv2.VideoWriter 可能会失败。 默认使用什么编解码器?

不确定它是否适用于所有情况,但似乎 opencv 回退到

mp4v
编解码器作为默认消息:
OpenCV: FFMPEG: fallback to use tag 0x7634706d/'mp4v'

还要添加新的编解码器,我们是否需要重建 opencv,或者我们可以通过类似

ffmpeg
?
 的方式安装额外的编解码器\更新
apt get

linux opencv ffmpeg codec
2个回答
1
投票

这里FOURCC的视频编解码器列表。你可以在那里得到你需要的字符格式。

如文档所述:

构造函数/函数初始化视频编写器。在 Linux FFMPEG 上 用于写视频;在 Windows 上使用 FFMPEG 或 VFW;在 MacOSX 上 使用QTKit。

OpenCV 使用 FFMPEG 支持(对于您的情况下的 linux)来编写视频,因此正如@Mark Setchell 在评论中提到的那样,您可以通过以下命令获得 ffmpeg 支持的编解码器格式:

ffmpeg -codecs

0
投票

没有办法在 OpenCV 中实际枚举可用的 fourcc 编解码器。

这很不幸,因为由于许可问题,OpenCV 编解码器包装在分销商之间有所不同。在这里可以看到:OpenCV video writer unable to find codec or "avc1"

isOpened()
上使用
VideoWriter
告诉您编码器是否可以成功初始化。

我问的一个聊天机器人提出了一段有趣的代码来暴力破解所有 fourcc 排列。运行这个需要一些时间:

import cv2

def test_fourcc(codec):
    try:
        fourcc = cv2.VideoWriter_fourcc(*codec)
        temp_video = cv2.VideoWriter('temp.avi', fourcc, 30, (640, 480), isColor=True)
        return temp_video.isOpened()
    except:
        return False

def enumerate_fourcc_codecs():
    available_codecs = []
    for i in range(32, 127):
        for j in range(32, 127):
            for k in range(32, 127):
                for l in range(32, 127):
                    codec = chr(i) + chr(j) + chr(k) + chr(l)
                    if test_fourcc(codec):
                        available_codecs.append(codec)
    return available_codecs

if __name__ == "__main__":
    codecs = enumerate_fourcc_codecs()
    print("Available FourCC codecs:")
    for codec in codecs:
        print(codec)

可以使用现有的 fourccs 列表使这段代码更清晰,可以从另一个城堡中检索它。

© www.soinside.com 2019 - 2024. All rights reserved.