from enum import Flag, IntEnum from fractions import Fraction from typing import ClassVar, Literal, Sequence, cast, overload from av.audio.codeccontext import AudioCodecContext from av.audio.format import AudioFormat from av.descriptor import Descriptor from av.subtitles.codeccontext import SubtitleCodecContext from av.video.codeccontext import VideoCodecContext from av.video.format import VideoFormat from .context import CodecContext class Properties(Flag): NONE = cast(ClassVar[Properties], ...) INTRA_ONLY = cast(ClassVar[Properties], ...) LOSSY = cast(ClassVar[Properties], ...) LOSSLESS = cast(ClassVar[Properties], ...) REORDER = cast(ClassVar[Properties], ...) BITMAP_SUB = cast(ClassVar[Properties], ...) TEXT_SUB = cast(ClassVar[Properties], ...) class Capabilities(IntEnum): none = cast(int, ...) draw_horiz_band = cast(int, ...) dr1 = cast(int, ...) hwaccel = cast(int, ...) delay = cast(int, ...) small_last_frame = cast(int, ...) hwaccel_vdpau = cast(int, ...) subframes = cast(int, ...) experimental = cast(int, ...) channel_conf = cast(int, ...) neg_linesizes = cast(int, ...) frame_threads = cast(int, ...) slice_threads = cast(int, ...) param_change = cast(int, ...) auto_threads = cast(int, ...) variable_frame_size = cast(int, ...) avoid_probing = cast(int, ...) hardware = cast(int, ...) hybrid = cast(int, ...) encoder_reordered_opaque = cast(int, ...) encoder_flush = cast(int, ...) encoder_recon_frame = cast(int, ...) class UnknownCodecError(ValueError): ... class Codec: @property def is_encoder(self) -> bool: ... @property def is_decoder(self) -> bool: ... @property def mode(self) -> Literal["r", "w"]: ... descriptor: Descriptor @property def name(self) -> str: ... @property def canonical_name(self) -> str: ... @property def long_name(self) -> str: ... @property def type(self) -> Literal["video", "audio", "data", "subtitle", "attachment"]: ... @property def id(self) -> int: ... frame_rates: list[Fraction] | None audio_rates: list[int] | None video_formats: list[VideoFormat] | None audio_formats: list[AudioFormat] | None @property def properties(self) -> int: ... @property def intra_only(self) -> bool: ... @property def lossy(self) -> bool: ... @property def lossless(self) -> bool: ... @property def reorder(self) -> bool: ... @property def bitmap_sub(self) -> bool: ... @property def text_sub(self) -> bool: ... @property def capabilities(self) -> int: ... @property def experimental(self) -> bool: ... @property def delay(self) -> bool: ... def __init__(self, name: str, mode: Literal["r", "w"] = "r") -> None: ... @overload def create(self, kind: Literal["video"]) -> VideoCodecContext: ... @overload def create(self, kind: Literal["audio"]) -> AudioCodecContext: ... @overload def create(self, kind: Literal["subtitle"]) -> SubtitleCodecContext: ... @overload def create(self, kind: None = None) -> CodecContext: ... @overload def create( self, kind: Literal["video", "audio", "subtitle"] | None = None ) -> ( VideoCodecContext | AudioCodecContext | SubtitleCodecContext | CodecContext ): ... class codec_descriptor: name: str options: tuple[int, ...] codecs_available: set[str] def dump_codecs() -> None: ... def dump_hwconfigs() -> None: ... PixFmtLike = str | VideoFormat def find_best_pix_fmt_of_list( pix_fmts: Sequence[PixFmtLike], src_pix_fmt: PixFmtLike, has_alpha: bool = False, ) -> tuple[VideoFormat | None, int]: """ Find the best pixel format to convert to given a source format. Wraps :ffmpeg:`avcodec_find_best_pix_fmt_of_list`. :param pix_fmts: Iterable of pixel formats to choose from (str or VideoFormat). :param src_pix_fmt: Source pixel format (str or VideoFormat). :param bool has_alpha: Whether the source alpha channel is used. :return: (best_format, loss): best_format is the best matching pixel format from the list, or None if no suitable format was found; loss is Combination of flags informing you what kind of losses will occur. :rtype: (VideoFormat | None, int) Note on loss: it is a bitmask of FFmpeg loss flags describing what kinds of information would be lost converting from src_pix_fmt to best_format (e.g. loss of alpha, chroma, colorspace, resolution, bit depth, etc.). Multiple losses can be present at once, so the value is meant to be interpreted with bitwise & against FFmpeg's FF_LOSS_* constants. For exact behavior see: libavutil/pixdesc.c/get_pix_fmt_score() in ffmpeg source code. """ ...