Containers

Generic

class av.container.Container

Bases: object

options
container_options
stream_options
metadata_encoding
metadata_errors
open_timeout
read_timeout

Flags

av.container.Container.flags
class av.container.Flags

Wraps AVFormatContext.flags.

Container Attribute

Flags Name

Flag Value

Meaning in FFmpeg

gen_pts

GENPTS

0x1

Generate missing pts even if it requires parsing future frames.

ign_idx

IGNIDX

0x2

Ignore index.

non_block

NONBLOCK

0x4

Do not block when reading packets from input.

ign_dts

IGNDTS

0x8

Ignore DTS on frames that contain both DTS & PTS.

no_fill_in

NOFILLIN

0x10

Do not infer any values from other values, just return what is stored in the container.

no_parse

NOPARSE

0x20

Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled.

no_buffer

NOBUFFER

0x40

Do not buffer frames when possible.

custom_io

CUSTOM_IO

0x80

The caller has supplied a custom AVIOContext, don’t avio_close() it.

discard_corrupt

DISCARD_CORRUPT

0x100

Discard frames marked corrupted.

flush_packets

FLUSH_PACKETS

0x200

Flush the AVIOContext every packet.

bit_exact

BITEXACT

0x400

When muxing, try to avoid writing any random/volatile data to the output. This includes any random IDs, real-time timestamps/dates, muxer version, etc. This flag is mainly intended for testing.

mp4a_latm

MP4A_LATM

0x8000

Enable RTP MP4A-LATM payload

sort_dts

SORT_DTS

0x10000

Try to interleave outputted packets by dts (using this flag can slow demuxing down).

priv_opt

PRIV_OPT

0x20000

Enable use of private options by delaying codec open (this could be made default once all code is converted).

keep_side_data

KEEP_SIDE_DATA

0x40000

Deprecated, does nothing.

fast_seek

FAST_SEEK

0x80000

Enable fast, but inaccurate seeks for some formats.

shortest

SHORTEST

0x100000

Stop muxing when the shortest stream stops.

auto_bsf

AUTO_BSF

0x200000

Add bitstream filters as requested by the muxer.

Input Containers

class av.container.InputContainer

Bases: av.container.core.Container

bit_rate
close()
decode(streams=None, video=None, audio=None, subtitles=None, data=None)

Yields a series of Frame from the given set of streams:

for frame in container.decode():
    # Do something with `frame`.

See also

StreamContainer.get() for the interpretation of the arguments.

demux(streams=None, video=None, audio=None, subtitles=None, data=None)

Yields a series of Packet from the given set of Stream:

for packet in container.demux():
    # Do something with `packet`, often:
    for frame in packet.decode():
        # Do something with `frame`.

See also

StreamContainer.get() for the interpretation of the arguments.

Note

The last packets are dummy packets that when decoded will flush the buffers.

duration
seek(offset, *, backward=True, any_frame=False, stream=None)

Seek to a (key)frame nearsest to the given timestamp.

Parameters
  • offset (int) – Time to seek to, expressed in``stream.time_base`` if stream is given, otherwise in av.time_base.

  • backward (bool) – If there is not a (key)frame at the given offset, look backwards for it.

  • any_frame (bool) – Seek to any frame, not just a keyframe.

  • stream (Stream) – The stream who’s time_base the offset is in.

  • unsupported_frame_offset (bool) – offset is a frame index instead of a time; not supported by any known format.

  • unsupported_byte_offset (bool) – offset is a byte location in the file; not supported by any known format.

After seeking, packets that you demux should correspond (roughly) to the position you requested.

In most cases, the defaults of backwards = True and any_frame = False are the best course of action, followed by you demuxing/decoding to the position that you want. This is becase to properly decode video frames you need to start from the previous keyframe.

See also

avformat_seek_file for discussion of the flags.

size
start_time

Output Containers

class av.container.OutputContainer

Bases: av.container.core.Container

add_stream(codec_name, rate=None)

Create a new stream, and return it.

Parameters
  • codec_name (str) – The name of a codec.

  • rate – The frame rate for video, and sample rate for audio. Examples for video include 24, 23.976, and Fraction(30000,1001). Examples for audio include 48000 and 44100.

Returns

The new Stream.

close()
mux(packets)
mux_one(Packet packet)
start_encoding()

Write the file header! Called automatically.

Formats

class av.format.ContainerFormat

Bases: object

Descriptor of a container format.

Parameters
  • name (str) – The name of the format.

  • mode (str) – 'r' or 'w' for input and output formats; defaults to None which will grab either.

ContainerFormat.name
ContainerFormat.long_name
ContainerFormat.options
ContainerFormat.input

An input-only view of this format.

ContainerFormat.output

An output-only view of this format.

ContainerFormat.is_input
ContainerFormat.is_output
ContainerFormat.extensions

Flags

ContainerFormat.flags
class av.format.Flags

Bases: av.enum.EnumFlag

ContainerFormat Attribute

Flags Name

Flag Value

Meaning in FFmpeg

no_file

NOFILE

0x1

-

need_number

NEEDNUMBER

0x2

Needs ‘%d’ in filename.

show_ids

SHOW_IDS

0x8

Show format stream IDs numbers.

global_header

GLOBALHEADER

0x40

Format wants global header.

no_timestamps

NOTIMESTAMPS

0x80

Format does not need / have any timestamps.

generic_index

GENERIC_INDEX

0x100

Use generic index building code.

ts_discont

TS_DISCONT

0x200

Format allows timestamp discontinuities. Note, muxers always require valid (monotone) timestamps

variable_fps

VARIABLE_FPS

0x400

Format allows variable fps.

no_dimensions

NODIMENSIONS

0x800

Format does not need width/height

no_streams

NOSTREAMS

0x1000

Format does not require any streams

no_bin_search

NOBINSEARCH

0x2000

Format does not allow to fall back on binary search via read_timestamp

no_gen_search

NOGENSEARCH

0x4000

Format does not allow to fall back on generic search

no_byte_seek

NO_BYTE_SEEK

0x8000

Format does not allow seeking by bytes

allow_flush

ALLOW_FLUSH

0x10000

Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function.

ts_nonstrict

TS_NONSTRICT

0x20000

Format does not require strictly increasing timestamps, but they must still be monotonic.

ts_negative

TS_NEGATIVE

0x40000

Format allows muxing negative timestamps. If not set the timestamp will be shifted in av_write_frame and av_interleaved_write_frame so they start from 0. The user or muxer can override this through AVFormatContext.avoid_negative_ts

seek_to_pts

SEEK_TO_PTS

0x4000000

Seeking is based on PTS