| # 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-full-range-(420|422|444)-hlg-(10|12)bpc.avif | |
| ``` | |
| avifenc -r f -d 10 -y 420 -s 0 --nclx 9/18/9 four-colors.png four-colors-full-range-hlg-420-10bpc.avif | |
| avifenc -r f -d 10 -y 422 -s 0 --nclx 9/18/9 four-colors.png four-colors-full-range-hlg-422-10bpc.avif | |
| avifenc -r f -d 10 -y 444 -s 0 --nclx 9/18/9 four-colors.png four-colors-full-range-hlg-444-10bpc.avif | |
| avifenc -r f -d 12 -y 420 -s 0 --nclx 9/18/9 four-colors.png four-colors-full-range-hlg-420-12bpc.avif | |
| avifenc -r f -d 12 -y 422 -s 0 --nclx 9/18/9 four-colors.png four-colors-full-range-hlg-422-12bpc.avif | |
| avifenc -r f -d 12 -y 444 -s 0 --nclx 9/18/9 four-colors.png four-colors-full-range-hlg-444-12bpc.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_interlaced.mp4 | |
| ``` | |
| ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -vcodec h264 -vf "setfield=tff,format=yuv420p" -flags +ilme+ildct -top 1 h264_interlaced.mp4 | |
| ``` | |
| ### h264_444.mp4 | |
| ``` | |
| ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv444p -vcodec h264 h264_444.mp4 | |
| ``` | |
| ### h264_sei.mp4 | |
| Similar to the construction of `h264.mp4`, but produces a file where the 5th | |
| frame is an SEI recovery point with a `recovery_frame_cnt=0`. | |
| ``` | |
| ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec h264 -tune zerolatency -x264-params "open-gop=1:keyint=5:bframes=3" h264_sei.mp4 | |
| ``` | |
| ### h264.annexb | |
| ``` | |
| ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec h264 -tune zerolatency -f h264 h264.annexb | |
| ``` | |
| ### h264_sei.annexb | |
| ``` | |
| ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec h264 -tune zerolatency -x264-params "open-gop=1:keyint=5:bframes=3" -f h264 h264_sei.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 -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec hevc -tag:v hvc1 -tune zerolatency -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 | |
| ``` |