Codecs ====== Descriptors ----------- .. currentmodule:: av.codec .. automodule:: av.codec .. autoclass:: Codec .. automethod:: Codec.create .. autoattribute:: Codec.is_decoder .. autoattribute:: Codec.is_encoder .. autoattribute:: Codec.name .. autoattribute:: Codec.long_name .. autoattribute:: Codec.type .. autoattribute:: Codec.id .. autoattribute:: Codec.frame_rates .. autoattribute:: Codec.audio_rates .. autoattribute:: Codec.video_formats .. autoattribute:: Codec.audio_formats Flags ~~~~~ .. autoattribute:: Codec.properties .. autoclass:: Properties Wraps :ffmpeg:`AVCodecDescriptor.props` (``AV_CODEC_PROP_*``). .. autoattribute:: Codec.capabilities .. autoclass:: Capabilities Wraps :ffmpeg:`AVCodec.capabilities` (``AV_CODEC_CAP_*``). Note that ``ffmpeg -codecs`` prefers the properties versions of ``INTRA_ONLY`` and ``LOSSLESS``. Pixel Format Selection ---------------------- .. autofunction:: find_best_pix_fmt_of_list .. autoclass:: PixFmtLoss Wraps FFmpeg's ``FF_LOSS_*`` flags. Returned by :func:`find_best_pix_fmt_of_list` to describe what is lost when converting from the source pixel format to the chosen one. Being an :class:`enum.IntFlag`, members can be combined and tested with bitwise operators. Contexts -------- .. currentmodule:: av.codec.context .. automodule:: av.codec.context .. autoclass:: CodecContext .. autoattribute:: CodecContext.codec .. autoattribute:: CodecContext.options .. autoattribute:: CodecContext.supported_options .. autoclass:: CodecOptionSet .. autoclass:: CodecOption .. autoclass:: CodecOptionChoice .. autoclass:: OptionType .. autoclass:: OptionFlags .. automethod:: CodecContext.create .. automethod:: CodecContext.open Attributes ~~~~~~~~~~ .. autoattribute:: CodecContext.is_open .. autoattribute:: CodecContext.is_encoder .. autoattribute:: CodecContext.is_decoder .. autoattribute:: CodecContext.name .. autoattribute:: CodecContext.type .. autoattribute:: CodecContext.profile .. autoattribute:: CodecContext.time_base .. autoattribute:: CodecContext.bit_rate .. autoattribute:: CodecContext.bit_rate_tolerance .. autoattribute:: CodecContext.max_bit_rate .. autoattribute:: CodecContext.thread_count .. autoattribute:: CodecContext.thread_type .. autoattribute:: CodecContext.skip_frame .. autoattribute:: CodecContext.extradata .. autoattribute:: CodecContext.extradata_size Transcoding ~~~~~~~~~~~ .. automethod:: CodecContext.parse .. automethod:: CodecContext.encode .. automethod:: CodecContext.decode .. automethod:: CodecContext.flush_buffers Enums and Flags ~~~~~~~~~~~~~~~ .. autoattribute:: CodecContext.flags .. autoclass:: av.codec.context.Flags .. enumtable:: av.codec.context:Flags :class: av.codec.context:CodecContext .. autoattribute:: CodecContext.flags2 .. autoclass:: av.codec.context.Flags2 .. enumtable:: av.codec.context:Flags2 :class: av.codec.context:CodecContext .. autoclass:: av.codec.context.ThreadType Which multithreading methods to use. Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, so clients which cannot provide future frames should not use it. .. enumtable:: av.codec.context.ThreadType Hardware Acceleration --------------------- .. currentmodule:: av.codec.hwaccel .. automodule:: av.codec.hwaccel .. autoclass:: HWAccel .. autofunction:: hwdevices_available To decode on a hardware device, pass an :class:`HWAccel` to :func:`av.open`:: import av from av.codec.hwaccel import HWAccel hwaccel = HWAccel(device_type="videotoolbox") with av.open("input.mp4", hwaccel=hwaccel) as container: for frame in container.decode(video=0): ... # Frames are downloaded to system memory by default. To encode on a hardware device, pass one to :meth:`OutputContainer.add_stream ` with a hardware encoder. Software frames passed to ``encode`` are uploaded to the device automatically:: with av.open("output.mp4", "w") as container: stream = container.add_stream( "h264_videotoolbox", rate=30, hwaccel=HWAccel(device_type="videotoolbox") ) ... See ``examples/basics/hw_decode.py`` for a complete example, including recommended device types per platform.