From 04448df10156b4bad3376060bedb97f3b5b87321 Mon Sep 17 00:00:00 2001 From: Roz K Date: Sat, 4 Oct 2025 14:52:27 +0200 Subject: [PATCH] codec struct --- pve.py | 4 ++-- pyav/codec.py | 13 +++++++++++++ pyav/libav.py | 13 ++++++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/pve.py b/pve.py index 4719812..fa60253 100644 --- a/pve.py +++ b/pve.py @@ -22,8 +22,8 @@ from pyav.decoder import Decoder demuxer = Demuxer('test.mp4') print(f"nb_streams = {demuxer.nb_streams}") -print(f"video codec = {demuxer.video_stream.codec.name}") -print(f"audio codec = {demuxer.audio_stream.codec.name}") +print(f"video codec = {demuxer.video_stream.codec.description()}") +print(f"audio codec = {demuxer.audio_stream.codec.description()}") video_decoder = Decoder(demuxer.video_stream) audio_decoder = Decoder(demuxer.audio_stream) diff --git a/pyav/codec.py b/pyav/codec.py index df4b723..50c68a9 100644 --- a/pyav/codec.py +++ b/pyav/codec.py @@ -27,3 +27,16 @@ class Codec: @property def name(self): return self._ref.contents.name.decode("utf-8") + + @property + def long_name(self): + return self._ref.contents.long_name.decode("utf-8") + + @property + def wrapper_name(self): + if self._ref.contents.wrapper_name is not None: + return self._ref.contents.wrapper_name.decode("utf-8") + return "" + + def description(self): + return f"{self.name} / {self.long_name} / {self.wrapper_name}" diff --git a/pyav/libav.py b/pyav/libav.py index 78e05ff..bb8562b 100644 --- a/pyav/libav.py +++ b/pyav/libav.py @@ -126,7 +126,18 @@ AVPacket_pp = ctypes.POINTER(AVPacket_p) class AVCodec(ctypes.Structure): _fields_ = [ ("name", ctypes.c_char_p), - ("long_name", ctypes.c_char_p)] + ("long_name", ctypes.c_char_p), + ("type", ctypes.c_int), # AVMediaType + ("id", ctypes.c_int), # AVCodecID + ("capabilities", ctypes.c_int), # AV_CODEC_CAP_* + ("max_lowres", ctypes.c_uint8), + ("deprecated_supported_framerates", ctypes.c_void_p), + ("deprecated_pix_fmts", ctypes.c_void_p), + ("deprecated_supported_samplerates", ctypes.c_void_p), + ("deprecated_sample_fmts", ctypes.c_void_p), + ("priv_class", ctypes.c_void_p), + ("profiles", ctypes.c_void_p), # AVProfile + ("wrapper_name", ctypes.c_char_p)] # ... AVCodec_p = ctypes.POINTER(AVCodec)