Introduction
IVF is a very simple file for a single stream of compressed video, written by the reference encoders of the VP8, VP9 and AV1 codecs. It wraps each frame with its size and timestamp and nothing more: there is no audio and no index. IVF files are used to test encoders and decoders and to exchange raw VP8, VP9 and AV1 streams.
Structure
The file starts with a 32-byte header. All numbers are little-endian. The header holds
the signature DKIF, a 16-bit version (0), the 16-bit header length (32),
a four-character codec code such as VP80, VP90 or
AV01, the width and height in pixels, the time base as two 32-bit
numbers, and the number of frames.
Each frame follows with a 12-byte frame header, a 32-bit frame size and a 64-bit timestamp in time base units, then the frame data.
0SignatureDKIF4 bytes4Version and header length4 bytes8CodecVP80,VP90orAV014 bytes12Width and height4 bytes16Time base and frame count, then unused bytes16 bytes32Frame size, timestamp, then the frame data12 bytes + data
Links
Software
- FFmpeg and ffplay (Windows, macOS, Linux)
- mpv (Windows, macOS, Linux)
- libvpx tools, the VP8 and VP9 reference encoder and decoder
- libaom tools, the AV1 reference encoder and decoder
Developers
- libavformat, C, FFmpeg’s container library
- dav1d, C, an AV1 decoder whose tool reads IVF