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

jhiyze9q  于 2023-05-06  发布在  Linux
关注(0)|答案(2)|浏览(168)

如何获取当前系统上可用的编解码器列表,即据我所知,当编解码器不可用时,cv2.VideoWriter可能会失败。默认情况下使用什么编解码器?
不确定是否适用于所有情况,但似乎opencv默认回退到mp4v编解码器,并显示消息:OpenCV: FFMPEG: fallback to use tag 0x7634706d/'mp4v'
另外,为了添加新的编解码器,我们需要重建opencv,或者我们可以通过类似apt get的东西安装额外的编解码器\更新ffmpeg

k4aesqcs

k4aesqcs1#

HereFOURCC的视频编解码器列表。你可以在那里得到你需要的char格式。
正如文档所述:
构造器/函数初始化视频写入器。在Linux上,FFMPEG用于编写视频;在Windows上使用FFMPEG或VFW;在MacOSX上使用QTKit。
OpenCV使用FFMPEG支持(在您的情况下用于Linux)来编写视频,以便@Mark Setchell在评论中提到,您可以通过命令获得ffmpeg支持的编解码器格式:

ffmpeg -codecs
x759pob2

x759pob22#

在OpenCV中没有办法实际枚举可用的fourcc编解码器。
这是非常不幸的,因为由于许可问题,OpenCV编解码器的 Package 在发行商之间是不同的。如图所示:OpenCV video writer unable to find codec or "avc1"
VideoWriter上使用isOpened()可以告诉您编码器是否可以成功初始化。
有了一个给定的fourcc编解码器列表,你可以这样做:

import cv2
from pprint import pprint

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

def enumerate_fourcc_codecs():
    codecs_to_test = ["DIVX", "XVID", "MJPG", "X264", "WMV1", "WMV2", "FMP4",
                      "mp4v", "avc1", "I420", "IYUV", "mpg1", "H264"]
    available_codecs = []
    for codec in codecs_to_test:
        available_codecs.append((codec, is_fourcc_available(codec)))
    return available_codecs

if __name__ == "__main__":
    codecs = enumerate_fourcc_codecs()
    print("Available FourCC codecs:")
    pprint(codecs)

一个现有的,但可能大多数不受支持的fourcc的广泛列表可以从OpenCV文档的链接中检索:https://web.archive.org/web/20220316062600/http://www.fourcc.org/codecs.php

相关问题