Pictures, games & sound

Wedeo

Port FFmpeg behavior to Rust and compare the decoded bytes.

Recorded result

Explore the example
From the example below.

Why I’m interested

FFmpeg is a demanding reference for an AI-directed Rust rewrite because the output gives you a concrete way to judge the work. A decoded image can look right while its bytes differ. I want the port to preserve the behavior behind the picture, and byte-for-byte comparisons make that goal measurable.

Progress

The Rust CLI decoded three synthetic H.264 frames with the same checksums and all 4,608 raw bytes as FFmpeg. The wider port contains codec implementation work beyond this example. The page shows the three decoded frames and their reference checksums.

Three frames, two decoders

Give Wedeo and FFmpeg the same synthetic H.264 input, then compare each decoded frame's checksum.

Choose an example

A 32 × 32 synthetic H.264 frame

Both decoders produced the same raw YUV bytes. The PNG displays Wedeo's decoded output, while the checksums compare the bytes behind it.

A 32 × 32 synthetic H.264 frame
Frame bytes
1536
Frame checksum
0xf1b9e679
Reference
Equal

Result

Wedeo: 0xf1b9e679
FFmpeg: 0xf1b9e679
Format: YUV420p
Dimensions: 32 × 32

A 32 × 32 synthetic H.264 frame

Both decoders produced the same raw YUV bytes. The PNG displays Wedeo's decoded output, while the checksums compare the bytes behind it.

A 32 × 32 synthetic H.264 frame
Frame bytes
1536
Frame checksum
0x429be54f
Reference
Equal

Result

Wedeo: 0x429be54f
FFmpeg: 0x429be54f
Format: YUV420p
Dimensions: 32 × 32

A 32 × 32 synthetic H.264 frame

Both decoders produced the same raw YUV bytes. The PNG displays Wedeo's decoded output, while the checksums compare the bytes behind it.

A 32 × 32 synthetic H.264 frame
Frame bytes
1536
Frame checksum
0x5566e611
Reference
Equal

Result

Wedeo: 0x5566e611
FFmpeg: 0x5566e611
Format: YUV420p
Dimensions: 32 × 32

This native comparison uses baseline H.264 with three intra frames. The complete 4,608-byte YUV output matches FFmpeg. The next comparison adds another decoder fixture.

What comes next

Add a second decoder fixture and compare its raw output with FFmpeg.

Implementation and credits

How do the Rust decoder and FFmpeg compare on the same input?

Three synthetic H.264 frames pass through the native Wedeo and FFmpeg decoders. Their raw YUV output matches byte for byte.

Select a decoded frame and compare its checksum with the FFmpeg reference.

The native Rust CLI supplies the decoded output. Rust and Askama publish the frames and checksums.

Human-directed, AI-generated port based on FFmpeg references.

Back to the collection