xaf
XAF (X Animation Format) — 基于 Cinepak 编码的轻量级视频容器格式。解码器纯 C99 实现,约 540 行,零外部依赖。
二进制格式
所有多字节整数采用小端序 (Little-Endian)。
文件头 (16 bytes)
| 偏移 | 大小 | 字段 | 说明 |
|---|---|---|---|
| 0 | 4 | magic | XAF\0 |
| 4 | 2 | width | 帧宽度 (LE16) |
| 6 | 2 | height | 帧高度 (LE16) |
| 8 | 4 | nframes | 总帧数 (LE32) |
| 12 | 1 | fps | 帧率 (1-255) |
| 13 | 3 | reserved | 0x000000 |
帧数据
每帧: [data_len:U32][Cinepak 帧数据]
Cinepak 帧数据为 ffmpeg Cinepak 编码器输出的原始码流(含 10 字节帧头 + strip 数据),每帧均为独立可解码的关键帧或帧间差分帧。
编码工具
使用 Python 脚本将任意视频转换为 XAF 格式。
ffmpeg2xaf.py
通过 ffmpeg 子进程调用 Cinepak 编码器,以 AVI 为中间容器提取帧数据。
tools/ffmpeg2xaf.py video.mp4
tools/ffmpeg2xaf.py video.mp4 -o output.xaf -f 24 -w 320 -H 240
依赖:ffmpeg
pyav2xaf.py
通过 PyAV 直接调用 Cinepak 编码器,无中间容器,无 ffmpeg 子进程。
tools/pyav2xaf.py video.mp4
tools/pyav2xaf.py video.mp4 -o output.xaf -f 24 -w 320 -H 240
依赖:PyAV (pip install av)
编码选项
| 选项 | 说明 |
|---|---|
-o, --output | 输出文件(默认 <输入>.xaf) |
-f, --fps | 帧率 |
-w, --width | 输出宽度 |
-H, --height | 输出高度 |