video

this module provides the video codec interface. Encoders, Decoders and their support code.

class pyrana.video.Decoder(input_codec, params=None)

Decodes video Packets into video Frames.

decode(packets)

Decode data from a logical stream of packets, and returns when the first next frame is available. The input stream can be - a materialized sequence of packets (list, tuple...) - a generator (e.g. Demuxer.stream()).

decode_packet(packet)

Generator method. Decode a single packet (as in returned by a Demuxer) and extracts all the frames encoded into it. An encoded packet can legally contain more than one frame, altough this is not so common. This method deals with the [one packet -> many frames] scenario. The internal underlying decoder does its own buffer, so you can freely dispose the packet(s) fed into this method after it exited. raises ProcessingError if decoding fails; raises NeedFeedError if decoding partially succeeds, but more data is needed to reconstruct a full frame.

extra_data

bytearray-like, read-write

flush()

emits all frames that can be recostructed by the data buffered into the Decoder, and empties such buffers. Call it last, do not intermix with decode*() calls. caution: more than one frame can be buffered. Raises NeedFeedError if all the internal buffers are empty.

classmethod from_cdata(ctx)

builds a pyrana Video Decoder from (around) a (cffi-wrapped) libav* (video)decoder object. The libav object must be already initialized and ready to go. WARNING: raw access. Use with care.

media_type

the codec media type.

open(ffh=None)

opens the codec into the codec context.

params

the codec parameters.

ready

is the codec readu to go?

setup()

Dispach the given parameters to the internal (FFmpeg) data structures.

static wire(dec)

wire up the Decoder. See codec.wire_decoder

class pyrana.video.Encoder(output_codec, params)

Encode video Frames into Packets.

encode(frame)

Encode a logical frame in one or possibly more)packets, and return an iterable which will yield all the packets produced.

extra_data

bytearray-like, read-write

flush()

emits all packets which may have been buffered by the Encoder and empties such buffers. Call it last, do not intermix with encode*() calls. caution: more than one encoded frame (thus many packets) can be buffered. Raises NeedFeedError if all the internal buffers are empty.

classmethod from_cdata(ctx, params, codec=None)

builds a pyrana video Encoder from (around) a (cffi-wrapped) liabv* (audio) context. WARNING: raw access. Use with care.

media_type

the codec media type.

open(ffh=None)

opens the codec into the codec context.

params

the codec parameters.

ready

is the codec readu to go?

setup()

Dispach the given parameters to the internal (FFmpeg) data structures.

static wire(enc)

wire up the Encoder. See codec.wire_encoder

class pyrana.video.Frame(width, height, pixfmt)

A Video frame.

asr

The sample aspect ratio of the frame.

cdata

Direct access to the internal C AVFrame object.

coded_pict_number

Picture number in bitstream order.

display_pict_number

Picture number in display order.

classmethod from_cdata(ppframe)

builds a pyrana generic Base Frame from (around) a (cffi-wrapped) libav* AVFrame object. The libav object must be already initialized and ready to go. WARNING: raw access. Use with care.

image(pixfmt=None)

Returns a new Image object which provides access to the Picture (thus the pixel as bytes()) data.

is_interlaced

Is the content of the picture interlaced?

is_key

Is this a key frame?

pict_type

Picture type of the frame, see AVPictureType.

pts

The Presentation TimeStamp of this Frame.

top_field_first

If is_interlaced(), is top field displayed first?

class pyrana.video.Image

Represents the Picture data inside a Frame.

blob()

returns the bytes() dump of the object.

convert(pixfmt)

convert the Image data in a new PixelFormat. returns a brand new, independent Image.

classmethod from_cdata(ppframe, sws=None, parent=None)

builds a pyrana Image from a (cffi-wrapped) libav* Frame object. The Picture data itself will still be hold in the Frame object. The libav object must be already initialized and ready to go. WARNING: raw access. Use with care.

height

Frame height. Expected to be always equal to the stream height.

is_shared

Is the underlying C-Frame shared with the parent py-Frame?

pixel_format

Frame pixel format. Expected to be always equal to the stream pixel format.

plane(idx)

Read-only byte access to a single plane of the Image.

planes

Return the number of planes in the Picture data. e.g. RGB: 1; YUV420: 3

width

Frame width. Expected to be always equal to the stream width.

class pyrana.video.SWSMode

SWS operational flags. This wasn’t a proper enum, rather a collection of #defines, and that’s the reason why it is defined here.

pyrana.video.fill_yuv420p(frame, i)

fill a video frame with a test pattern.