| # WebCodecs Test Files |
| |
| [TOC] |
| |
| ## Instructions |
| |
| To add, update or remove a test file, please update the list below. |
| |
| Please provide full reference and steps to generate the test file so that |
| anybody can regenerate or update the file in the future. |
| |
| ## Notes |
| * When updating the sample offsets and descriptions for tests using mp4 files, it's easiest to use [mp4box.js](https://gpac.github.io/mp4box.js/test/filereader.html). |
| * Sample offsets can be copied from the "Sample View" tab after unchecking all but offset and size. Use a multi-line edit mode and clang-format to quickly format entries. |
| * Description entries can be found under moov.trak.mdia.minf.stbl.stsd in box view. |
| * avc1.avcC or hvc1.hvcC has an offset, size in the same view. Add 8 to offset and subtract 8 from the size to get the values the tests want. |
| * If you use ffprobe -show_packets to get sample offsets, you may need to add 4 to each `pos` value. You can tell if you need to by whether or not tests pass. |
| |
| ## List of Test Files |
| |
| ### four-colors.png |
| Generated using MSPaint like a true professional. |
| |
| ### four-colors.avif |
| Lossless encoding must be used to ensure colors are perfect. |
| ``` |
| avifenc -l four-colors.png -o four-colors.avif |
| ``` |
| |
| ### four-colors.webp |
| Lossless encoding must be used to ensure colors are perfect. |
| ``` |
| ffmpeg -i four-colors.png -lossless 1 -y four-colors.webp |
| ``` |
| |
| ### four-colors-limited-range-420-8bpc.webp |
| ``` |
| ffmpeg -i four-colors.png -pix_fmt yuv420p four-colors-limited-range-420-8bpc.webp |
| ``` |
| |
| ### four-colors.gif |
| High quality encoding must be used to ensure colors are perfect. |
| ``` |
| cp four-colors.png four-colors2.png |
| gifski -o four-colors.gif four-colors*.png |
| ``` |
| |
| ### four-colors-flip.gif |
| High quality encoding must be used to ensure colors are perfect. |
| ``` |
| ffmpeg -i four-colors.png -vf "rotate=PI" four-colors2.png |
| gifski -o four-colors-flip.gif four-colors*.png |
| ``` |
| |
| ### four-colors-flip.avif |
| ``` |
| ffmpeg -i four-colors-flip.gif -crf 16 four-colors-flip.avif |
| ``` |
| |
| ### four-colors-limited-range-(420|422|444)-8bpc.avif |
| ``` |
| avifenc -r l -d 8 -y 420 -s 0 four-colors.png four-colors-limited-range-420-8bpc.avif |
| avifenc -r l -d 8 -y 422 -s 0 four-colors.png four-colors-limited-range-422-8bpc.avif |
| avifenc -r l -d 8 -y 444 -s 0 four-colors.png four-colors-limited-range-444-8bpc.avif |
| ``` |
| |
| ### four-colors-full-range-bt2020-pq-444-10bpc.avif |
| ``` |
| avifenc -r f -d 10 -y 444 -s 0 --nclx 9/16/9 four-colors.png four-colors-full-range-bt2020-pq-444-10bpc.avif |
| ``` |
| |
| ### four-colors.jpg |
| Used [Sqoosh.app](https://squoosh.app/) with MozJPEG compression and RGB |
| channels. exiftool was then used to add an orientation marker. |
| ``` |
| exiftool -Orientation=1 -n four-colors.jpg |
| ``` |
| |
| ### four-colors-limited-range-420-8bpc.jpg |
| Used [Sqoosh.app](https://squoosh.app/) with MozJPEG compression and YUV |
| channels. exiftool was then used to add an orientation marker. |
| ``` |
| exiftool -Orientation=1 -n four-colors-limited-range-420-8bpc.jpg |
| ``` |
| |
| ### four-colors.mp4 |
| Used a [custom tool](https://storage.googleapis.com/dalecurtis/avif2mp4.html) to convert four-colors.avif into a .mp4 file. |
| |
| ### h264.mp4 |
| ``` |
| ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec h264 -tune zerolatency h264.mp4 |
| ``` |
| |
| ### h264.annexb |
| ``` |
| ffmpeg -i h264.mp4 -codec copy -bsf:v h264_mp4toannexb -f h264 h264.annexb |
| ``` |
| |
| ### h265.mp4 |
| ``` |
| ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec hevc -tag:v hvc1 -tune zerolatency h265.mp4 |
| ``` |
| |
| ### h265.annexb |
| ``` |
| ffmpeg -i h265.mp4 -codec copy -bsf:v hevc_mp4toannexb -f hevc h265.annexb |
| ``` |
| |
| ### sfx.adts |
| ``` |
| sox -n -r 48000 sfx.wav synth 1 sine 480 |
| ffmpeg -i sfx.wav -frames:a 10 -acodec aac -b:a 96K sfx.adts |
| ``` |
| |
| ### sfx.mp3 |
| ``` |
| sox -n -r 48000 sfx.wav synth 1 sine 480 |
| ffmpeg -i sfx.wav -frames:a 10 -acodec libmp3lame -b:a 96K sfx.mp3 |
| ``` |
| |
| ### sfx.flac |
| ``` |
| sox -n -r 48000 sfx.wav synth 1 sine 480 |
| ffmpeg -i sfx.wav -frames:a 10 sfx.flac |
| ``` |
| |
| ### sfx-aac.mp4 |
| ``` |
| sox -n -r 48000 sfx.wav synth 1 sine 480 |
| ffmpeg -i sfx.wav -frames:a 10 -acodec aac -b:a 96K sfx-aac.mp4 |
| ``` |
| |
| ### sfx-*.wav |
| ``` |
| sox -n -r 48000 sfx.wav synth 1 sine 480 |
| for codec in s16 s24 s32 f32 |
| do |
| # Add "le" suffix |
| ffmpeg -i sfx.wav -frames:a 10 -acodec pcm_"$codec"le sfx-pcm-$codec.wav |
| done |
| ffmpeg -i sfx.wav -frames:a 10 -acodec pcm_u8 sfx-pcm-u8.wav |
| for codec in alaw mulaw |
| do |
| ffmpeg -i sfx.wav -frames:a 10 -acodec pcm_$codec sfx-$codec.wav |
| done |
| ``` |
| |
| ### sfx-opus.ogg |
| ``` |
| sox -n -r 48000 sfx.wav synth 1 sine 480 |
| ffmpeg -i sfx.wav -frames:a 10 -acodec libopus -b:a 96K sfx-opus.ogg |
| |
| ### sfx-vorbis.ogg |
| ``` |
| sox -n -r 48000 sfx.wav synth 1 sine 480 |
| ffmpeg -i sfx.wav -frames:a 10 -acodec libvorbis -b:a 96K sfx-vorbis.ogg |
| ``` |
| |
| ### av1.mp4 |
| ``` |
| ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec libaom-av1 av1.mp4 |
| ``` |
| |
| ### vp8.webm |
| ``` |
| ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec vp8 vp8.webm |
| ``` |
| |
| ### vp9.mp4 |
| ``` |
| ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec vp9 vp9.mp4 |
| ``` |