├── .gitignore ├── CODE_OF_CONDUCT.md ├── README.md ├── babel.config.js ├── blog ├── 2023-07-21-site-optimization.mdx ├── 2023-09-03-av1-for-dummies.mdx ├── 2023-10-29-embedding-the-un-embeddable copy.mdx ├── 2023-12-30-svt-av1-deep-dive.mdx ├── 2024-05-19-svt-av1-deep-dive2-v2-1-0.mdx ├── 2024-06-24-av1-for-dummies-2.mdx ├── 2024-07-20-codec-wiki-one-year-later.mdx ├── 2024-11-14-svt-av1-deep-dive3-v2-2-x.mdx └── 2024-11-21-turbo-metrics-evaluation.mdx ├── docs ├── FAQ.mdx ├── audio │ ├── AAC.mdx │ ├── ALAC.mdx │ ├── Dolby.mdx │ ├── FLAC.mdx │ ├── MP3.mdx │ ├── Opus.mdx │ ├── Speex.mdx │ ├── Vorbis.mdx │ ├── WavPack.mdx │ ├── _category_.json │ └── intro.mdx ├── colorimetry │ ├── _category_.json │ ├── format.mdx │ ├── intro.mdx │ ├── matrix.mdx │ ├── primaries.mdx │ ├── range.mdx │ └── transfer.mdx ├── contribution-guide.mdx ├── data │ ├── 7z.mdx │ ├── _category_.json │ ├── brotli.mdx │ ├── bzip2.mdx │ ├── gzip.mdx │ ├── tar.mdx │ ├── xz.mdx │ ├── zip.mdx │ ├── zpaq.mdx │ └── zstd.mdx ├── encoders │ ├── AVM.mdx │ ├── Aurora1.mdx │ ├── HM.mdx │ ├── JM.mdx │ ├── Kvazaar.mdx │ ├── SVT-AV1-PSY.mdx │ ├── SVT-AV1.mdx │ ├── SVT-HEVC.mdx │ ├── SVT-VP9.mdx │ ├── VTM.mdx │ ├── VVenC.mdx │ ├── _category_.json │ ├── aom-av1-lavish.mdx │ ├── aom-psy101.mdx │ ├── aomenc.mdx │ ├── eve-av1.mdx │ ├── eve-vp9.mdx │ ├── rav1e.mdx │ ├── uavs3e.mdx │ ├── uvg266.mdx │ ├── vpxenc.mdx │ ├── x264.mdx │ ├── x265.mdx │ └── x266.mdx ├── encoders_hw │ ├── _category_.json │ ├── amf.mdx │ ├── mediacodec.mdx │ ├── nvenc.mdx │ ├── qsv.mdx │ └── videotoolbox.mdx ├── filtering │ ├── _category_.json │ ├── antialiasing.mdx │ ├── basics.mdx │ ├── deband.mdx │ ├── decombing.mdx │ ├── dehalo.mdx │ ├── deinterlace.mdx │ ├── denoise.mdx │ ├── graining.mdx │ ├── ivtc.mdx │ ├── stabilizing.mdx │ └── vapoursynth.mdx ├── images │ ├── AVIF.mdx │ ├── GIF.mdx │ ├── HEIC.mdx │ ├── JPEG.mdx │ ├── JPEG2000.mdx │ ├── JXL.mdx │ ├── PNG.mdx │ ├── QOI.mdx │ ├── WebP.mdx │ └── _category_.json ├── introduction │ ├── _category_.json │ ├── high-dynamic-range.mdx │ ├── lossless.mdx │ ├── lossy.mdx │ ├── prologue.mdx │ ├── psychovisual.mdx │ ├── terminology.mdx │ └── video-artifacts.mdx ├── metrics │ ├── PSNR.mdx │ ├── SSIM.mdx │ ├── SSIMULACRA2.mdx │ ├── VMAF.mdx │ ├── XPSNR.mdx │ ├── _category_.json │ └── butteraugli.mdx ├── privacy-policy.mdx ├── resources.mdx ├── subtitles │ ├── SRT.mdx │ ├── SSA.mdx │ ├── _category_.json │ └── webvtt.mdx ├── terms-of-use.mdx ├── utilities │ ├── Aviator.mdx │ ├── Discord.mdx │ ├── FFMetrics.mdx │ ├── MKVToolNix.mdx │ ├── YUView.mdx │ ├── _category_.json │ ├── autocompressor.mdx │ ├── av1an-command-gen.mdx │ ├── av1an.mdx │ ├── dav1d.mdx │ ├── dovi_tool.mdx │ ├── eac3to.mdx │ ├── ffmpeg.mdx │ ├── hdr10plus_tool.mdx │ ├── mp4box.mdx │ ├── nmkoder.mdx │ ├── rAV1ator.mdx │ └── rav1ator-cli.mdx ├── video-players.mdx └── video │ ├── AV1.mdx │ ├── AVC.mdx │ ├── AVS3.mdx │ ├── ECM.mdx │ ├── FFV1.mdx │ ├── HEVC.mdx │ ├── Theora.mdx │ ├── VC-1.mdx │ ├── VP8.mdx │ ├── VP9.mdx │ ├── VVC.mdx │ ├── _category_.json │ ├── prores.mdx │ └── utvideo.mdx ├── docusaurus.config.js ├── frontmatter.json ├── package-lock.json ├── package.json ├── sidebars.js ├── src ├── css │ └── custom.css ├── pages │ ├── index.js │ ├── index.module.css │ └── markdown-page.mdx └── utils │ └── ImageCarousel.mdx └── static ├── .nojekyll ├── CNAME ├── _headers ├── fonts ├── Hubot-Sans.woff2 ├── Inter.var.woff2 ├── Mona-Sans.woff2 ├── Monaspace-Argon.woff2 ├── Monaspace-Krypton.woff2 └── Monaspace-Neon.woff2 └── img ├── _DSC8466-smaller-recomp.jxl ├── _DSC8466-smaller-xyb.jpg ├── _DSC8466-smaller.avif ├── _DSC8466-smaller.jpg ├── _DSC8466-smaller.jxl ├── _DSC8466.jpg ├── av1_for_dummies_guide.avif ├── av1_for_dummies_guide.jpg ├── av1an_96_workers.avif ├── av1stonks.avif ├── blog_turbo-metrics_11-2024 ├── image.avif ├── ssimu2_cpu-gpu_comp.svg └── ssimu2_cpu-gpu_dec.svg ├── box-size-mac.avif ├── clybius-av1.webp ├── clybius-dwayne.webp ├── codec-wiki-social-card.webp ├── color-huffman-tree-svg.svg ├── comp_showcase.webp ├── compare-guide.webp ├── crop_1.jpg ├── crop_2.jpg ├── crop_tool.webp ├── discord-embed-blog-image.webp ├── discord.svg ├── discordnfpis-fnaf.webp ├── docusaurus-social-card.jpg ├── docusaurus.png ├── eve_av1_speed.webp ├── eve_vp9_speed.webp ├── favicon.ico ├── favicon.svg ├── img_size ├── img_1350.avif ├── img_1350.jpg ├── img_1350.jxl ├── img_1660.avif ├── img_1660.jpg ├── img_1660.jxl ├── img_1916.avif ├── img_1916.jpg ├── img_1916.jxl ├── img_270.avif ├── img_270.jpg ├── img_270.jxl ├── img_958.avif ├── img_958.jpg └── img_958.jxl ├── logo.svg ├── nmkoder.avif ├── nmkoder.webp ├── preset_7_meme.webp ├── python-path.webp ├── responsive_image_linter.avif ├── stolenshoes-mario.webp ├── stolenshoes-puss.webp ├── svt-1.8.0-testing-blog-image.webp ├── svt-2.1.0-testing-blog-image.webp ├── svt-2.2.x-testing-blog-image.webp ├── tiles.webp ├── undraw_docusaurus_mountain.svg ├── undraw_docusaurus_react.svg ├── undraw_docusaurus_tree.svg ├── vs2.webp ├── yuview.avif ├── yuview.webp └── zoom_tool.avif /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | node_modules 3 | .docusaurus 4 | yarn.lock 5 | build 6 | .DS_Store 7 | bun.lockb 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Codec Wiki 2 | 3 | A community maintained wiki for all things encoding. 4 | 5 | ## Before You Contribute 6 | 7 | 1. By making a contribution to the Codec Wiki, you are communicating that you have read & agreed to our Terms & Conditions, Privacy Policy, & Code of Conduct. 8 | 2. Ensure your understanding of the material you're contributing is sufficient to a point where it is useful to the project. It is perfectly acceptable not to get everything right the first time, but always double check your contributions for factual correctness. 9 | 3. If you would like, connect with us via our Revolt server located at [rvlt.gg/emxNXv1x](https://rvlt.gg/emxNXv1x). You can ask questions & communicate with other contributors here. 10 | 11 | ## Clone & Push Instructions 12 | **Make sure to clone from & edit the** `main` **branch only, & push your final changes to the** `deployment` **branch according to the instructions below. Also be sure to use node 18 LTS, as later versions tend to be troublesome.** 13 | 14 | *don't forget to add unimportant files to the .gitignore* 15 | 16 | 1. Clone from the `main` branch to start to make a contribution: 17 | ```bash 18 | % git clone git@github.com:av1-community-contributors/codec-wiki.git -b main 19 | ``` 20 | 21 | 2. Test your changes locally before making a commit: 22 | ```bash 23 | % yarn 24 | % yarn start 25 | ``` 26 | 27 | 3. Push changes to `main` branch: 28 | ```bash 29 | % git add . 30 | % git commit -m "Commit Message" 31 | % git push -u origin main 32 | ``` 33 | 34 | 4. Deploy to `deployment` branch to make live on site: 35 | ```bash 36 | % GIT_USER= DEPLOYMENT_BRANCH=deployment yarn deploy 37 | ``` 38 | 39 | *Docusaurus Info* 40 | ## Website 41 | 42 | This website is built using [Docusaurus 3](https://docusaurus.io/), a modern static website generator. 43 | 44 | ### Installation 45 | 46 | ``` 47 | $ yarn 48 | ``` 49 | 50 | ### Local Development 51 | 52 | ``` 53 | $ yarn start 54 | ``` 55 | 56 | This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. 57 | 58 | ### Build 59 | 60 | ``` 61 | $ yarn build 62 | ``` 63 | 64 | This command generates static content into the `build` directory and can be served using any static contents hosting service. 65 | 66 | ### Deployment 67 | 68 | See initial instructions at the top. 69 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')], 3 | }; 4 | -------------------------------------------------------------------------------- /docs/FAQ.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: FAQ 3 | sidebar_label: ❓ FAQ 4 | position: 14 5 | --- 6 | 7 | # FAQ 8 | 9 | ## Why are you doing this? 10 | 11 | Multimedia encoding & the digital compression space is an incredible field that many tech enthusiasts, professionals, & laymen have no easy entry point to. Wikipedia has a vast amount of information on many of the individual topics covered here but doesn't offer a cohesive way to engage with the entire sphere of knowledge as a whole. While this site started as a lighthearted guide (you'll see the remnants of this strewn about the various wiki entries), it has quickly become an endeavor to unite digital compression aficionados to make the knowledge more accessible for all. 12 | 13 | ### But alternatives exist. Why not contribute there? 14 | 15 | While this is true, this is easier said than done. 16 | 17 | - Multimedia Wiki is not as active as it used to be, & a new effort makes sense to carry past efforts forward. 18 | 19 | - [guide.encode.moe](https://guide.encode.moe/) is stagnant and mostly focused on fansub, docs & personal experiences that are scattered around the Internet. 20 | 21 | - There are sources littered about that explain pieces of the larger puzzle, but these serve as small drops in a bucket of vast incoherency & don't meaningfully remedy the steep learning curve for understanding multimedia compression without background knowledge. 22 | 23 | ### How do I get started as a contributor? 24 | 25 | See our Contribution Guide page in the sidebar. 26 | 27 | ### Why "Codec Wiki"? 28 | 29 | This wiki is mostly going to be focused on multimedia compression, & the term "Codec" is already widely recognized & understood. While other topics like video filtering & general compression algorithms may be covered, the main focus remains multimedia compression. 30 | -------------------------------------------------------------------------------- /docs/audio/ALAC.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ALAC 3 | sidebar_position: 7 4 | --- 5 | 6 | # ALAC 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: -------------------------------------------------------------------------------- /docs/audio/Dolby.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Dolby Digital 3 | sidebar_position: 3 4 | --- 5 | 6 | # Dolby Digital 7 | 8 | :::info Under Maintenance 9 | The content in this entry is incomplete & is in the process of being completed. 10 | ::: 11 | 12 | Dolby Digital is a family of both lossless and lossy audio compression algorithms and technologies. 13 | 14 | ## Format Overview 15 | 16 | ### AC-3 17 | Originally known as Dolby Digital, AC-3 was first released in 1991 to provide digital 5.1 sound in cinemas from 35mm film reels. AC-3 is notable for being the first audio codec to make use of the “Modified Discrete Cosine Transform” algorithm. The codec has seen widespread use an adoption, due to its prevalence in DVDs, TV, and Blu-rays as a surround codec. 18 | 19 | #### Dolby Digital Surround EX 20 | Like Dolby’s earlier Pro Logic technology, Dolby Digital Surround EX matrixes a sixth, centre back surround channel into the left and right surround channels of a 5.1 stream, allowing for a 6.1 mix to be unfolded when played on a 6.1 or 7.1 system with EX decoding. This technology is fully backwards compatible with existing AC-3 decoders, producing the standard 5.1 stream. Surround EX was first introduced in 1999 with the release of “Star Wars: Episode I – The Phantom Menace”. 21 | 22 | ### E-AC-3 23 | Often referred to as “Dolby Digital Plus”, E-AC-3 is the successor to Dolby’s earlier AC-3 codec, featuring support for higher bitrates (6,144kbps vs 640kbps), more channels (15 vs 5), and additional coding tools allowing for more efficient encoding. E-AC-3 can be found in the short-lived HD-DVD format, Blu-ray discs, and as the main surround codec for most streaming services, particularly if Dolby Atmos is used. Contrary to popular belief, E-AC-3 is not backwards compatible with AC-3, rather Dolby mandates that all E-AC-3 decoders can also decode standard AC-3 content. As E-AC-3 is an optional codec on Blu-ray, all discs encoded with E-AC-3 encode the first 5.1 channels as AC-3, with the additional rear channels/Atmos content being encoded as E-AC-3. 24 | 25 | ### TrueHD 26 | Dolby’s TrueHD is a lossless multi-channel audio codec based on Meridian’s Lossless Packing (MLP) codec, although the two aren’t compatible with each other. TrueHD is mainly used on Blu-ray and supports Dolby Atmos’s spatial audio data. The TrueHD specification supports up to 16 audio channels (although the Blu-ray specification limits this to 7.1) with a sample rate of 192KHz and a bit depth of 24 bits. As TrueHD is an optional codec on Blu-ray, each TrueHD steam includes a backup AC-3 stream encoded alongside it for compatibility purposes. Since 2010, Dolby TrueHD has seen a decline in usage in favour of DTS-HD Master Audio on Blu-ray discs, but has seen a slight resurgence as the codec used for Dolby Atmos audio, but DTS-HD MA is still more common on non-Atmos titles. 27 | 28 | ### AC-4 29 | To be added. 30 | 31 | ### Atmos 32 | To be added. 33 | -------------------------------------------------------------------------------- /docs/audio/FLAC.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: FLAC 3 | sidebar_position: 7 4 | --- 5 | 6 | # FLAC 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | FLAC (Free Lossless Audio Coding) is an open-source lossless audio codec with widespread support & compatibility released in 2001. It represents the most efficent lossless audio format in common use today. 13 | 14 | FLAC is commonly contained in a ogg container with either a `.flac` or `.ogg` extension. It can less commonly be used within a matroska container (`.mkv` or `.mka`) for mixing with a video stream. 15 | 16 | :::caution 17 | It is not recommended to transcode a lossily encoded file to FLAC as the file size will grow tremendously while any quality loss from lossy encoding will remain. FLAC is best if you need to preserve existing lossless audio. 18 | ::: 19 | ## Software support 20 | FLAC is supported by the majority of web browsers and media players in common use as of 2024. 21 | 22 | ### WAV to FLAC using [FFmpeg](../utilities/ffmpeg.mdx): 23 | 24 | ```bash 25 | ffmpeg -i example.wav -c:a flac example.flac 26 | ``` 27 | 28 | ### WAV to FLAC using FLAC command-line tool: 29 | You can include an argument of a number 0-8 to specify the compression effort, 0 being fastest and 8 having the highest compression. 30 | ```bash 31 | flac example.wav -8 -o example.flac 32 | ``` -------------------------------------------------------------------------------- /docs/audio/MP3.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: MP3 3 | sidebar_position: 4 4 | --- 5 | 6 | # MP3 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | MP3, formally known as MPEG-1 Audio Layer III or MPEG-2 Audio Layer III, is a coding format for digital audio. It was developed largely by the Fraunhofer Society in Germany under the lead of Karlheinz Brandenburg, with support from other digital scientists in other countries. 13 | 14 | MP3 is defined in two ISO/IEC specification families: MPEG-1: 11172-3 and MPEG-2: 13818-32. It uses lossy compression, which often allows for large reductions in file size compared to uncompressed audio. 15 | 16 | Lossy MP3 compression works by attempting to reduce (or approximate) the accuracy of certain components of sound that could be considered (by some [psychoacoustic](../introduction/terminology.mdx#perceputal--psychovisual--psychoacoustic) analysis) to be beyond the hearing capabilities of most humans and storing the coefficients corresponding to these more salient frequency bands. 17 | 18 | Compared to CD-quality digital audio, MP3 compression can commonly achieve a 75 to 95% reduction in size. For example, an MP3 encoded at a constant bit rate of 128 kbit/s would result in a file approximately 9% of the size of the original CD audio. MP3 audio is considered transparent at 320kb/s. 19 | 20 | It is still very common to see MP3 files in the wild today, despite the fact that the format was finalized in 1993 (with modifications in 1995 to support lower sample rates and bit rates). This is due to the fact that MP3 could be considered the first widely adopted audio format that allowed for high quality audio to be compressed to a relatively small file size. Compared to more modern formats like [Opus](../audio/Opus.mdx) and [AAC](../audio/AAC.mdx), MP3 may not seem as impressive, but it is still widely supported by many devices and pieces software and has certainly left a powerful legacy to live up to for modern codecs. -------------------------------------------------------------------------------- /docs/audio/Speex.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Speex 3 | sidebar_position: 6 4 | --- 5 | 6 | # Speex 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | Speex is an open-source audio codec designed for speech. It has largely been replaced by [Opus](../audio/Opus.mdx). -------------------------------------------------------------------------------- /docs/audio/Vorbis.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Vorbis 3 | sidebar_position: 5 4 | --- 5 | 6 | # Vorbis 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | Vorbis is an open-source audio codec first released in 2000, maintainted by the Xiph.org Foundation. It has seen great success in its usage by Spotify, among others. It is the default audio codec for Minecraft's sounds & music. It has largely been replaced by [Opus](../audio/Opus.mdx). 13 | 14 | ## Usage 15 | Vorbis is supported in [ffmpeg](../utilities/ffmpeg.mdx). 16 | ### Encoder 17 | ```bash 18 | ffmpeg -i input.wav -c:a libvorbis output.ogg 19 | ``` 20 | ### Decoder 21 | ```bash 22 | ffmpeg -i input.ogg output.wav 23 | ``` 24 | See [ffmpeg](../utilities/ffmpeg.mdx) for more options. 25 | -------------------------------------------------------------------------------- /docs/audio/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "🔊 Audio", 3 | "position": 2 4 | } -------------------------------------------------------------------------------- /docs/audio/intro.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Intro 3 | description: What is lossless audio? What is lossy audio? What is an audio codec? This entry serves as an intro to digital audio processing. 4 | keywords: [audio codec, audio, codec, audio encoding, audio decoding, audio compression, audio quality, audio formats, audio file formats, audio file, audio file type, audio file extension, audio file format, audio file types, audio file formats] 5 | sidebar_position: 1 6 | --- 7 | 8 | # Introduction to Lossy & Lossless Audio Compression 9 | 10 | :::info Under Maintenance 11 | The content in this entry is incomplete & is in the process of being completed. 12 | ::: 13 | 14 | Digital audio is the representation of sound recorded in, or converted into, digital form. To understand digital audio, it's crucial to grasp some fundamental concepts, including **sampling**, **Nyquist Frequency**, and the **Nyquist-Shannon Sampling Theorem**. 15 | 16 | ## Sampling & the Nyquist Frequency 17 | 18 | **Sampling** is the process of converting a continuous, analog audio signal into a discrete digital signal by measuring the amplitude of the audio signal at uniform intervals. The frequency of this measurement is known as the *sampling rate*, typically measured in samples per second, or Hertz (Hz). For example, audio CDs use a sampling rate of 44,100 Hz, which means the audio signal is sampled 44,100 times every second. 19 | 20 | To accurately represent a wave, you need at least two measurements per cycle; one to capture the peak of the wave, and one to capture the trough. If you sample less than twice per cycle, you can't distinguish between different frequencies; this is where the **Nyquist frequency** comes from. Named after Harry Nyquist, the **Nyquist frequency** is *half of the sampling rate of a discrete signal processing system*. For a given sampling rate, the Nyquist frequency represents the highest frequency that can be accurately sampled without introducing errors such as aliasing. For example, with a sampling rate of 48,000 Hz, the Nyquist frequency is 24,000 Hz. Capturing frequencies above the Nyquist frequency for a given system can bring about **aliasing** artifacts. Aliasing occurs where high-frequency components appear as lower frequencies in the sampled signal, distorting the information. 21 | 22 | The **Nyquist-Shannon sampling theorem** states that to avoid aliasing, the sampling rate must be at least twice the highest frequency present in the signal. This theorem is crucial for ensuring that the digital representation of the audio signal retains all the information from the original analog signal without distortion. 23 | 24 | ## Lossless Audio Compression 25 | 26 | The main benefit of lossless compression is the preservation of audio quality, making it ideal for professional audio production, archiving, and situations where high fidelity is required. However, lossless files are significantly larger than their lossy counterparts, which can be a drawback for storage and (especially) streaming. 27 | 28 | :::note Lossless Compression 29 | If you would like to dive more deeply into the topic of lossless compression, you can check out the [Lossless Compression](../introduction/lossless.mdx) entry in the Introduction section of the wiki. 30 | ::: 31 | 32 | [FLAC](./FLAC.mdx), [WavPack](./WavPack.mdx), & [ALAC](./ALAC.mdx) are examples of popular lossless audio codecs that you are likely to encounter in the wild. 33 | 34 | ## Lossy Audio Compression 35 | 36 | The primary advantage of lossy compression is the significant reduction in file size, making it ideal for streaming, portable devices, and situations where storage space is limited. However, the trade-off is a potential loss in audio quality, which may be noticeable in critical listening environments. 37 | 38 | :::note Lossy Compression 39 | If you would like to dive more deeply into the topic of lossy compression, you can check out the [Lossy Compression](../introduction/lossy.mdx) entry in the Introduction section of the wiki. 40 | ::: 41 | 42 | [MP3](./MP3.mdx), [AAC](./AAC.mdx), [Vorbis](./Vorbis.mdx), & [Opus](./Opus.mdx) are some examples of popular lossy audio codecs that you are likely to encounter in the wild. 43 | 44 | ## Conclusion 45 | 46 | Understanding these baseline principles of digital audio processing is essential for informed reading when it comes to the rest of the Audio section of this wiki. We hope this page helped you grasp some of the fundamental concepts that underpin digital audio processing. 47 | -------------------------------------------------------------------------------- /docs/colorimetry/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "🎨 Colorimetry", 3 | "position": 8 4 | } 5 | -------------------------------------------------------------------------------- /docs/colorimetry/intro.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Intro 3 | sidebar_position: 1 4 | --- 5 | 6 | # Intro 7 | 8 | There are many aspects which determine how the color information 9 | for a video is stored and how it is rendered. As technology has improved, 10 | new standards developed, and with new techologies such as HDR, 11 | new standards continue to develop. However, the result is that 12 | it can be confusing to know which color settings to use for 13 | a given video. 14 | 15 | Some properties such as the color format must be set. 16 | However, properties such as color range, primaries, matrix coefficients, 17 | and transfer function are optional. It is always best practice to set these 18 | when you are encoding a video, because if they are not set, the player 19 | must make a guess as to what the correct settings are. If it guesses 20 | incorrectly, this can lead to the colors of the video being different 21 | from what was intended. 22 | -------------------------------------------------------------------------------- /docs/colorimetry/matrix.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Matrix Coefficients 3 | sidebar_position: 6 4 | --- 5 | 6 | # Matrix Coefficients 7 | 8 | Matrix coefficients represent the multiplication matrix that is used when 9 | converting from YUV to RGB. As with primaries, the integer values are defined 10 | within universal specifications, and as such they will be the same across all 11 | encoding and playback tools. 12 | 13 | The following values are available: 14 | 15 | ### 0: Identity 16 | 17 | Specifies that the identity matrix should be used, i.e. this data is already in an RGB-compatible colorspace. 18 | 19 | This matrix coefficient setting is used in the following standards: 20 | 21 | - GBR (often referred to as RGB) 22 | - YZX (often referred to as XYZ) 23 | - IEC 61966-2-1 sRGB 24 | - SMPTE ST 428-1 (2019) 25 | 26 | ### 1: BT.709 27 | 28 | BT.709 is the standard used for modern high-definition video, and is a safe default assumption. 29 | 30 | This matrix coefficient setting is used in the following standards: 31 | 32 | - Rec. ITU-R BT.709-6 33 | - Rec. ITU-R BT.1361-0 conventional colour gamut system and extended colour 34 | gamut system (historical) 35 | - IEC 61966-2-4 xvYCC709 36 | - SMPTE RP 177 (1993) Annex B 37 | 38 | ### 2: Unspecified 39 | 40 | This value indicates that no color matrix is set for the video, and the player must decide which value to use. 41 | 42 | mpv will use the following heuristics in this case: 43 | 44 | ``` 45 | if width >= 1280 || height > 576 { 46 | "BT.709" 47 | } else { 48 | "SMPTE 170M" 49 | } 50 | ``` 51 | 52 | ### 4: BT.470M 53 | 54 | BT.470M is a standard that was used in analog television systems in the United States. 55 | 56 | ### 5: BT.470BG 57 | 58 | BT.470BG is a standard that was used for European (PAL) television systems and DVDs. 59 | 60 | This matrix coefficient setting is used in the following standards: 61 | 62 | - Rec. ITU-R BT.470-6 System B, G (historical) 63 | - Rec. ITU-R BT.601-7 625 64 | - Rec. ITU-R BT.1358-0 625 (historical) 65 | - Rec. ITU-R BT.1700-0 625 PAL and 625 SECAM 66 | - IEC 61966-2-1 sYCC 67 | - IEC 61966-2-4 xvYCC601 68 | 69 | ### 6: SMPTE 170M 70 | 71 | SMPTE 170M is a stanrard that was used for NTSC television systems and DVDs. Its matrix coefficients are equivalent to BT.470BG. 72 | 73 | This matrix coefficient setting is used in the following standards: 74 | 75 | - Rec. ITU-R BT.601-7 525 76 | - Rec. ITU-R BT.1358-1 525 or 625 (historical) 77 | - Rec. ITU-R BT.1700-0 NTSC 78 | - SMPTE ST 170 (2004) 79 | 80 | ### 7: SMPTE 240M 81 | 82 | SMPTE 240M was an interim standard used during the early days of HDTV (1988-1998). 83 | 84 | ### 8: YCgCo 85 | 86 | The YCoCg color model, also known as the YCgCo color model, 87 | is the color space formed from a simple transformation of 88 | an associated RGB color space into a luma value and 89 | two chroma values called chrominance green and chrominance orange. 90 | 91 | ### 9: BT.2020 Non-Constant Luminance 92 | 93 | BT.2020 is a standard used for ultra-high-definition video, i.e. 4K and higher. It may be used with or without HDR, as HDR is defined by the transfer characteristics. If you do not know if you want non-constant or constant luminance, you probably want non-constant. 94 | 95 | If you have a video with an unset matrix coefficient, it is safer to assume BT.709 by default. Videos which are BT.2020 should already have their color metadata set. 96 | 97 | This matrix coefficient setting is used in the following standards: 98 | 99 | - Rec. ITU-R BT.2020-2 (non-constant luminance) 100 | - Rec. ITU-R BT.2100-2 Y′CbCr 101 | 102 | ### 10: BT.2020 Constant Luminance 103 | 104 | This is a variant of BT.2020 with constant luminance values, represented using the YcCbcCrc colorspace. You probably want the non-constant luminance variant instead, unless you know you want this one. 105 | 106 | ### 11: SMPTE 2085 107 | 108 | SMPTE 2085 is a standard used with HDR signals in the XYZ colorspace. I've never actually seen it used in the wild. 109 | 110 | ### 12: Chromaticity-Derived Non-Constant Luminance 111 | 112 | I'm not really sure when you would use this. 113 | 114 | ### 13: Chromaticity-Derived Constant Luminance 115 | 116 | I'm not really sure when you would use this. 117 | 118 | ### 14: ICtCp 119 | 120 | ICtCp is an alternative colorspace developed for use with HDR and wide gamut video, by Dolby because they love doing extra stuff like this. I've never actually seen it used in the wild. 121 | -------------------------------------------------------------------------------- /docs/colorimetry/range.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Color Range 3 | sidebar_position: 3 4 | --- 5 | 6 | # Color Range 7 | 8 | Range is a concept that describes the valid values for a pixel. 9 | Typically, RGB will use full range and YUV will use limited range. 10 | 11 | What does this mean? 12 | 13 | For 8-bit video, full range indicates that all values between 0-255 14 | may be used to represent a color value. On the other hand, limited range 15 | indicates that only values between 16-235, or 16-240 for chroma, 16 | are valid, and any values outside that range will be clamped to fit in 17 | that range. These expand to equivalent ranges for high bit depth videos. 18 | 19 | Why is limited range a thing that exists? Essentially, it's due to 20 | historical reasons, but it's a convention that we are stuck with today. 21 | Even though full range may provide slightly better color accuracy, 22 | it is far less meaningful for high bit depth content, and even 23 | HDR blu-rays use limited color range. Therefore, it is recommended to 24 | follow existing conventions. 25 | -------------------------------------------------------------------------------- /docs/contribution-guide.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Contribution Guide 3 | sidebar_label: ✒️ Contribution Guide 4 | sidebar_position: 13 5 | --- 6 | 7 | # Contribution Guide 8 | 9 | Codec Wiki - community-maintained wiki for all things encoding. 10 | 11 | ## Before You Contribute 12 | 13 | 1. By contributing to the Codec Wiki, you are communicating that you have read & agreed to our Terms & Conditions, Privacy Policy, & Code of Conduct. 14 | 2. Ensure your understanding of the material you're contributing is sufficient to a point where it is useful to the project. It is perfectly acceptable not to get everything right the first time, but always double-check your contributions for factual correctness. 15 | 16 | **Our current priority is filling out the existing pages with content. Please assist in doing this, if possible, before considering adding new pages.** 17 | 18 | If you're unsure the content in your entry is completely correct or you believe your entry needs review, please attach the following message at the top of your entry: 19 | 20 | :::caution Pending Review 21 | The content in this entry may not be entirely accurate, & is pending further review to assess the quality of the information. 22 | ::: 23 | 24 | If you're aware your entry is too short or incomplete, please add the following message to the top of your entry: 25 | 26 | :::info Under Maintenance 27 | The content in this entry is incomplete & is in the process of being completed. 28 | ::: 29 | 30 | If you've added a new page & you aren't sure what should go there (this isn't recommended while there are still so many empty pages to be filled), add the following message as your page entry: 31 | 32 | :::danger Help Wanted 33 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](/docs/contribution-guide) to get started as a contributor! 34 | ::: 35 | 36 | ### Connect With Us 37 | 38 | If you'd like to join the "AV1 for Dummies" Discord server to communicate with other passionate contributors helping this project, please join using the widget below: 39 | 40 | 41 | 42 | Alternatively, we have a (soon to be) bridged Revolt server linked [right here](https://rvlt.gg/eSERRhSG). Revolt is an open-source Discord alternative, which you can read more about on [this page](https://github.com/revoltchat/legal/blob/master/About.mdx#communication-is-critical). 43 | 44 | ## Clone & Push Instructions 45 | **Make sure to clone from & edit the** `main` **branch only, & push your final changes to the** `deployment` **branch according to the instructions below. Also be sure to use node 18 LTS, as later versions tend to be troublesome.** 46 | 47 | *don't forget to add unimportant files to the .gitignore before making any commits* 48 | 49 | 1. Clone from the `main` branch to start to make a contribution: 50 | ```bash 51 | % git clone git@github.com:av1-community-contributors/av1-wiki.github.io.git -b main 52 | ``` 53 | 54 | 2. Test your changes locally before making a commit: 55 | ```bash 56 | % yarn 57 | % yarn start 58 | ``` 59 | 60 | 3. Push changes to `main` branch: 61 | ```bash 62 | % git add . 63 | % git commit -m "Commit Message" 64 | % git push -u origin main 65 | ``` 66 | 67 | 4. Deploy to `deployment` branch to make live on site: 68 | ```bash 69 | % GIT_USER= DEPLOYMENT_BRANCH=deployment yarn deploy 70 | ``` 71 | 72 | *Docusaurus Info* 73 | ## Website 74 | 75 | This website is built using [Docusaurus 3](https://docusaurus.io/), a modern static website generator. 76 | 77 | ### Installation 78 | 79 | ``` 80 | $ yarn 81 | ``` 82 | 83 | ### Local Development 84 | 85 | ``` 86 | $ yarn start 87 | ``` 88 | 89 | This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. 90 | 91 | ### Build 92 | 93 | ``` 94 | $ yarn build 95 | ``` 96 | 97 | This command generates static content into the `build` directory and can be served using any static contents hosting service. 98 | 99 | ### Deployment 100 | 101 | See the initial instructions at the top. -------------------------------------------------------------------------------- /docs/data/7z.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: 7z 3 | sidebar_position: 4 4 | --- 5 | 6 | # 7-zip (7z) 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | 7-zip (7z) is a file format that supports several different data compression, encryption, & pre-processing algorithms. It was introduced by the 7-Zip archiver, which is free and open-source software for dealing with various data compression formats including formats similar to 7z like [XZ](../data/xz.mdx). 13 | 14 | The 7-zip format has some noteworthy advantages over the popular [ZIP](../data/zip.mdx) format. 15 | - The 7-zip utility can compress files to the 7z format "30-70% better" than to ZIP format despite having a highly efficient ZIP encoder. It mainly uses the LZMA & LZMA2 algorithms, which are more modern than DEFLATE and usually compress better. 16 | - 7-zip can encrypt files with AES-256 using a user provided password. AES-256 is more secure than the ZipCrypto encryption often used by ZIP. 17 | - 7-zip can support files up to 16 exabytes in size, while traditional ZIP has a 4 GB limit (ZIP64, which is commonly used, does not suffer from this 4 GB limitation so this is less relevant now). 7-zip also supports various pre-processing filters, which can improve compression for certain types of data like executables and binaries. 18 | 19 | However, 7-zip also has some drawbacks and limitations. 20 | - 7-zip is not as widely supported as ZIP by other software and platforms. Some users may need to install additional programs or plugins to open or extract 7z files. 21 | - Slower speed: 7-zip archives may take longer to compress or decompress compared to ZIP. This is somewhat mitigated by the 7-zip utility's effective parallelization when decoding, but this only affects real time as opposed to user time meaning it is still likely going to be more expensive to decompress than ZIP. 22 | - 7-zip does not have any built-in mechanism to repair corrupted or damaged archives. Users may need to use third-party tools or backup copies to recover their data1 23 | 24 | 7z archives are supported natively by macOS & many Linux distributions. 25 | -------------------------------------------------------------------------------- /docs/data/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "💽 Data", 3 | "position": 4 4 | } 5 | -------------------------------------------------------------------------------- /docs/data/brotli.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: brotli 3 | sidebar_position: 6 4 | --- 5 | 6 | # Brotli 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | Brotli was released by Google in late 2013, & it is commonly used on the Web for content delivery. It is a core part of the `.woff2` Web Open Font Format, allowing web fonts to be smaller when sent to users as part of a website. It is not very common to pass around `.tar.br` Brotli archives like you would with [gzip](../data/gzip.mdx) or [xz](../data/xz.mdx), so it is perfectly acceptable that such files aren't really compatible anywhere. Brotli is almost universally compatible across the Web, supported by as much as 96% of the World Wide Web's users. 13 | 14 | Brotli is based on LZ77 & Huffman coding, much like ZIP. It also uses context modeling to allow the use of multiple Huffman trees for the same alphabet in the same block; this essentially means that based on the context of the data being compressed, it can be compressed more efficiently especially if it contains multiple different kinds of data. 15 | 16 | Brotli was co-authored & partially developed by Jyrki Alakuijala, who also worked on [JPEG-XL](../images/JXL.mdx) & the efficient [JPEG](../images/JPEG.mdx) encoder jpegli. JPEG-XL's metadata information is usually Brotli-compressed. -------------------------------------------------------------------------------- /docs/data/bzip2.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: bzip2 3 | sidebar_position: 3 4 | --- 5 | 6 | # bzip2 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | bzip2 is a open source file compression format and utility. It's efficency is slightly better than [zip](./zip.mdx), but worse than lzma based formats like [xz](./xz.mdx) and [7z](./7z.mdx). bzip2 cannot be used to compress mutliple files at once, you should collate files together into a [tarball](./tar.mdx) to compress mutliple files using bzip2. 13 | 14 | -------------------------------------------------------------------------------- /docs/data/tar.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: tar 3 | sidebar_position: 8 4 | --- 5 | 6 | # tar 7 | :::danger Help Wanted 8 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 9 | ::: 10 | 11 | `tar`, or Tape ARchive, is a archiving format and utility first developed for Version 7 Unix in 1977. It's original purpose was to collate files into one that can be stored on tape. Similarly, today it is used to bring many files together into a "tarball", which can be compressed with any general data compression algorithm. 12 | 13 | ## Usage 14 | :::note 15 | This guide has been written for GNU tar on linux, however it should be applicable to BSD tar, macOS tar, and the tar command in powershell on Windows. 16 | ::: 17 | 18 | ### Create a tar archive 19 | ```bash 20 | tar -cf {archive name} {files listed here} 21 | ``` 22 | You can use `tar` to compress your archive, for example into a `.tar.gz` or `.tar.xz` archive. To do this, you either can either use a flag such as `-z`, `-j`, or `-J` ([gzip](./gzip.mdx), [bzip2](./bzip2.mdx), [xz](../data/xz.mdx)), or you can use `-a` ('automatic'), which allows it to intuit what algorithm you want from the file extension, such as `archive.tar.xz` for an xz compressed tarball. 23 | 24 | GNU tar can use these compression algorithms 25 | * gzip (.gz) 26 | * bzip2 (.bz) 27 | * xz (.xz) 28 | * lzip (.lz) 29 | * lzma (.lzma) 30 | * lzop (.lzo) 31 | * zstd (.zstd) 32 | ### Extract a tar archive 33 | ```bash 34 | tar -xf {tarball}.tar -C {directory to extract to} 35 | ``` 36 | tar can extract from it's supported compressed formats, such as `archive.tar.xz` automatically, with no extra flags. 37 | 38 | -------------------------------------------------------------------------------- /docs/data/xz.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: xz 3 | sidebar_position: 5 4 | --- 5 | 6 | # XZ 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | XZ is a data compression format and utility based on the Lempel-Ziv-Markov Chain Algorithm (LZMA). The XZ format itself is an improvement on LZMA, allowing for preprocessing filters similar to [7-zip](../data/7z.mdx) to increase the resulting archive's compression ratio. 13 | 14 | XZ can only compress one file at a time, so making a [tar](./tar.mdx) archive of the files you'd like to compress (if there are multiple) is necessary when using XZ. 15 | 16 | XZ is more widely supported when compared to other data compression formats, seeing support across iOS, macOS, and many Linux distributions by default. To decompress & compress XZ on Windows, you will likely need the 7-Zip archive utility. 17 | 18 | ## Usage 19 | This usage is for the `xz` utility on linux, but is applicable to other platforms where xz can be used. It should be noted that `xz`'s default behavior is to delete the original file after it has completed the relevant compression or decompression operation, but this can be stopped with the flag below. An arbitary number of files may be passed to xz and it will individually complete the specified operation on each given file. 20 | 21 | ### Compression 22 | ```bash 23 | xz {file} 24 | ``` 25 | This will result in a file named `{file}.xz` being created in the current working directory. 26 | 27 | A more advanced variant is listed here: 28 | ```bash 29 | xz -# --extreme -M 800Mib -T 2 -k {file} 30 | ``` 31 | 32 | - `-#` is a number between 0 and 9 specifying speed presets, 0 being the fastest and 9 slowest. 33 | - `--extreme` is an option allowing xz to use more time than the standard preset level. 34 | - `-M {size}` is an option restricting the memory usage of `xz` either as a percentage of system memory or an absolute amount. 35 | - `-T {threads}` is an option restricting the number of threads used by `xz`. 36 | - `-k` prevents xz from deleting the input file. 37 | 38 | ### Decompression 39 | ```bash 40 | xz -d {file}.xz 41 | ``` 42 | This decompresses the xz archive to it's original file. 43 | 44 | - `-M {size}` is an option restricting the memory usage of `xz` either as a percentage of system memory or an absolute amount. 45 | - `-T {threads}` is an option restricting the number of threads used by `xz`. 46 | - `-k` prevents xz from deleting the input file. -------------------------------------------------------------------------------- /docs/data/zpaq.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: zpaq 3 | sidebar_position: 7 4 | --- 5 | 6 | # ZPAQ 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | ZPAQ is a lossless data compression algorithm that combines several techniques to achieve high compression ratios. It was developed by Matt Mahoney. 13 | 14 | ZPAQ uses a multitude of different compression algorithms to try to achieve the best size-to-compression-time ratio possible while producing the smallest possible archives without much concern given to decompression performance. On the official ZPAQ website, it looks like it is designed for "realistic backups that have a lot of duplicate files and a lot of already compressed files." 15 | 16 | ZPAQ is also considered an "incremental journaling archiver" meaning you can add files to an existing archive based on if they were changed or not. This reduces the time needed to wait for a new backup to finish, if that is your use case. Since ZPAQ is so focused on compression ratio, this kind of feature may reduce the burden imposed by long compression times in practical use cases where it makes sense. Windows & macOS do not handle ZPAQ archives properly by default, and it is unlikely many Linux distros do either. -------------------------------------------------------------------------------- /docs/data/zstd.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: zstd 3 | sidebar_position: 7 4 | --- 5 | 6 | # Zstandard 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | Zstandard is a compression algorithm developed by Facebook known for its extremely fast decompression speeds. It was released in early 2015 and is used in a variety of different contexts. It was designed to perform similarly to older Deflate-based compression algorithms like [ZIP](../data/zip.mdx) or [gzip](../data/gzip.mdx) while being faster overall. In practice, it is said to compress similarly to pure LZMA (part of [XZ](../data/xz.mdx) & [7-zip](../data/7z.mdx)) while being much faster. 13 | 14 | While `.tar.zstd` archives aren't as popular as `.tar.xz` or `.tar.gz`, Zstandard is already a very popular tool for compression in the world of open-source software. It has been integrated into both the FreeBSD kernel & the Linux kernel and is available as a filesystem compression method for the btrfs, squashfs, bcachefs, & OpenZFS filesystems. Filesystem compression refers to a compression scheme that transparently compresses files stored on a filesystem at all times, leading to an overall reduction in storage used across the filesystem. 15 | 16 | The command line `zstd` utility can compress to Zstandard at compression levels 1 through 19 by default. The upper bound is raised to 22 when passing the `--ultra` flag. All Arch Linux packages are compressed at zstd level 20, allowing Arch packages to be decompressed 14 times faster compared to XZ at the cost of an average 0.8% filesize increase across all packages. It is popular in the game emulation scene as well, as many game file formats for emulating console games support zstd compression. The ZIP file format standard actually supports Zstandard in compression level 93 since version 6.3.8, published in 2020. Content encoding using zstd is supported in chromium since Chromium 118 behind an experimental flag, meaning it might compete with [Brotli](./brotli.mdx) on the web in the future. Apple's LZFSE algorithm is purportedly similar to Zstandard compression level 6. 17 | 18 | Zstandard has the potential to effectively compete with nearly every modern compression method available across most modern use cases. In certain scenarios, if it takes off as a content delivery format, it could replace Brotli if the benefits of super-fast & super-light decode improve the responsiveness of web pages & are worth sacrificing a bit of compression ratio. When using the much higher effort settings, it often outcompetes Brotli for the archive size as well. In the future, `.tar.zst` could replace 7-zip, ZIP, or other archiving formats, making speedy decode a reality on systems featuring varying levels of compute horsepower. 19 | 20 | ## Usage 21 | :::note 22 | This guide has been written for the `zstd` command-line utility, however GUI archivers such as peazip and 7zip have growing support for zstd. 23 | ::: 24 | ## Compress a file 25 | Like many other compressing utilities, in order to compress mutliple files, one should probably archive them with [tar](./tar.mdx). 26 | ```bash 27 | zstd -# {file} -o {file}.zstd 28 | ``` 29 | `-#` is actually a number that represents the desired compression level, for example `-3`, `-6`. By default you can specify 1-19. By also passing `-ultra`, you can go up to compression level 22. 30 | 31 | ## Decompress a file 32 | ```bash 33 | zstd -d {file}.zstd -o file 34 | ``` -------------------------------------------------------------------------------- /docs/encoders/AVM.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | label: AVM 3 | sidebar_position: 15 4 | --- 5 | 6 | # AVM 7 | 8 | > AVM (AOM Video Model) is the reference software for next codec from Alliance for Open Media. 9 | 10 | [AVM](https://gitlab.com/AOMediaCodec/avm), or **A**OM **V**ideo **M**odel is the reference implementation for a future codec from the Alliance for Open Media, the organization behind [AV1](../video/AV1.mdx). 11 | The codebase is under the Clear BSD license and currently only produces `av01` bitstreams. 12 | 13 | The AVM codec is currently in development and is not yet ready for production use. Not much has been documented or tested. 14 | 15 | 16 | ## Rumors 17 | 18 | Some things about the new encoding implementation can be confirmed via the codebase, but none of those changes are final until the codec is standardized and officially released. 19 | 20 | Some rumors about the codec include: 21 | 22 | - The name of the codec is going to be AV2, superseding AV1 23 | - The codec will be based on AV1, with certain backwards compatibility features available 24 | - Hardware decoding implementations could be implemented at no cost (no royalties) by utilizing GPU shaders and existing AV1 decoding hardware. 25 | - AOM's strategy will be to release codecs "mid-cycle" relative to ISO/ITU's release schedule, meaning it is likely that "AV2" will compete with [VVC](../video/VVC.mdx), not [ECM](../video/ECM.mdx). 26 | - A quantizer scale of 0-255 will be standard. 27 | - AVM tries to address some issues with high-fidelity AV1 encoding by introducing a better denoiser to mitigate [mosquito noise](../introduction/video-artifacts.mdx#mosquito-noise). 28 | 29 | 30 | ## Installation 31 | 32 | ### Arch Linux 33 | 34 | AVM is available in the Arch User Repository (AUR) as `avm` and `avm-git`. 35 | 36 | ### Compiling 37 | 38 | Since this encoder is under heavy development, there are no pre-built binaries provided, so you will need to compile yourself. 39 | Windows users are recommended to compile via MinGW-W64 which comes with [MSYS2](https://msys2.org/). 40 | 41 | :::caution 42 | Compilation requires CMake, Nasm, and Perl. 43 | ::: 44 | 45 | ```bash 46 | git clone https://gitlab.com/AOMediaCodec/avm.git 47 | cd avm/build 48 | cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=0 49 | make -j$(nproc) 50 | ``` 51 | 52 | Since this is a huge project, compiling will take a while depending on your CPU. 53 | 54 | The resulting binary will be called `aomenc`, the same name that encodes content to AV1. 55 | It will be available in the same folder (`build`), or you can run `make install` on Linux to install (May need elevated permissions). 56 | 57 | ## Usage 58 | 59 | :::tip 60 | To convert `cq-level` in aomenc and `crf` in SVT-AV1 to AVM's QP values, multiply by 4. For example, `--cq-level 20` equals to `--quantizer 60`. 61 | ::: 62 | 63 | Simple Y4M input with QP 65, and `ivf` output: 64 | ```bash 65 | aomenc --qp=65 -o output.ivf input.y4m 66 | ``` 67 | 68 | Preset level 6 (higher is faster), QP 65, Y4M input: 69 | ```bash 70 | aomenc --qp=65 --cpu-used=6 -o output.ivf input.y4m 71 | ``` 72 | 73 | FFmpeg piping: 74 | ```bash 75 | ffmpeg -v error -i input.mkv -f yuv4mpegpipe -strict -1 - | aomenc --qp=65 --cpu-used=6 -o output.ivf - 76 | ``` 77 | 78 | ## aomdec 79 | 80 | You will need the `aomdec` binary you also compiled to be able to play your encoded video, as there are **zero** video players currently in the whole world that can play your encoded content. -------------------------------------------------------------------------------- /docs/encoders/Aurora1.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | label: Aurora1 AV1 3 | sidebar_position: 7 4 | --- 5 | 6 | # Aurora1 AV1 7 | 8 | [Aurora1 AV1](https://visionular.ai/aurora1-av1-encoder/) is a proprietary and paid software AV1 encoder developed by [Visionular](https://www.visionular.com/en). Although they do provide a contact form to get a free trial, not much is known about this encoder. 9 | -------------------------------------------------------------------------------- /docs/encoders/HM.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: HM 3 | sidebar_position: 16 4 | --- 5 | 6 | # HM 7 | 8 | :::caution Pending Review 9 | The content in this entry may not be entirely accurate, & is pending further review to assess the quality of the information. 10 | ::: 11 | 12 | HM is the original [H.265](../video/HEVC.mdx) reference encoder, predating alternatives like [x265](../encoders/x265.mdx). In the modern day, it joins other MPEG reference encoders such as [JM](../encoders/JM.mdx) & [VTM](../encoders/VTM.mdx) in their reputations for being highly niche offerings that are used rarely due to their usage complexity & speed disadvantages. x264 is more efficient than JM. 13 | 14 | HM is capable of producing higher quality streams than highly tuned x265, even at excruciatingly slow speeds. This is only a theoretical advantage, though, as HM is incapable of placing keyframes automatically with scene detection & would need a chunking too reminiscent of [Av1an](../utilities/av1an.mdx) to do this. For videos containing few enough frames where keyframe placement isn't a concern, HM is better in practice than x265 at the expense of a massive dropoff in speed. HM doesn't have any threading capabilities & is much slower than even x265 placebo. 15 | 16 | ## Installation 17 | 18 | These build instructions are valid for Linux & macOS. 19 | 20 | ```bash 21 | git clone https://vcgit.hhi.fraunhofer.de/jvet/HM 22 | cd HM/ 23 | mkdir build && cd build 24 | cmake .. -DCMAKE_BUILD_TYPE=Release 25 | make -j$(nproc) 26 | ``` 27 | 28 | The binary `TAppEncoderStatic` or `TAppEncoder` can be found within the cloned directories, & can be copied to `/usr/local/bin` for encoding. Decoding & other functions of the reference codec implementation aren't covered in this entry. 29 | 30 | ## Usage 31 | 32 | Here is a sample command: `TAppEncoderStatic -i input.yuv -b out.265 -c ~/HM/cfg/encoder_randomaccess_main10.cfg -wdt 1280 -hgt 720 -fr 50 -f 500 -q 27 -xPS 0` 33 | 34 | Make sure only to use only YUV input when encoding with HM. Each parameter does the following: 35 | 36 | - `-i input.yuv -b out.265` 37 | 38 | Specifies a raw YUV input file & an output raw h265 bitstream. To mux into an MP4 container, it is recommended that you use [mp4box](../utilities/mp4box.mdx) instead of muxing with [FFmpeg](../utilities/ffmpeg.mdx). 39 | 40 | - `-c [path/to/config]` 41 | 42 | Specifies the desired path to your HM configuration file. This makes it easier to encode without having to manually specify a plethora of settings. 43 | 44 | - `-wdt 1280 -hgt 720` 45 | 46 | Sets the input & output width & height. 47 | 48 | - `-fr 50 -f 500` 49 | 50 | Sets the framerate (FPS) & the number of frames to encode. In this case, we are encoding 500 frames of a video that is to be played back at 50fps. 51 | 52 | - `-q 27` 53 | 54 | Sets a quality target for the encoder. 55 | 56 | - `-xPS 0` 57 | 58 | Zero clue what this does. If someone has an idea, please contribute! -------------------------------------------------------------------------------- /docs/encoders/JM.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: JM 3 | sidebar_position: 17 4 | --- 5 | 6 | # JM 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | JM is the original [H.264](../video/AVC.mdx) reference encoder, predating alternatives like [x264](../encoders/x264.mdx). Since x264 became highly performant and perceptually driven, it joins other MPEG reference encoders such as [HM](../encoders/HM.mdx) & [VTM](../encoders/VTM.mdx) in their reputations for being highly niche offerings that are used rarely due to their usage complexity & speed disadvantages. x264 is generally more efficient than JM. -------------------------------------------------------------------------------- /docs/encoders/Kvazaar.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Kvazaar 3 | sidebar_position: 11 4 | --- 5 | 6 | import Tabs from '@theme/Tabs'; 7 | import TabItem from '@theme/TabItem'; 8 | 9 | # Kvazaar 10 | 11 | [Kvazaar](https://github.com/ultravideo/kvazaar) is an open-source [H.265 / HEVC](/docs/video/HEVC) software encoder Written in C, developed by [Ultra Video Group](https://ultravideo.fi/) and licensed under BSD 3-clause. 12 | 13 | [uvg266](/docs/encoders/uvg266) (Developed by the same group) uses Kvazaar as a base for encoding to the [VVC](/docs/video/VVC) codec. 14 | 15 | [x265](/docs/encoders/x265) is generally regarded as having better performance while producing better quality video streams. 16 | 17 | ## FFmpeg 18 | 19 | Kvazaar is available in [FFmpeg](../utilities/ffmpeg.mdx) via ``libkvazaar``, to check if you have it, run ``ffmpeg -h encoder=libkvazaar``. You can input non-FFmpeg standard Kvazaar parameters via ``-kvazaar-params``. 20 | 21 | You may need to download "Full" builds. As most of the time, this encoder is not included. 22 | 23 | ## Supported Color Space 24 | 25 | Kvazaar supports the following color spaces: 26 | 27 | | Format | Chroma Subsampling | Supported Bit Depth(s)| 28 | |------------------|:------------------:|-----------------------| 29 | | YUV420P | 4:2:0 | 8-bit | 30 | | YUV420P10LE | 4:2:0 | 10-bit* | 31 | 32 | *10-bit support requires a flag to be set during compilation with CMake. 33 | 34 | ## Installation 35 | 36 | 37 | 38 | For Arch Linux, Kvazaar is available as `kvazaar`. It is also available in the Arch User Repository (AUR) as `kvazaar-git`. 39 | 40 | Ultra Video Group does not ship any pre-built binaries of their encoders except for their [AppVeyor CI](https://ci.appveyor.com/project/Ultravideo/kvazaar), but AppVeyor deletes build artifacts after a month, so most of the time you'll have to compile Kvazaar yourself. Here are the instructions to do so: 41 | 42 | ### Autotools 43 | 44 | 0. Compilation requires GNU Automake, Autoconf, Libtool, and M4. Install them via your package manager. 45 | 46 | 1. Clone the repository and its submodules: 47 | ```bash 48 | git clone --recursive https://github.com/ultravideo/kvazaar.git 49 | cd kvazaar 50 | ./autogen.sh 51 | ./configure 52 | make -j$(nproc) 53 | ``` 54 | 55 | 3. Binaries will be available in `src`, or you can run `make install` on Linux to install (May need elevated permissions). 56 | 57 | ### CMake (10-bit support) 58 | 59 | You will need to use CMake to specify a flag to be able to encode 10-bit with the encoder; by default Kvazaar ships with only 8-bit. 60 | 61 | ```bash 62 | git clone --recursive https://github.com/ultravideo/kvazaar.git 63 | cd kvazaar/build 64 | cmake .. -DCMAKE_C_FLAGS="-DKVZ_BIT_DEPTH=10" # optional 10-bit flag 65 | make -j$(nproc) 66 | ``` 67 | 68 | Be aware that encoding 10-bit HEVC with Kvazaar is significantly slower, as the developers only prioritized SIMD optimizations for 8-bit encoding. Be aware that this implementation can be buggy in general. 69 | 70 | 71 | Windows users are recommended to compile via MinGW-W64 which comes with [MSYS2](https://msys2.org/). Please be advised **the usage of Clang for compiling in this situation is heavily recommended** 72 | due to disabled AVX2 optimizations because of a known GCC issue from 2012 (MinGW environments-exclusive). To do this, run `CC=clang ./configure` during autoconf. 73 | 74 | ### MSYS2 75 | 76 | 0. Make sure you have downloaded & installed MSYS2 from [the MSYS2 website](https://www.msys2.org/) before beginning the build process. 77 | 78 | 1. Start the UCRT64 console & install the required dependencies with the `pacman` package manager 79 | 80 | 3. Resume the build process as you would on a Unix-like system. See the "Linux & macOS" tab for more information. 81 | 82 | 83 | 84 | ## Usage 85 | 86 | Here are some examples of how to use Kvazaar on its own: 87 | 88 | ```bash title="Simple Y4M input with QP 20 and raw 265 bitstream output" 89 | kvazaar -i input.y4m --input-file-format y4m --qp 20 -o output.265 90 | ``` 91 | 92 | ```bash title="Preset slow, CRF 20, Y4M input" 93 | kvazaar -i input.y4m --input-file-format y4m --qp 20 --preset slow -o output.265 94 | ``` 95 | 96 | The command below still uses the `kvazaar` binary, but reads from a YUV4MPEG pipe instead of a file. This is useful for piping FFmpeg output to Kvazaar. 97 | 98 | ```bash title="FFmpeg piping" 99 | ffmpeg -v error -i input.mkv -f yuv4mpegpipe -strict -1 - | kvazaar -i - --input-file-format y4m --qp 20 --preset slow -o output.265 100 | ``` 101 | -------------------------------------------------------------------------------- /docs/encoders/SVT-VP9.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: SVT-VP9 3 | sidebar_position: 9 4 | --- 5 | 6 | # SVT-VP9 7 | 8 | :::info Under Maintenance 9 | The content in this entry is incomplete & is in the process of being completed. 10 | ::: 11 | 12 | SVT-VP9 is a [VP9](../video/VP9.mdx) encoder developed by Intel.
13 | Like [its](../encoders/SVT-HEVC.mdx) [siblings](../encoders/SVT-AV1.mdx) in the SVT encoder family, it scales very well on multicore processors by default. 14 | 15 | The [reference encoder](../encoders/vpxenc.mdx) beats it in rate control flexibility and supports 10-bit color,
but SVT-VP9 is much faster out of the box. 16 | 17 | ## FFmpeg 18 | There are patches bundled in the SVT-VP9 source code for an FFmpeg plugin that adds the `libsvt_vp9` encoder.
19 | One must recompile FFmpeg with the plugin patch applied to take advantage of it.
20 | (An easy way to do so on Windows is using [media-autobuild_suite](https://github.com/m-ab-s/media-autobuild_suite).) 21 | 22 | Operation is not too different from the SVT-AV1 FFmpeg integration. Your commands will generally look like this:
23 | `ffmpeg -i video.mp4 -c:v libsvt_vp9 -qp 38 -tune ssim -preset 7 -g 255 video_vp9.webm` 24 | 25 | 26 |
27 | Parameters 28 | 29 | | Parameter | Description | 30 | |------------------|-------------| 31 | | -qp | Quantizer value, higher = lower quality. Range is 1..51 in current patches, but -qmin/-qmax can be set as high as 69 for extreme low bitrates. | 32 | | -preset | Speed preset. Range is 0..9, with 9 being fastest and default. | 33 | | -tune | Quality metric. Can be "vq" (default), "ssim" or "vmaf". | 34 | | -g | Size of the Group of Pictures. Range is -2..255, with -1 = no intraframe updates ever, -2 = "auto".
We recommend you set it as high as possible for encode efficiency. | 35 | | -rc | Rate control mode.
Can be "cqp" (Constant Quantizer, default), "vbr" (Variable Bitrate) or "cbr" (Constant Bitrate).
(Consider using **vpxenc's two-pass mode** if you really need to match a target bitrate.) | 36 | | -level | Encoder level. Range is 1..6. Generally better not to set it. | 37 | | -socket | Index of the CPU socket to use. By default it's -1, which uses "all available processors". | 38 | 39 |
40 | 41 | ## Supported Color Space 42 | 43 | SVT-VP9 only supports 8-bit yuv420p. 44 | 45 | ## Usage 46 | ### Standalone 47 | To be filled. If you believe you can help, see our [Contribution Guide](../contribution-guide.mdx). -------------------------------------------------------------------------------- /docs/encoders/VTM.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: VTM 3 | sidebar_position: 14 4 | --- 5 | 6 | # VTM 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | VTM is the original [H.266](../video/VVC.mdx) (better known as VVC) reference encoder, in competition with alternatives like [VVenC](../encoders/VVenC.mdx). In the modern day, it joins other MPEG reference encoders such as [HM](../encoders/HM.mdx) & [JM](../encoders/JM.mdx) in their reputations for being highly niche offerings that are used rarely due to their usage complexity & speed disadvantages; however, VTM may be more useful due to the current difficulty facing VVC encoding regardless of the encoding implementation one chooses to use. x264 is more efficient than JM. -------------------------------------------------------------------------------- /docs/encoders/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "💾 Encoders", 3 | "position": 5 4 | } 5 | -------------------------------------------------------------------------------- /docs/encoders/aom-psy101.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: aom-psy101 3 | sidebar_position: 19 4 | keywords: [AV1, encoding, video encoding, AOM AV1] 5 | --- 6 | 7 | import Tabs from '@theme/Tabs'; 8 | import TabItem from '@theme/TabItem'; 9 | 10 | # aom-psy101 11 | 12 | :::info Under Maintenance 13 | The content in this entry is incomplete & is in the process of being completed. 14 | ::: 15 | 16 | :::info Community Fork 17 | This entry is about a fork of aomenc called aom-psy101. If you'd like to learn about the mainline aomenc encoder before reading, visit our [aomenc wiki entry](./aomenc.mdx). 18 | ::: 19 | 20 | Mainline aomenc is unfortunately not perfect. It suffers from bad defaults, a heavy focus on the perceptually flawed [PSNR](../metrics/PSNR.mdx) metric, misleading settings, and other issues. Fortunately, there are a couple of forks developed by the encoding community that were created to combat aomenc's underlying issues. 21 | 22 | - [aom-av1-psy](https://github.com/BlueSwordM/aom-av1-psy) *No longer maintained as of 13th January 2023* 23 | - [aom-av1-lavish](./aom-av1-lavish.mdx) *No longer maintained as of 4th June 2024* 24 | - [aom-psy101](https://gitlab.com/damian101/aom-psy101) 25 | - [aom-av1ador](https://github.com/porcino/aom-av1ador) 26 | 27 | These forks fix up the poor decisions made by the original AOM devs and most importantly introduce new parameters and tunes to help fine-tune the encoder even more. 28 | 29 | [aom-psy101](https://gitlab.com/damian101/aom-psy101) is a fork of aomenc that aims to improve the encoding quality and speed of AV1. It is developed by [damian101](https://gitlab.com/damian101), a talented AV1 community developer. 30 | 31 | ## FFmpeg 32 | 33 | aomenc is available in FFmpeg via ``libaom-av1``, check if you have it by running ``ffmpeg -h encoder=libaom-av1``. You can input non-FFmpeg standard aomenc parameters via ``-aom-params``. 34 | 35 | :::caution Mainline aomenc 36 | Unless you compile FFmpeg yourself with aom-psy101, you will be using the mainline aomenc. Compiling from source yourself with the aomenc libraries provided by aom-psy101 is the only way to use it with FFmpeg. 37 | ::: 38 | 39 | ## Installation 40 | 41 | 42 | 43 | 1. Clone the psy101 repo: 44 | ```bash title="Clone the psy101 repo" 45 | git clone https://gitlab.com/damian101/aom-psy101 46 | cd aom-psy101 && mkdir aom_build && cd aom_build 47 | ``` 48 | 49 | 2. Configure compilation. The following flags are set to ensure the `aomenc` binary is build for optimal performance: 50 | ```bash title="Set CMake flags" 51 | cmake .. -DBUILD_SHARED_LIBS=0 -DENABLE_DOCS=0 -DCONFIG_TUNE_BUTTERAUGLI=0 -DCONFIG_TUNE_VMAF=0 -DCONFIG_AV1_DECODER=0 -DENABLE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-flto -pipe -march=native" -DCMAKE_C_FLAGS="-flto -pipe -march=native" 52 | ``` 53 | 54 | 3. Compile: 55 | ```bash title="Compile" 56 | make -j$(nproc) 57 | ``` 58 | 59 | 4. Install to your system. This may require elevated privileges: 60 | ```bash title="Install" 61 | make install 62 | ``` 63 | 64 | 65 | **MSYS2** is the best option for building in Windows, as it provides a Unix-like environment for compilation. 66 | 67 | 0. Make sure you have downloaded & installed MSYS2 from [the MSYS2 website](https://www.msys2.org/) before beginning the build process. 68 | 69 | 1. Close any MSYS2 Console that you have open, start the Clang64 console & install the required dependencies: 70 | ```bash 71 | pacman -S git perl mingw-w64-clang-x86_64-clang mingw-w64-clang-x86_64-ninja mingw-w64-clang-x86_64-cmake mingw-w64-clang-x86_64-nasm 72 | ``` 73 | 74 | 2. Clone the psy101 repo: 75 | ```bash title="Clone the psy101 repo" 76 | git clone https://gitlab.com/damian101/aom-psy101 77 | cd aom-psy101 && mkdir aom_build && cd aom_build 78 | ``` 79 | 80 | 2. Configure compilation. The following flags are set to ensure the `aomenc` binary is build for optimal performance: 81 | ```bash title="Set CMake flags" 82 | LDFLAGS=-static cmake .. -DBUILD_SHARED_LIBS=0 -DENABLE_DOCS=0 -DCONFIG_TUNE_BUTTERAUGLI=0 -DCONFIG_TUNE_VMAF=0 -DCONFIG_AV1_DECODER=0 -DENABLE_TESTS=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-flto -pipe -march=native" -DCMAKE_C_FLAGS="-flto -pipe -march=native" 83 | ``` 84 | 85 | 3. Compile: 86 | ```bash title="Compile" 87 | ninja 88 | ``` 89 | 90 | The resulting binary will be available within the home folder of the location where you installed MSYS2 (usually `C:`). Navigate there, and then to `aom-psy101\aom_build` folder; the binary should be there. 91 | 92 | 93 | -------------------------------------------------------------------------------- /docs/encoders/eve-av1.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Eve-AV1 3 | sidebar_position: 22 4 | --- 5 | 6 | # Eve-AV1 7 | 8 | Eve-AV1 is a proprietary [AV1](../video/AV1.mdx) video encoder developed by Two Orioles, LLC, an organization primarily known for their work on [dav1d](../utilities/dav1d.mdx), the most widely used AV1 software decoder. 9 | 10 | According to the Two Orioles [webpage on Eve-AV1](https://www.twoorioles.com/eve-av1): 11 | 12 | > Eve-AV1 gives you an unprecedented level of video quality for streaming on-demand video. It provides a 20% reduction in bitrate at the same visual quality compared to other AV1 encoders. Or you can choose a 3 to 5 times speedup in encoding time 13 | 14 | A single visual comparison is provided, alongside BD-rate graphs for [VMAF](../metrics/VMAF.mdx). 15 | 16 | ## Performance 17 | 18 | ![Eve-AV1 VMAF performance](/img/eve_av1_speed.webp) 19 | 20 | Eve-AV1 appears to perform quite well according to VMAF, and is able to do so at what appear to be impressive speeds. However, without more detailed visual comparisons, it is hard to take this data at face value. 21 | -------------------------------------------------------------------------------- /docs/encoders/eve-vp9.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Eve-VP9 3 | sidebar_position: 21 4 | --- 5 | 6 | # Eve-VP9 7 | 8 | Eve-VP9 is a proprietary [VP9](../video/VP9.mdx) video encoder developed by Two Orioles, LLC, an organization primarily known for their work on [dav1d](../utilities/dav1d.mdx), the most widely used AV1 software decoder. 9 | 10 | According to the Two Orioles [webpage on Eve-VP9](https://www.twoorioles.com/eve-vp9): 11 | 12 | > At top quality, EVE-VP9 provides nearly 20% better compression than libvpx at the same speed; 10% better compression than x265 at 50% faster speed; and compared to x264, EVE-VP9 is nearly 40% better. 13 | 14 | Sparse visual comparisons and BD-rate graphs for VMAF are provided by the company, but no further details are available. 15 | 16 | ## Performance 17 | 18 | ![Eve-VP9 VMAF performance](/img/eve_vp9_speed.webp) 19 | 20 | Eve-VP9 appears to perform quite well according to VMAF, and is able to do so at what appear to be impressive speeds. However, without more detailed visual comparisons, it is hard to take this data at face value. 21 | -------------------------------------------------------------------------------- /docs/encoders/uavs3e.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: uavs3e 3 | sidebar_position: 20 4 | keywords: [avs3, encoding, video encoding] 5 | --- 6 | import Tabs from '@theme/Tabs'; 7 | import TabItem from '@theme/TabItem'; 8 | 9 | # uavs3e 10 | 11 | [uavs3e](https://github.com/uavs3/uavs3e/) is an open-source encoder for the [AVS3](/docs/video/AVS3) codec, developed by Chinese research institutions including Peking University Shenzhen Graduate School, Peng Cheng Laboratory, and Guangdong Bohua UHD Innovation Corporation. 12 | 13 | The encoder receives infrequent updates, which may result in bugs and compilation issues. It supports AMD64 with AVX2, ARM with NEON, and LoongArch CPUs. 14 | 15 | ## Installation 16 | 17 | 18 | 19 | The developers do not provide pre-built binaries, so you'll need to compile it yourself. Compilation requires GNU Make and CMake. As of August 2024, `uavs3e` does not compile with GCC 14, using Clang 18 instead resolves this issue. 20 | 21 | ```bash 22 | git clone https://github.com/uavs3/uavs3e.git 23 | cd uavs3e 24 | mkdir build/linux && cd build/linux 25 | cmake ../.. -DCOMPILE_10BIT=0 -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ 26 | make -j 8 27 | ``` 28 | 29 | If you encounter undefined calls to `close` or `lseek64` functions, add the following two lines at the top of the `test/utest.c` file: 30 | 31 | ```c 32 | #define _LARGEFILE64_SOURCE 33 | #include 34 | ``` 35 | 36 | Binaries will be available in the `build/linux` folder. On Linux, you can run `make install` to install the encoder (may require elevated permissions). 37 | 38 | 39 | 40 | 1. Ensure you have the following prerequisites installed before starting the build process: 41 | - [Microsoft C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/): Select "Desktop development with C++". 42 | - [Git](https://git-scm.com/download/win) 43 | 44 | 2. Open Developer PowerShell for VS 2022. 45 | 46 | 3. Run the following commands: 47 | 48 | ```bash 49 | git clone https://github.com/uavs3/uavs3e.git 50 | cd uavs3e 51 | .\version.bat 52 | cd build\x86_windows 53 | devenv uavs3e.sln /Upgrade 54 | msbuild uavs3e.sln /p:Configuration=Release /p:WindowsTargetPlatformVersion=10.0 55 | ``` 56 | 57 | Binaries will be available in the `bin` folder. 58 | 59 | 60 | 61 | 62 | ### 10-bit Support 63 | 64 | 65 | 66 | To enable 10-bit support, set `-DCOMPILE_10BIT=1` in the CMake command. However, the encoder compiled with this flag has been reported to cause [segmentation faults](https://github.com/uavs3/uavs3e/issues/53) on some systems. 67 | 68 | 69 | To enable 10-bit support, change the line `#define COMPILE_10BIT 0` to `#define COMPILE_10BIT 1` in the `inc/com_api.h` file. 70 | 71 | 72 | 73 | ## Usage 74 | 75 | The encoder cannot parse `.y4m` files, they need to be converted to raw video (`.yuv`) format. 76 | 77 | ```bash title="Simple 8-bit FHD 23.976 fps input with QP 20 and raw avs3 bitstream output" 78 | uavs3enc -i input.yuv -w 1920 -h 1080 -d 8 --fps_num 24000 --fps_den 1001 -q 20 -o output.avs3 79 | ``` 80 | 81 | ```bash title="Speed 2, CRF 20, intra period 120, multithreaded" 82 | uavs3enc -i input.yuv -w 1920 -h 1080 -d 8 --fps_num 24000 --fps_den 1001 -p 120 --wpp_threads 8 --frm_threads 8 --speed_level 2 --rc_type 1 -q 20 -o output.avs3 83 | ``` 84 | 85 | Currently, uavs3e [does not support piping](https://github.com/uavs3/uavs3e/issues/2). 86 | 87 | ## Notes 88 | 89 | 1. Usable speed presets range from 0 to 4, where 0 is the slowest and 4 is the fastest. 90 | 2. The encoder can be quite competitive, even compared with the newest [AV1](../video/AV1.mdx) and [VVC](../video/VVC.mdx) encoders in terms of visual fidelity. 91 | 3. `uavs3d` can be used to decode the output bitstream. For real-time playback, you need to have [FFmpeg](/docs/utilities/ffmpeg) compiled with `--enable-libuavs3d`. -------------------------------------------------------------------------------- /docs/encoders/uvg266.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: uvg266 3 | sidebar_position: 13 4 | --- 5 | 6 | # uvg266 7 | 8 | [uvg266](https://github.com/ultravideo/uvg266/) is an open-source software encoder for encoding to the [H.266 / VVC](/docs/video/VVC) codec. Developed by the [Ultra Video Group](https://ultravideo.fi/), written in C and licensed under BSD 3-clause. 9 | The encoder is based on [Kvazaar](/docs/encoders/Kvazaar), their open source [HEVC](/docs/video/HEVC) encoder solution. 10 | 11 | ## Installation 12 | 13 | ### Arch Linux 14 | 15 | uvg266 is available in the Arch User Repository (AUR) as `uvg266` and `uvg266-git`. 16 | 17 | ### Compiling 18 | Ultra Video Group does not ship any pre-built binaries of their encoders so you'll have to compile them yourself. 19 | 20 | Windows users are recommended to compile via MinGW-W64 which comes with [MSYS2](https://msys2.org/). 21 | 22 | :::caution 23 | Compilation requires GNU Make and CMake 24 | ::: 25 | 26 | :::tip 27 | The following build procedure should work across all common operating systems. Using Clang instead of GCC works. 28 | 29 | You may add `-DCMAKE_CXX_FLAGS="-flto -O3 -march=native" -DCMAKE_C_FLAGS="-flto -O3 -march=native -pipe -fno-plt" -DCMAKE_C_FLAGS_INIT="-flto=8 -static"` in CMake for better performance. 30 | ::: 31 | 32 | ```bash 33 | git clone https://github.com/ultravideo/uvg266.git 34 | cd uvg266/build 35 | cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=0 36 | make -j 8 37 | ``` 38 | 39 | Binaries will be available in the same folder (`build`), or you can run `make install` on Linux to install (May need elevated permissions). 40 | 41 | ### 10-bit Support 42 | 43 | You need to compile with `-DUVG_BIT_DEPTH=10` in the CMake `-DCMAKE_C_FLAGS` option to enable support for encoding 10-bit videos. 44 | 45 | For example: 46 | ```bash 47 | -DCMAKE_C_FLAGS="-DUVG_BIT_DEPTH=10" 48 | ``` 49 | With native optimizations: 50 | ```bash 51 | -DCMAKE_C_FLAGS="-flto -O3 -march=native -pipe -fno-plt -DUVG_BIT_DEPTH=10" 52 | ``` 53 | 54 | :::warning 55 | Encoding 10-bit with uvg266 is significantly slower as the developers only prioritized SIMD optimizations for 8-bit, and can get really buggy. 56 | ::: 57 | 58 | ## Usage 59 | 60 | ```bash title="Simple Y4M input with QP 20 and raw 266 bitstream output" 61 | uvg266 -i input.y4m --input-file-format y4m --qp 20 -o output.266 62 | ``` 63 | 64 | ```bash title="Preset slow, CRF 20, Y4M input" 65 | uvg266 -i input.y4m --input-file-format y4m --qp 20 --preset slow -o output.266 66 | ``` 67 | 68 | ```bash title="FFmpeg piping" 69 | ffmpeg -v error -i input.mkv -f yuv4mpegpipe -strict -1 - | uvg266 -i - --input-file-format y4m --qp 20 --preset slow -o output.266 70 | ``` 71 | 72 | ## Troubleshooting 73 | 74 | 1. `Could not find a strategy for crc32c_8x8!` - You're out of luck, uvg266 failed to initialize its block partitioning strategy for your specific CPU instruction set, so you **can't use the encoder or encode that specific video**. -------------------------------------------------------------------------------- /docs/encoders/x266.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: x266 3 | sidebar_position: 3 4 | --- 5 | 6 | # x266 7 | 8 | x266 is an upcoming software encoder for the [H.266 / VVC](/docs/video/VVC) codec. Very little is currently known about the encoder other than the fact it is still being developed by [MulticoreWare](https://multicorewareinc.com) 9 | and it's dedicated FAQ page after the [31st January 2023 Webinar FAQ](https://multicorewareinc.com/faq-webinar/x266-faq.html). 10 | 11 | According to their FAQ, H2 2023 is their "very rough and approximate" ETA for a v1.0 public release, but so far there have been no updates as of 14th October, 2024. 12 | -------------------------------------------------------------------------------- /docs/encoders_hw/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "🚀 Hardware Encoders", 3 | "position": 5 4 | } -------------------------------------------------------------------------------- /docs/encoders_hw/amf.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: AMF 3 | sidebar_position: 3 4 | --- 5 | 6 | # AMF 7 | 8 | :::caution Pending Review 9 | The content in this entry may not be entirely accurate, & is pending further review to assess the quality of the information. 10 | ::: 11 | 12 | AMF for AMD GPUs allows applications to take advantage of the dedicated video encoding & decoding hardware present in AMD GPUs. 13 | 14 | The AMD Advanced Media Framework (AMF) is a low-level API developed by AMD that enables developers to leverage hardware-accelerated video encoding & decoding on AMD GPUs. By utilizing specialized hardware on the GPU's media block, video encoding and decoding tasks can be offloaded from the CPU, resulting in drastic speed & efficiency increases. AMF provides multimedia processing functionality to applications, and competes with Nvidia's [NVENC](./nvenc.mdx) & Intel's [QSV](./qsv.mdx) for similar functionality. 15 | 16 | AMF provides support for various video codecs, including [H.264](../video/AVC.mdx) , [H.265](../video/HEVC.mdx), [VP9](../video/VP9.mdx), and more recently [AV1](../video/AV1.mdx) on the latest supported GPUs. The GPU's encoding capabilities are especially useful for compressing video content in real-time, where speed is of greater importance than coding efficiency. 17 | 18 | Hardware-accelerated video encoding using AMF usually significantly improves encoding performance at low compression efficiency compared to software-based encoding solutions. It usually allows for higher-quality output at lower bitrates when encoding much faster than real time, such as at 60-200 fps. This is particularly beneficial for applications that require real-time encoding, such as live streaming, video conferencing, and game recording. 19 | 20 | However, slower software encoding solutions almost always offer improvements in fidelity per bit compared to hardware encoding. For offline re-encoding & storage, software encoding is generally preferred. AMF in particular is not known for having strong compression efficiency, as it is hampered by AMD's comparably weak media blocks which are usually outperformed by other hardware implementations from Nvidia, Intel, & Apple. 21 | 22 | AMF is designed to integrate seamlessly with popular media frameworks and libraries, such as [FFmpeg](../utilities/ffmpeg.mdx) and GStreamer. These frameworks often include AMF support, allowing developers to easily incorporate hardware-accelerated encoding into their applications without the need for low-level API programming. 23 | 24 | AMF is compatible with a wide range of AMD GPUs, including both discrete and integrated graphics solutions. It supports various operating systems, including Windows and Linux, making it accessible to developers across different platforms. 25 | -------------------------------------------------------------------------------- /docs/encoders_hw/mediacodec.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Mediacodec 3 | sidebar_position: 5 4 | --- 5 | 6 | # Mediacodec 7 | 8 | The Android's MediaCodec framework is a part of Android's multimedia framework that provides access to low-level media encoder & decoder components. It is similar to [VideoToolbox](./videotoolbox.mdx) on Apple devices. Hardware acceleration with MediaCodec is used for processing audio, video, and compressed data. 9 | 10 | One of the key features of the MediaCodec framework is its support for automatic media transcoding within the operating system. Introduced in Android 12, media transcoding features of the operating system allow devices to use more modern, storage-efficient media formats for video capture while maintaining compatibility with apps. For devices with compatible media transcoding enabled, Android can automatically convert videos recorded in formats such as [H.265](../video/HEVC.mdx) when the videos are opened by an app that doesn't support the format. This allows apps to function even when videos are captured in newer formats on the device. 11 | 12 | ## Usage 13 | 14 | In order to view your device's supported hardware and software encoders exposed by the MediaCodec framework, it is advised to download the open source [Codec Info](https://play.google.com/store/apps/details?id=com.parseus.codecinfo) application. 15 | 16 | Once you know how to properly interact with your device's hardware encoders, [FFmpeg](../utilities/ffmpeg.mdx) will help you transcode videos easily from the command line. 17 | 18 | ### FFmpeg 19 | 20 | Testing for this piece was done on the Google Pixel 8, which featurs the Tensor G3 SoC. It is Exynos-based, so [H.264](../video/AVC.mdx), H.265 (HEVC), and [VP9](../video/VP9.mdx) hardware acceleration for encoding are provided by the Exynos media block. AV1 encoding and decoding are available on the Tensor G3 provided by a custom Google multimedia block. 21 | 22 | The Exynos's hardware implementation for encoding H.264 and H.265 does not support CQ (Constant Quality) encoding, so a target bitrate must be provided for either CBR (Constant Bitrate) or VBR (Variable Bitrate) encoding. Google's AV1 implementation is in the same situation. 23 | 24 | Some example MediaCodec encoding commands with FFmpeg: 25 | 26 | ```bash title="H.264 encoding (VBR, target bitrate 4000K, 250-frame GOP size)" 27 | ffmpeg -i input.mkv -c:v h264_mediacodec -codec_name c2.exynos.h264.encoder -bitrate_mode 1 -b:v 4000K -g 250 output.mp4 28 | ``` 29 | 30 | ```bash title="H.265 encoding (VBR, target bitrate 4000K, 250-frame GOP size)" 31 | ffmpeg -i input.mkv -c:v hevc_mediacodec -codec_name c2.exynos.hevc.encoder -bitrate_mode 1 -b:v 4000K -g 250 output.mp4 32 | ``` 33 | VP9 encoding produces video that is severely distorted relative to the bitrate, and AV1 encoding produces broken files without metadata. 34 | 35 | ```bash title="VP9 encoding (VBR, target bitrate 9000K, 250-frame GOP size)" 36 | ffmpeg -i input.mkv -c:v vp9_mediacodec -codec_name c2.exynos.vp9.encoder -bitrate_mode 1 -b:v 9000K -g 250 output.mkv 37 | ``` 38 | ```bash title="AV1 encoding (VBR, target bitrate 8000K, 250-frame GOP size)" 39 | ffmpeg -i input.mkv -c:v av1_mediacodec -codec_name c2.google.av1.encoder -bitrate_mode 1 -b:v 8000K -g 250 output.mp4 40 | ``` 41 | 42 | Just run `ffmpeg -help encoder=hevc_mediacodec` or `ffmpeg -help encoder=h264_mediacodec` for more info on how to use your MediaCodec encoders. You can choose a value for `-codec_name` based on what is shown in the Codec Info app. 43 | 44 | *Sources* 45 | (1) MediaCodec | Android Developers. https://developer.android.com/reference/android/media/MediaCodec. 46 | (2) Media | Android Open Source Project. https://source.android.com/docs/core/media. -------------------------------------------------------------------------------- /docs/encoders_hw/nvenc.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: NVENC 3 | sidebar_position: 1 4 | --- 5 | 6 | # NVENC 7 | 8 | :::caution Pending Review 9 | The content in this entry may not be entirely accurate, & is pending further review to assess the quality of the information. 10 | ::: 11 | 12 | NVENC for NVIDIA GPUs is a dedicated hardware video encoding engine integrated into NVIDIA's graphics processors. It allows applications to leverage dedicated multimedia encoding hardware to accelerate video encoding tasks, significantly improving performance when compared to CPU-based software encoding. It competes with similar frameworks like Intel's [QSV](./qsv.mdx) & AMD's [AMF](./amf.mdx). 13 | 14 | The primary purpose of NVENC is to offload the computationally intensive video encoding workloads from the CPU to the dedicated multimedia hardware on the GPU, thereby freeing up CPU resources for other tasks. This is particularly beneficial in scenarios where fast video encoding is required, such as screen recording, streaming, & video conferencing. 15 | 16 | NVENC supports a range of popular video codecs, including [H.264](../video/AVC.mdx) , [H.265](../video/HEVC.mdx), [VP9](../video/VP9.mdx), and more recently [AV1](../video/AV1.mdx) on their latest GPUs. It provides hardware-accelerated encoding capabilities for these codecs, typically achieving real-time or faster than real-time encoding performance, depending on resolution, bitrate, and hardware capability. 17 | 18 | While NVENC excels in encoding speed, it generally sacrifices some compression efficiency compared to modern high-quality CPU-based software encoders at slower presets. 19 | 20 | NVENC is designed to be easily integrated into various multimedia frameworks and applications. It is supported by popular tools like [FFmpeg](../utilities/ffmpeg.mdx), OBS Studio, and others, allowing developers to seamlessly leverage GPU-accelerated encoding without the need for low-level programming. 21 | 22 | When compared to AMD's AMF and Intel's QSV, NVENC is known for its high encoding performance, low latency, and broad compatibility with NVIDIA GPUs across different platforms. It is particularly popular among game streamers, content creators, and video professionals who require fast encoding speeds for their workflows. In terms of video compression efficiency, NVENC & QSV trade blows while AMF is generally left behind. 23 | -------------------------------------------------------------------------------- /docs/encoders_hw/qsv.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: QSV 3 | sidebar_position: 2 4 | --- 5 | 6 | # QSV 7 | 8 | :::caution Pending Review 9 | The content in this entry may not be entirely accurate, & is pending further review to assess the quality of the information. 10 | ::: 11 | 12 | QSV (QuickSync Video) is Intel's hardware video encoding/decoding platform integrated into many of their modern CPUs with integrated graphics processors (iGPUs) & their Arc graphics cards. It allows applications to offload video encoding, decoding, and processing tasks to the dedicated media engines on Intel's dedicated multimedia hardware, often providing significant performance gains compared to CPU-based software encoding. QSV competes with similar frameworks like Nvidia's [NVENC](./nvenc.mdx) & AMD's [AMF](./amf.mdx) (Since the transition to Apple Silicon, QSV on Intel Macs competes with Apple's [VideoToolBox](./videotoolbox.mdx) on macOS devices). 13 | 14 | The key purpose of QSV is to accelerate video encoding, decoding, and processing workloads by leveraging specialized fixed-function hardware present in Intel's graphics processors. This dedicated hardware is distinct from the general-purpose compute units, and is designed specifically for multimedia tasks. QSV aims to deliver high encoding/decoding performance while operating efficiently. 15 | 16 | QSV supports a wide range of video codecs including [H.264](../video/AVC.mdx) , [H.265](../video/HEVC.mdx), [VP9](../video/VP9.mdx), and more recently [AV1](../video/AV1.mdx) on their latest discrete & integrated GPUs. A major advantage of QSV is that it is ubiquitous on most modern Intel CPUs with integrated graphics, making hardware-accelerated video encoding accessible across a wide range of systems. Applications can easily leverage QSV acceleration through APIs like Intel Media SDK, VA-API, or via integration with popular multimedia frameworks like [FFmpeg](../utilities/ffmpeg.mdx), GStreamer, & others. 17 | 18 | Hardware-accelerated video encoding with QSV usually significantly improves encoding performance at low compression efficiency compared to software-based encoding solutions. It usually allows for higher-quality output at lower bitrates when encoding much faster than real time, such as at 60-200 fps. This is particularly beneficial for applications that require real-time encoding, such as live streaming, video conferencing, and game recording. 19 | 20 | While QSV is not designed for highly efficient offline file encoding, where quality is prioritized over speed. It is worth noting that QSV is almost always better than AMF from AMD & competitive with NVENC from Nvidia in terms of compression efficiency. 21 | -------------------------------------------------------------------------------- /docs/encoders_hw/videotoolbox.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: VideoToolbox 3 | sidebar_position: 4 4 | --- 5 | 6 | # VideoToolbox 7 | 8 | :::info Under Maintenance 9 | The content in this entry is incomplete & is in the process of being completed. 10 | ::: 11 | 12 | Apple's VideoToolbox is a low-level framework that provides direct access to hardware encoders and decoders. It offers services for video compression and decompression, as well as conversion between raster image formats stored in CoreVideo pixel buffers. The VideoToolbox encoder works by compressing video data for various applications such as low-latency conferencing, live streaming, and offline transcoding. It supports hardware encoding on most Macs from 2011 and later, and uses Apple's Media Engine on devices with Apple T2 chips or Apple Silicon. 13 | 14 | The encoder can be configured to optimize encoding for specific applications, and it supports various video codecs including [H.264](../video/AVC.mdx), [H.265](../video/HEVC.mdx), with support for H.265 8-bit and 10-bit encoding. It is worth noting that the VideoToolbox encoder is designed for applications that require direct access to hardware encoders and decoders. 15 | 16 | Apple's VideoToolbox framework also supports hardware accelerated video decoding for a number of video codecs. As of the Apple M3, these include [H.264](../video/AVC.mdx), [H.265](../video/HEVC.mdx), [ProRes](../video/prores.mdx), ProRes RAW, and [AV1](../video/AV1.mdx). 17 | 18 | ## Usage 19 | 20 | Encoding with Videotoolbox on macOS is possible via [FFmpeg](../utilities/ffmpeg.mdx), a versatile command line utility, or Handbrake, a GUI for video encoding. 21 | 22 | ### FFmpeg 23 | 24 | To use H.264 or H.265 (HEVC) hardware encoding in macOS via VideoToolbox, just use the encoder `-c:v h264_videotoolbox` or `-c:v hevc_videotoolbox` for H.264 or HEVC respectively. 25 | 26 | Here are some example commands for encoding with VideoToolbox on Apple Silicon via FFmpeg: 27 | 28 | ```bash title="H.264 encoding (high profile)" 29 | ffmpeg -i input.mkv -c:v h264_videotoolbox -profile 100 -q:v [0-100] output.mp4 30 | ``` 31 | 32 | ```bash title="8-bit HEVC encoding (main profile)" 33 | ffmpeg -i input.mkv -c:v hevc_videotoolbox -profile 1 -q:v [0-100] -tag:v hvc1 output.mp4 34 | ``` 35 | 36 | ```bash title="10-bit HEVC encoding (main10 profile)" 37 | ffmpeg -i input.mkv -c:v hevc_videotoolbox -profile 2 -q:v [0-100] -tag:v hvc1 output.mp4 38 | ``` 39 | 40 | Just run `ffmpeg -help encoder=hevc_videotoolbox` or `ffmpeg -help encoder=h264_videotoolbox` for more info. 41 | 42 | ### Handbrake 43 | 44 | To be filled. 45 | 46 | *Sources* 47 | (1) Video Toolbox | Apple Developer Documentation. https://developer.apple.com/documentation/videotoolbox. 48 | (2) HandBrake Documentation — Apple VideoToolbox. https://handbrake.fr/docs/en/latest/technical/video-videotoolbox.html. 49 | (3) Apple's T2 chip makes a giant difference in video encoding for most .... https://appleinsider.com/articles/19/04/09/apples-t2-chip-makes-a-giant-difference-in-video-encoding-for-most-users. 50 | -------------------------------------------------------------------------------- /docs/filtering/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "🎞️ Filtering", 3 | "position": 7 4 | } 5 | -------------------------------------------------------------------------------- /docs/filtering/antialiasing.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Antialiasing 3 | sidebar_position: 10 4 | --- 5 | 6 | # Antialiasing 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | -------------------------------------------------------------------------------- /docs/filtering/deband.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Deband 3 | sidebar_position: 11 4 | --- 5 | 6 | # Deband 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | -------------------------------------------------------------------------------- /docs/filtering/decombing.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Decombing 3 | sidebar_position: 6 4 | --- 5 | 6 | # Decombing 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | -------------------------------------------------------------------------------- /docs/filtering/dehalo.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Dehalo 3 | sidebar_position: 9 4 | --- 5 | 6 | # Dehalo 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | -------------------------------------------------------------------------------- /docs/filtering/deinterlace.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Deinterlace 3 | sidebar_position: 5 4 | --- 5 | 6 | # Deinterlace 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | -------------------------------------------------------------------------------- /docs/filtering/denoise.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Denoise 3 | sidebar_position: 8 4 | --- 5 | 6 | # Denoise 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | ## Overview 13 | 14 | Denoising involves removing random noise from the video. Such noise can result from film grain, signal interference or simply low light conditions. In any case, noise can greatly reduce compression efficiency especially if the video codec doesn't support film grain synthesis. 15 | 16 | In [FFmpeg](../utilities/ffmpeg.mdx) there are two filters available for denoising: 17 | - [hqdn3d](#hqdn3d) 18 | - [nlmeans](#nlmeans) 19 | 20 | ## hqdn3d 21 | 22 | hqdn3d is a fast, high quality 3d denoising filter which improves compressibility. Can be applied to images and videos. 23 | 24 | ### Usage 25 | 26 | ```shell 27 | ffmpeg -i input.mp4 -vf hqdn3d output.mp4 28 | ``` 29 | 30 | The default configuration should be fine for most use cases. 31 | 32 | If you still see too much noise you can adjust the `luma_spatial` parameter (other parameters are derived from it by default). Higher `luma_spatial` value will result in stronger denoising. By default it is set to `4`. 33 | 34 | ```shell 35 | ffmpeg -i input.mp4 -vf hqdn3d=8 output.mp4 36 | # which is the same as 37 | ffmpeg -i input.mp4 -vf hqdn3d=8:6:12:9 output.mp4 38 | ``` 39 | 40 | :::caution 41 | Setting `luma_spatial` to larger values could result in ghosting and [banding](../introduction/video-artifacts.mdx#bandingcontouring) artifacts. 42 | ::: 43 | 44 | For description of all four parameters take a look [here](https://ffmpeg.org/ffmpeg-filters.html#hqdn3d-1). 45 | 46 | ## nlmeans 47 | 48 | nlmeans uses Non-Local Means algorithm to do denoising. Each pixel is compared to similar pixels based on their surroundings (context). The size of such context is expressed as `r`x`r`. 49 | 50 | The filter is rather slow and doesn't parallelize well. Only use it in cases the video contains a lot of noise or you need very high quality denoising. In all other cases [hqdn3d](#hqdn3d) will be more efficient. 51 | 52 | ### Usage 53 | 54 | ```bash 55 | ffmpeg -i input.mp4 -vf nlmeans output.mp4 56 | ``` 57 | 58 | The default configuration should be fine for most use cases. 59 | 60 | ```bash 61 | ffmpeg -i input.mp4 -vf nlmeans=s=3.0:r=31:p=15 output.mp4 62 | ``` 63 | 64 | Stronger denoising with larger research and patch size. Might be useful for ultra high quality denoising in 4K+ resolutions but you might struggle to achieve even 0.1 fps. 65 | 66 | ```bash 67 | ffmpeg -i input.mp4 -vf nlmeans=s=1.0:r=5:p=3 output.mp4 68 | ``` 69 | 70 | Prioritize speed over quality. 71 | 72 | ### Parameters 73 | 74 | - `s` - Denoising Strength where `1.0` is the lightest and also the default and the strongest is `30.0` although I wouldn't recommend going above `10.0`. 75 | - `r` - Research Size where `15` is the default, it must be an odd number ranging from `0` to `99`. The higher the value, the slower denoising will be. 76 | - `p` - Research Size where `7` is the default and, it must be an odd number ranging from `0` to `99`. 77 | 78 | For description of all possible parameters take a look [here](https://ffmpeg.org/ffmpeg-filters.html#nlmeans-1). 79 | 80 | # Notes 81 | - [hqdn3d](#hqdn3d) may create visual artifacts like ghosting, [banding](../introduction/video-artifacts.mdx#bandingcontouring) and [blocking](../introduction/video-artifacts.mdx#blocking) 82 | - [nlmeans](#nlmeans) creates much less noticeable artifacts like cartoonish look but only for very noisy inputs 83 | -------------------------------------------------------------------------------- /docs/filtering/graining.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Graining 3 | sidebar_position: 12 4 | --- 5 | 6 | # Graining 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | -------------------------------------------------------------------------------- /docs/filtering/ivtc.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Inverse Telecine 3 | sidebar_position: 4 4 | --- 5 | 6 | # Inverse Telecine 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | -------------------------------------------------------------------------------- /docs/filtering/stabilizing.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Stabilizing 3 | sidebar_position: 7 4 | --- 5 | 6 | # Stabilizing 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | ## Overview 13 | 14 | Stabilizing is the process of reducing unwanted camera movement and shakes in video clips using [FFmpeg](../utilities/ffmpeg.mdx). This improves overall encoding efficiency by minimizing unpredictable global movement, such as that from handheld cameras. The recommended method for stabilizing videos with FFmpeg is to use the VidStab library, which requires a build of FFmpeg compiled with `--enable-libvidstab`. 15 | 16 | VidStab offers two filters within FFmpeg: 17 | 18 | ```shell 19 | ffmpeg -hide_banner -filters | grep vidstab 20 | ... vidstabdetect V->V Extract relative transformations, pass 1 of 2 for stabilization (see vidstabtransform for pass 2). 21 | ... vidstabtransform V->V Transform the frames, pass 2 of 2 for stabilization (see vidstabdetect for pass 1). 22 | ``` 23 | 24 | The `vidstabdetect` filter is used in the first pass to generate a video transformations file (`.trf`), while `vidstabtransform` is employed in the second pass to apply those transformations. 25 | 26 | ## Usage 27 | 28 | To stabilize a video using default parameters, follow these two steps: 29 | 30 | ```shell 31 | ffmpeg -i input.mp4 -vf vidstabdetect -f null - 32 | ffmpeg -i input.mp4 -vf vidstabtransform output.mp4 33 | ``` 34 | 35 | After running the first command, a `transforms.trf` file will be created in the directory where you executed FFmpeg. Once the stabilization process is complete, you can safely delete this file. The resulting `output.mp4` video will have reduced shakiness. 36 | 37 | For stabilizing high-framerate videos with strong camera movement: 38 | 39 | ```shell 40 | ffmpeg -i input.mp4 -vf vidstabdetect=shakiness=8:result=a.trf -f null - 41 | ffmpeg -i input.mp4 -vf vidstabtransform=smoothing=30:zoom=-5:input=a.trf output.mp4 42 | ``` 43 | 44 | :::tip 45 | Remember to set appropriate video/audio codec parameters in the command before `output.mp4`. You must not use `-c:v copy`, as the video will undergo transformations. 46 | ::: 47 | 48 | ### vidstabdetect Parameters 49 | 50 | - `result` - Sets the output `.trf` file location 51 | - `shakiness` - Adjusts movement reduction, with `1` being the least and `10` the most reduction (highest stabilization). Default is `5`. 52 | - `accuracy` - Controls movement reduction accuracy. Lower values use less CPU but may be less accurate. FFmpeg's minimum allowed value is `3`. Processing speed was approximately `21 fps` at `3` and `14 fps` at `15`. 53 | 54 | For a complete list of parameters, refer to the [vidstabdetect documentation](https://ffmpeg.org/ffmpeg-filters.html#vidstabdetect-1). 55 | 56 | ### vidstabtransform Parameters 57 | 58 | - `input` - Specifies the input `.trf` file created by `vidstabdetect` 59 | - `smoothing` - Determines the number of frames considered for future and past movement estimation. Default is `10`. 60 | - `zoom` - Adjusts the zoom percentage, with `0%` being the default. Negative values create a zoom-out effect. 61 | - `interpol` - Sets the type of interpolation used: 62 | - `no` - No interpolation 63 | - `linear` - Only horizontal 64 | - `bilinear` - Faster but may result in blurry output (default) 65 | - `bicubic` - Slower 66 | 67 | See the [vidstabtransform documentation](https://ffmpeg.org/ffmpeg-filters.html#vidstabtransform-1) for more details. 68 | 69 | ## Notes 70 | 71 | - Stabilization is a lossy process that can reduce video quality due to zoom and interpolation effects. 72 | - Some users may notice overall wobbliness in stabilized videos, especially at higher stabilization levels. This is an inherent characteristic of this filter. 73 | - Depending on your use case, consider employing two-pass encoding along with these stabilization steps. 74 | -------------------------------------------------------------------------------- /docs/images/GIF.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: GIF 3 | sidebar_position: 3 4 | --- 5 | 6 | # GIF 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | Graphics Interchange Format (GIF) is an image file format first released by CompuServe in 1987. It remains popular due to it's widespread support for animated images despite its obsolete efficency. Other animated image formats like Animated [AVIF](../images/AVIF.mdx) & Animated [WebP](../images/WebP.mdx) have since surpassed GIF in functionality, as has the animated [PNG](../images/PNG.mdx) variant APNG. 13 | 14 | ## Performance Checklist 15 | 16 | Lossless? *Yes* 17 | 18 | Lossy? *No* 19 | 20 | Supported Bit Depth: 21 | *256 colors* 22 | 23 | HDR/Wide Gamut? *No* 24 | 25 | Animation? *Yes* 26 | 27 | Transparency? *Yes* 28 | 29 | Progressive Decode? *No* 30 | 31 | Royalty Free? *Yes* -------------------------------------------------------------------------------- /docs/images/HEIC.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: HEIC 3 | sidebar_position: 4 4 | --- 5 | 6 | # HEIC 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | The HEIC image format, also known as the High Efficiency Image Format, is a newer image codec that was developed to provide improved compression and better performance compared to traditional image formats like [JPEG](./JPEG.mdx). HEIC files use [HEVC](../video/HEVC.mdx) internally, meaning the format is not royalty free. While this has limited its adoption across the Web, this format is supported by many modern devices including the entire Apple ecosystem. iPhones shoot HDR HEIC photos by default by utilizing the iPhone's HEVC hardware video encoder to capture these images. Some Android phones are capable of shooting HEIC as well, but these are often transcoded from JPEG. HEIC has largely been surpassed by [AVIF](./AVIF.mdx), which uses the same container to store [AV1](../video/AV1.mdx)-compressed images. 13 | 14 | ## Performance Checklist 15 | 16 | Lossless? *No* 17 | 18 | Lossy? *Yes* 19 | 20 | Supported Bit Depths: 21 | *8 BPC, 10 BPC* 22 | > *Higher bit depths not widely supported* 23 | 24 | HDR/Wide Gamut? *Yes* 25 | 26 | Animation? *Yes* 27 | 28 | Transparency? *Yes* 29 | 30 | Progressive Decode? *No* 31 | 32 | Royalty Free? *No* -------------------------------------------------------------------------------- /docs/images/JPEG2000.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: JPEG 2000 3 | sidebar_position: 5 4 | --- 5 | 6 | # JPEG 2000 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | JPEG-2000 is an older image compression format that uses wavelet technology to achieve high compression ratios while maintaining image quality. It supports both lossy and lossless compression, and is commonly used in applications such as digital photography, medical imaging, and video surveillance. JPEG-2000 files can be transparently compressed and decompressed using a variety of software tools and libraries, making it a flexible and widely-supported format for image storage & transmission. JPEG-2000 never effectively took off on the Web, but digital cinema distribution is often done with JPEG-2000. A "DCP" is a "Digital Cinema Package," which is a format used to distribute and play back digital movies in theaters. These DCPs are often compressed losslessly with JPEG-2000. -------------------------------------------------------------------------------- /docs/images/PNG.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: PNG 3 | sidebar_position: 2 4 | --- 5 | 6 | # PNG 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | Portable Network Graphics (PNG) is a free lossless image file format released in 1996. It was ceated as an alternative to [GIF](./GIF.mdx), which was at the time a proprietary format. It gained animation support similar to GIF with the release of APNG in 2008, which is now supported by all popular web browsers. 13 | 14 | ## Performance Checklist 15 | 16 | Lossless? *Yes* 17 | 18 | Lossy? *No* 19 | 20 | Supported Bit Depths: 21 | *8 BPC, 16 BPC* 22 | 23 | HDR/Wide Gamut? *Yes* 24 | 25 | Animation? *Yes* 26 | 27 | Transparency? *Yes* 28 | 29 | Progressive Decode? *Kinda* 30 | 31 | Royalty Free? *Yes* -------------------------------------------------------------------------------- /docs/images/WebP.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: WebP 3 | sidebar_position: 4 4 | --- 5 | 6 | # WebP 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | WebP is a free image file format first released by Google in 2010. It consists of 2 primary "modes" of operation. A lossy mode derived from the [VP8](../video/VP8.mdx) video codec, and a novel lossless mode added in 2011. 13 | 14 | ## Encoding 15 | 16 | ### Using libwebp 17 | libwebp supports WebP, JPEG, PNG, PNM (PGM, PPM, PAM), TIFF as input formats, and a quality (`-q`) value between 0 (lowest quality, smallest file) and 100 (highest quality, largest file). Should you need the lossless mode, you need to instead use a `-z` argument, with values representing the effort used between 0 (fastest encode, largest file) and 9 (slowest encode, smallest file). 18 | 19 | ```bash 20 | cwebp example.png -q 75 -o example.webp 21 | ``` 22 | 23 | ## decoding 24 | 25 | ```bash 26 | dwebp example.webp -o example.png 27 | ``` 28 | 29 | ## Performance Checklist 30 | 31 | Lossless? *Yes* 32 | 33 | Lossy? *Yes* 34 | 35 | Supported Bit Depth: 36 | *8 BPC* 37 | 38 | HDR/Wide Gamut? *No* 39 | 40 | Animation? *Yes* 41 | 42 | Transparency? *Yes* 43 | 44 | Progressive Decode? *No* 45 | 46 | Royalty Free? *Yes* -------------------------------------------------------------------------------- /docs/images/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "🏞️ Images", 3 | "position": 4 4 | } 5 | -------------------------------------------------------------------------------- /docs/introduction/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "💡 Introduction", 3 | "position": 1 4 | } 5 | -------------------------------------------------------------------------------- /docs/introduction/high-dynamic-range.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 6 3 | --- 4 | 5 | # High Dynamic Range 6 | 7 | HDR (High Dynamic Range) is a technology used in modern TVs and displays to produce more vibrant and lifelike images. In simple terms, it allows your TV to display a wider range of colors and brightness levels than standard displays. This means that you can see more details in both bright and dark areas of an image, which can make movies, TV shows, and video games look much more realistic. 8 | 9 | HDR10 works by using metadata that tells your TV how to display the content in the best way possible. This metadata includes information about the maximum brightness level and color gamut of the content, which allows your TV to adjust its settings to match the content being displayed. In other words, HDR10 helps your TV display images that are closer to what the content creators intended you to see, resulting in a more immersive viewing experience. 10 | 11 | ## HLG 12 | 13 | HLG (Hybrid log-gamma) is a type of HDR video format that was developed to optimize video for both standard dynamic range (SDR) and HDR displays, jointly developed by the BBC and NHK. 14 | 15 | To understand how HLG works, it's helpful to know that the way we perceive brightness and color in a video is different from how it's captured and displayed on a screen. Brightness and color information is usually captured in a logarithmic curve, while SDR displays typically reproduce the image with a gamma curve. HDR displays, on the other hand, reproduce the image with a different type of curve, known as the Perceptual Quantizer (PQ) curve. 16 | 17 | The HLG curve is a hybrid of these two curves, which means that it's optimized for both SDR and HDR displays. It's designed to work with a wider range of brightness levels than SDR displays, but also be backward compatible with SDR displays. 18 | 19 | In simpler terms, the HLG curve is a way of capturing and displaying video that works well on both SDR and HDR displays. It's like a bridge between the way video is captured and the way it's displayed, and it's designed to optimize the video for a wider range of brightness levels than traditional SDR video. The result is video content that looks more realistic and vivid on both SDR and HDR displays. 20 | 21 | ## HDR10 22 | 23 | HDR10 is an open high-dynamic-range video (HDR) standard announced on 27 August 2015 by the Consumer Technology Association. It is the most widespread of the HDR formats. It only allows static metadata. 24 | 25 | ## HDR10+ 26 | 27 | HDR10+ is basically an upgrade to the previous HDR10 by adding dynamic metadata support (in ``.json``) to optimize each scene's content light level as the director intended. 28 | 29 | ## Dolby Vision 30 | 31 | Dolby Vision is proprietary HDR format developed by Dolby Laboratories and a direct competitor to HDR10+. 32 | -------------------------------------------------------------------------------- /docs/introduction/lossy.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lossy Compression 3 | sidebar_position: 4 4 | --- 5 | 6 | # Lossy Compression 7 | 8 | :::info Under Maintenance 9 | The content in this entry is incomplete & is in the process of being completed. 10 | ::: 11 | 12 | Lossy multimedia compression reduces the file size of multimedia data by permanently removing some of the information. This process leverages the limitations of the human senses, fidelity metrics, or appeal metrics to discard information that is considered less salient. The goal of lossy compression is to reduce the file size of multimedia data while maintaining a desired level of quality. 13 | 14 | ## How Lossy Compression Works 15 | 16 | Lossy compression works by analyzing the input signal and removing parts of it that are less salient. Some processes by which this is done include: 17 | 18 | - **Perceptual Coding** (audio): This technique removes audio frequencies that are outside the range of human hearing or masked by other sounds. 19 | - **Quantization** (audio): This process reduces the precision of certain audio components, which can significantly reduce file size without a noticeable impact on perceived quality. 20 | 21 | *More coming soon* -------------------------------------------------------------------------------- /docs/introduction/prologue.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Prologue 3 | sidebar_position: 1 4 | --- 5 | 6 | # Prologue 7 | 8 | Multimedia compression as a whole has revolutionized our ability to communicate on the Web & beyond. It has enabled rich experiences across many breakthrough platforms that wouldn't have been feasible otherwise, and it has allowed us to communicate information, expression, and human connection in novel ways. It is the unsung hero of the modern Web. Despite this, it is often difficult to uncover information about codec technology that is accurate, informed, and battle-tested by passionate individuals who care about the proliferation of knowledge. This wiki aims to demystify the realm of multimedia compression while connecting codec enthusiasts to create a sink of knowledge for the benefit of everyone. 9 | 10 | ### What This Isn't 11 | 12 | The Codec Wiki is **not a highly accurate source for understanding the mathematics, research, adoption/patent politics, or specifications of specific coder/decoder implementations**. Sources like Wikipedia cover these details with great accuracy & reliability. What we *are* focused on is making higher level information - especially related to the usage & application of compression tools - highly accessible; we are focused on application, not theory, for the time being. Knowing how a codec works in theory is different than knowing when and how to best use a codec and its accompanying tools. 13 | 14 | ### What is a Codec 15 | 16 | A codec, shortened from coder/decoder, is a system that handles digital media or data according to a specification. Usually, this means it compresses and decompresses digital media. Codecs are used to encode media for storage and transmission - among other things - and then decode that media for playback, editing, etc. Multimedia codecs compress by either [discarding less salient data](../introduction/psychovisual.mdx) using [lossy](../introduction/video-artifacts.mdx) compression to reduce filesize, or they use clever lossless compression tricks to maintain a mathematically identical stream to the input media while still reducing filesize. Lossless compression can be reversed to be the exact same as the input data, while lossy compression does not share this quality as it discards data for smaller filesizes. Some common uses of codecs include: 17 | 18 | - Video compression: Video codecs like [H.264](../video/AVC.mdx), [VP9](../video/VP9.mdx) & [AV1](../video/AV1.mdx) allow digital video files to be compressed to much smaller sizes for streaming & storage, among other things. A video codec can encode a video stream while it is being recorded or before it is distributed, and decode it when it is played back. This allows videos to be shared more quickly and use less storage & bandwidth. 19 | - Audio compression: Audio codecs like [MP3](../audio/MP3.mdx), [AAC](../audio/AAC.mdx), and [Opus](../audio/Opus.mdx) compress audio files like songs & podcasts. This allows them to be easily distributed & stored. 20 | - Image Compression: Image codecs, whether tried and true like [JPEG](../images/JPEG.mdx) or brand new like [JPEG-XL](../images/JXL.mdx), have fundamentally the same goal: compress images well while maintaining a versatile featureset for the myriad of ways one may decide they'd like to compress an image. Color depth, HDR, transparency, color space information, EXIF data, and many other factors are at play when working with images that make compressing them easier said than done. 21 | - Data Compression: General compression algorithms like [ZIP](../data/zip.mdx) & [zstd](../data/zstd.mdx) are designed to compress *any* kind of data, not just multimedia specific data. This includes web assets, executables, text archives, and even entire filesystems. 22 | 23 | In summary, **codecs use complex algorithms to encode and decode media for efficient storage and transmission**. They are essential for recording, compressing, delivering and playing back digital media. Different codecs balance factors like compression efficiency, quality, computational requirements, compatibility, & features depending on their application. 24 | 25 | ### What You Need 26 | 27 | A rather informal list of requirements follows. 28 | 29 | You will benefit greatly from: 30 | - Patience. 31 | - A willingness to learn, engage in curiousity, & follow instructions 32 | - Basic to intermediate computer proficiency. 33 | 34 | If you're only here to learn the tools, it will be very beneficial to have: 35 | - Higher-end CPU hardware, which will decrease wait times for some larger encoding workloads discussed here. 36 | - A level of comfort with CLI utilities, or enough motivation to engage with them in the absence of background knowledge. 37 | - A device running an Arch-based Linux distribution, excluding Manjaro 38 | 39 | :::info Why Arch? 40 | Most encoding tools are readily available in the package manager, & it is a bleeding edge Linux distribution which ensures your utilities are always kept up to date. For filtering, all Vapoursynth plugins are already available in the Arch User Repository (AUR) which makes it extremely easy to install and version control with an AUR helper [like `yay`](https://github.com/Jguer/yay) 41 | ::: -------------------------------------------------------------------------------- /docs/metrics/PSNR.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: PSNR 3 | sidebar_position: 1 4 | --- 5 | 6 | # PSNR 7 | 8 | PSNR (Peak Signal-to-Noise Ratio) is one of the most widely used objective full-reference image and video quality metrics. It measures the ratio between the maximum possible signal power and the power of corrupting noise, expressed in decibels (dB). The metric is calculated using the Mean Squared Error (MSE) between a reference image and a distorted image. The theory and math behind PSNR are well covered in [Wikipedia's PSNR entry](https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio). 9 | 10 | ## Video Compression 11 | 12 | PSNR is widely used in video encoding applications because it is fast to compute, making it practical for real-time encoding decisions, and because it provides a consistent mathematical basis for comparing different encoding approaches. It is also used within video encoders to help make compression decisions. 13 | 14 | ### Inside Video Encoders 15 | 16 | Within video encoders, PSNR plays a crucial role in rate-distortion optimization (RDO), which is the process of finding the optimal balance between bitrate and quality. Encoders use PSNR as an in-loop metric when evaluating different encoding decisions, such as mode selection, motion estimation, and quantization parameter (QP) selection. 17 | 18 | For example, when deciding between different prediction modes or block sizes, the encoder will calculate the PSNR impact of each option along with its bit cost to determine the best choice. 19 | 20 | ### Limitations 21 | 22 | While PSNR is widely used due to its simplicity and computational efficiency, it has several notable limitations. The metric has notoriously poor correlation with the human eye's perception of quality, as PSNR is highly sensitive to all pixel-level errors when many do not have any perceptually relevant impact. When PSNR is used to inform RDO in video encoding, it can lead to suboptimal quality decisions; to combat this, encoders have to creatively take the human visual system into account. We cover some of this in the [Psychovisual entry](../introduction/psychovisual.mdx). 23 | 24 | PSNR's weaknesses as a full reference distortion metric have led to the development of more advanced metrics like [SSIM](./SSIM.mdx), [VMAF](./VMAF.mdx), and [XPSNR](./XPSNR.mdx), which attempt to better model human visual perception. 25 | 26 | ## Practical Use Cases 27 | 28 | PSNR is commonly used for evaluating image and video compression algorithms, assessing streaming quality, comparing codec performance, and more. Many video encoding tools and analysis suites report PSNR values for different luma/chroma components (Y, U, V) separately, as well as a weighted average. Despite its limitations, PSNR continues to be an important tool in the video compression field, particularly when used in conjunction with other quality metrics and subjective evaluation methods. -------------------------------------------------------------------------------- /docs/metrics/SSIM.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: SSIM 3 | sidebar_position: 1 4 | --- 5 | 6 | # SSIM 7 | 8 | The Structural Similarity Index Measure (SSIM) is a full-reference image and video quality metric that quantifies image fidelity degradation caused by processing such as lossy compression. Published in 2004 as part of an issue of [*IEEE Transactions on Image Processing*](https://en.wikipedia.org/wiki/IEEE_Transactions_on_Image_Processing), SSIM attempts to address the limitations of traditional metrics like [Peak Signal-to-Noise Ratio (PSNR)](./PSNR.mdx) by evaluating visual quality based on the structural information that humans naturally use to assess visual quality. 9 | 10 | ## Overview 11 | 12 | SSIM works by comparing three key elements between the original and processed images: luminance, contrast, and structure. The luminance comparison measures the similarity of the average pixel intensities between the two images. These three comparisons are combined to produce a single similarity score ranging from -1 to 1, where 1 indicates perfect structural similarity. 13 | 14 | One of SSIM's main advantages is its ability to better align with human visual perception compared to traditional metrics. SSIM recognizes that pixels have strong inter-dependencies, especially when they are spatially close, which makes SSIM particularly effective at detecting changes in structural information that human observers would notice, such as blurring, blocking artifacts, or noise. 15 | 16 | As an in-loop metric in video encoders to improve decisionmaking, SSIM is more computationally expensive than PSNR, and doesn't always yield drastic improvements in fidelity per bit. [Psychovisual](../introduction/psychovisual.mdx) encoder options are still necessary in many cases to achieve the best perceptual efficiency. 17 | 18 | ## Limitations 19 | 20 | In multimedia compression, SSIM can be more valuable in optimization scenarios where the goal is to maintain optimal perceptual quality for a given size. However, SSIM doesn't perfectly correlate with the human visual system; newer metrics like [XPSNR](./XPSNR.mdx) and [SSIMULACRA2](./SSIMULACRA2.mdx) have been developed to correlate more closely with human perception. Modern variations and extensions of SSIM have been developed to address specific needs. Multi-scale SSIM (MS-SSIM) evaluates images at different scales to better match human visual perception. Color SSIM variants have been proposed to better handle color information, and SSIMULACRA (succeeded by SSIMULACRA2) was developed to improve correlation with human perception. These adaptations have improved upon SSIM's perceptual goals in an ever-changing multimedia compression landscape. 21 | -------------------------------------------------------------------------------- /docs/metrics/SSIMULACRA2.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: SSIMULACRA2 3 | sidebar_position: 1 4 | --- 5 | 6 | import Tabs from '@theme/Tabs'; 7 | import TabItem from '@theme/TabItem'; 8 | 9 | # SSIMULACRA2 10 | 11 | :::info Under Maintenance 12 | The content in this entry is incomplete & is in the process of being completed. 13 | ::: 14 | 15 | SSIMULACRA 2 is a visual fidelity metric based on the concept of the multi-scale structural similarity index measure (MS-SSIM), computed in a perceptually relevant color space, adding two other (asymmetric) error maps, and aggregating using two different norms. It is currently the most reputable visual quality metric according to its correlation with subjective results, and is considered a very robust means of comparing encoders. It is debatable whether [Butteraugli](../metrics/butteraugli.mdx) is better for very high fidelity, but SSIMULACRA 2 is considered the best for medium/low fidelity comparisons. Although it does not feature any inter-frame temporal awareness, it is still considered a very strong metric for video fidelity comparison nonetheless. 16 | 17 | While a [reference implementation by Cloudinary](https://github.com/cloudinary/ssimulacra2) exists, 18 | most people will want to use [the rust implementation `ssimulacra2_rs`](https://github.com/rust-av/ssimulacra2). 19 | 20 | ## Installing 21 | 22 | 23 | 24 | To install ssimulacra2_rs using cargo, run this: 25 | ```bash 26 | cargo install ssimulacra2_rs 27 | ``` 28 | 29 | 30 | On archlinux, you may use the [AUR](https://wiki.archlinux.org/title/Arch_User_Repository) to install. 31 | Simply use your favorite AUR helper to install `ssimulacra2_bin-git` 32 | 33 | ```bash 34 | paru -S ssimulacra2_bin-git 35 | ``` 36 | 37 | 38 | 39 | ## Running 40 | ### On Images 41 | Comparing images is simple, run this: 42 | ```bash 43 | ssimulacra2_rs image source.png distorted.png 44 | ``` 45 | 46 | ### On Videos 47 | 48 | If you want to compare videos, run this: 49 | ```bash 50 | ssimulacra2_rs video source.mkv distorted.mkv 51 | ``` 52 | 53 | :::tip Graphical visualization 54 | You can optionally output a graph using the `-g` parameter: 55 | ```bash 56 | ssimulacra2_rs video source.mkv distorted.mkv -g 57 | ``` 58 | ::: 59 | #### Multithreading 60 | Multithreading with ssimulacra2_rs works, but it scales badly. 61 | This is likely due to memory bandwidth limitations. 62 | However, the speedup is worth it. 63 | 64 | To run multithreaded, use the `--frame-threads` or `-f` parameters. 65 | For example, to run with 16 threads: 66 | ```bash 67 | ssimulacra2_rs video source.mkv distorted.mkv -f 16 68 | ``` 69 | :::info Thread amount 70 | You should set the amount of threads to half of your actual thread count, as going any higher won't make a difference. 71 | ::: 72 | 73 | :::warning Memory limitation 74 | If you have a small amount of system memory, you may encounter out of memory errors while running with multi-threading. 75 | If that's the case, you need to lower the amount of threads. 76 | ::: 77 | #### Frame skipping 78 | SSIMULACRA 2 is, at its core, an image quality assessment metric, not a video quality one. 79 | This means that it does not use any temporal information when applied to videos; just the independent scores of each individual frame. 80 | Consequently, it can be applied to a subset of a video's frames, instead of to all of them, to obtain a meaningful estimate of the score in a reduced time. 81 | 82 | To run ssimulacra2_rs with frame skip enabled, use the `--increment` or `-i` parameters. 83 | For example, to compute the score for every 3rd frame: 84 | ```bash 85 | ssimulacra2_rs video source.mkv distorted.mkv -i 3 86 | ``` 87 | 88 | :::info Frame skip amount 89 | To avoid biased score estimates, it is recommended to sample frames using an odd value as increment. 90 | Prime numbers further reduce the likelihood of sampling bias. 91 | Thus increments of 3, 5, 7, 11 or 13 frames are good options to compute score estimates with little deviation to the true score. 92 | 93 | In any case, powers of two (2, 4, 8, 16...) should be avoided as increment, due to the way video encoders deal with temporal layers. 94 | ::: 95 | 96 | 97 | ## Scoring 98 | The score that SSIMULACRA 2 outputs is simple: a number in range -inf..100. According to the developers of the metric, for image quality assessment, SSIMULACRA 2 scores correlate to subjective visual quality as follows: 99 | 100 | - Very high quality: `90` and above 101 | - High quality: `70` to `90` 102 | - Medium quality: `50` to `70` 103 | - Low quality: Below `50` 104 | 105 | For video quality assessment, however, the scores need not be as high for similar subjective visual quality correlation. 106 | For example, it is believed that an average score of around `80` corresponds to a "visually lossless" video. 107 | Nevertheless, this has not been thoroughly verified. 108 | -------------------------------------------------------------------------------- /docs/metrics/XPSNR.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: XPSNR 3 | sidebar_position: 1 4 | --- 5 | 6 | # XPSNR 7 | 8 | :::info Under Maintenance 9 | The content in this entry is incomplete & is in the process of being completed. 10 | ::: 11 | 12 | XPSNR is a full-reference distortion measurement algorithm for video quality assessment, based on the concept of the peak signal to noise ratio (PSNR), tuned to better reflect the human visual system. 13 | 14 | XPSNR is considered to be a highly reputable visual quality metric according to its correlation with subjective results relative to its impressive speed. 15 | Unlike image-first metrics like [SSIMULACRA2](./SSIMULACRA2.mdx), XPSNR is a video-focused metric, and uses temporal information to compute its score. 16 | 17 | The reference implementation by Fraunhofer HHI is a [FFmpeg 7.0 plug-in](https://github.com/fraunhoferhhi/xpsnr), and there is a [community-built standalone implementation](https://github.com/gianni-rosato/sxpsnr) available as well. 18 | For more details about the algorithm and its design, [a scientific paper is available](https://www.itu.int/pub/S-JOURNAL-ICTS.V3I1-2020-8). 19 | 20 | ## Installation 21 | 22 | XPSNR comes as an FFmpeg 7.0 plug-in. The process of installing it is somewhat straightforward: 23 | 24 | 1. Download the source code for FFmpeg 7.0: 25 | ```bash 26 | git clone -b release/7.0 https://git.ffmpeg.org/ffmpeg.git ffmpeg 27 | ``` 28 | 29 | 2. Download the code for the XPSNR plug-in: 30 | ```bash 31 | git clone https://github.com/fraunhoferhhi/xpsnr 32 | ``` 33 | 34 | 3. Copy the plug-in files from XPSNR's code to FFmpeg's: 35 | ```bash 36 | cp xpsnr/libavfilter/* ffmpeg/libavfilter/ 37 | ``` 38 | 39 | 4. Configure and compile FFmpeg: 40 | ```bash 41 | cd ffmpeg 42 | ./configure ... 43 | make -j $(nproc) 44 | ``` 45 | 46 | ## Usage 47 | 48 | XPSNR is used as an FFmpeg filter, similarly to the built-in PSNR plugin: 49 | ```bash 50 | ./ffmpeg -i ref.mkv -i test.mkv -lavfi xpsnr="stats_file=xpsnr.log" -f null - 51 | ``` 52 | 53 | ## Notes 54 | 55 | * Being the reference implementation an FFmpeg plug-in and not a standalone binary is inconvenient for some workflows. 56 | Currently, there are some attempts at making a [standalone XPSNR binary](https://github.com/gianni-rosato/sxpsnr), although they are not very widespread yet. 57 | * XPSNR uses a PSNR-like scoring system: a logarithmic scale in range 0..inf. 58 | This is considerably harder to interpret than other metrics (e.g. [SSIMULACRA 2](../metrics/SSIMULACRA2.mdx) or [VMAF](../metrics/VMAF.mdx)); 59 | and the threshold to what constitutes good quality is content-dependent. 60 | (Preliminary testing seems to indicate that anything above a XPSNR score of 42.00 is visually lossless.) 61 | * XPSNR scores are computed independently for the luma (Y) and two chroma (U, V) components of videos, 62 | thus actually providing 3 scores. 63 | Although the developers argue that using the minimum of these 3 scores as "definitive score" 64 | (i.e. better correlates to human impressions), 65 | some people in the community prefer using a weighted sum: `(4 * XPSNR_Y + XPSNR_U + XPSNR_V) / 6`. 66 | 67 | ## Comparing to SSIMULACRA 2 68 | 69 | The main advantage of XPSNR over SSIMULACRA 2 is that it is considerably faster to compute. 70 | XPSNR can achieve real-time speeds for 1080p 24 fps video, making it more convenient to quickly compare test encodes. 71 | 72 | Regarding their visual assessment capabilities, XPSNR and SSIMULACRA 2 seem to complement each other quite well, 73 | having both their own strong points and weak points with specific video content. 74 | If possible, using both at the same time provides great benefits for video quality assessment and comparison. 75 | -------------------------------------------------------------------------------- /docs/metrics/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "👁️ Metrics", 3 | "position": 9 4 | } 5 | -------------------------------------------------------------------------------- /docs/metrics/butteraugli.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Butteraugli 3 | sidebar_position: 1 4 | --- 5 | 6 | # Butteraugli 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: -------------------------------------------------------------------------------- /docs/privacy-policy.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Privacy Policy 3 | sidebar_label: 🔏 Privacy Policy 4 | position: 15 5 | --- 6 | 7 | # Privacy Policy 8 | 9 | This site is hosted on GitHub Pages, & usage of this site is subject to [GitHub's Privacy Policy](https://docs.github.com/en/site-policy/privacy-policies/github-privacy-statement). GitHub may store information about your visit in the form of log files. 10 | 11 | Furthermore, this site uses a self-hosted instance of [Plausible Analytics](https://plausible.io) located in Singapore. Plausible Analytics is a lightweight and open source web analytics platform for website traffic analysis. We do not track, collect nor store any personally identifiable information; Plausible Analytics collects only aggregated information, which does not allow us to identify any visitor to our website. 12 | 13 | This information is collected to understand how users interact with the Codec Wiki and improve our efforts to better suit the needs of these users. 14 | 15 | We do not employ the use of cookies. The following information is collected: 16 | - Page URL 17 | - HTTP Referer 18 | - Browser & Browser Version 19 | - Operating System type & version 20 | - Device type 21 | - Country, region, & city 22 | 23 | Given this information, we ensure: 24 | - Analytics data is not shared explicitly with advertising companies or any other companies in general. It is made available to everyone, for free, on our [analytics page](https://analytics.x266.mov/wiki.x266.mov/) 25 | - Analytics data isn't explicitly sent to any third parties 26 | - Analytics data is not monetized 27 | 28 | As a wiki dedicated to making multimedia codec knowledge more accessible, analytics information is made public via our [analytics page](https://analytics.x266.mov/wiki.x266.mov/). 29 | 30 | You may opt out with various means of ad & tracker blocking. An example would be [UBlock Origin](https://ublockorigin.com/), which blocks our analytics script. 31 | 32 | If you have any questions, comments or concerns, you may reach out to site maintainer Gianni Rosato via [grosatowork@proton.me](mailto:grosatowork@proton.me). 33 | 34 | *Last updated 12 September 2023* -------------------------------------------------------------------------------- /docs/resources.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Resources 3 | sidebar_label: 🗃️ Resources 4 | sidebar_position: 12 5 | --- 6 | 7 | # Resources 8 | 9 | Encoding resources that you might find useful. 10 | 11 | - https://guide.encode.moe - Filtering and fansubbing. 12 | - https://lvsfunc.encode.moe/en/latest - lvsfunc documentation. 13 | - https://silentaperture.gitlab.io/mdbook-guide/introduction.html - SilentAperture's Advanced Encoding guide, mostly about filtering. 14 | - https://x265.readthedocs.io/en/master - x265 technical documentation, made by MulticoreWare themselves. 15 | - http://www.chaneru.com/Roku/HLS/X264_Settings.htm - x264 settings. 16 | - https://kokomins.wordpress.com/2019/10/10/anime-encoding-guide-for-x265-and-why-to-never-use-flac - Anime encoding guide by Kokomins. Has some pretty good advices regarding psychovisual stuff and x265. 17 | - https://wiki.xiph.org/Main_Page - Xiph Wiki. 18 | -------------------------------------------------------------------------------- /docs/subtitles/SRT.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: SRT 3 | --- 4 | 5 | # SRT 6 | 7 | SubRip Text (SRT) is a text format for subtitles, described as 'the most basic of all subtitle formats'. SRT files are plain text with the extension `.srt`. 8 | 9 | ## Format 10 | Subtitles are placed into sequentially ordered groups, called cues, with a starting and ending timestamp, encoded `hours:minutes:seconds,milliseconds`. Note the seperator for the millisecond value is a comma. The starting and ending value are seperated by ` --> `. 11 | ### Unoffical features 12 | Some basic HTML tags are supported by some viewers, such as: 13 | * `bold` **bold** 14 | * `italics` *italics* 15 | * `` underlined 16 | * `Blue` colored text. 17 | 18 | Note these will be displayed verbatim on viewers that don't support these features. 19 | ## Example 20 | ``` 21 | 1 22 | 00:00:00,000 --> 00:01:00,000 23 | This subtitle will be visible for the first minute of the stream 24 | 25 | 2 26 | 00:01:00,000 --> 00:01:30,000 27 | and this one for thirty seconds after that. 28 | ``` 29 | -------------------------------------------------------------------------------- /docs/subtitles/SSA.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: SubStation Alpha 3 | description: The SubStation Alpha subtitle format. 4 | keywords: [SSA, ASS, subtitles] 5 | --- 6 | SubStation Alpha (SSA), also known as Advanced Substation Alpha (ASS) for v4+, is a subtitle format. It was originally used by the Windows program of the same name, aimed at the karaoke and anime communities. It's advanced styling compared to alternatives made it popular with release groups. 7 | 8 | # Overview 9 | SSA is a "plain" text format, with Unicode support in ASS. It can either be left as a plain text file with the extension of .ssa or .ass, or muxed into a Matroska (.mkv) or AVI (.avi) file. The original SubStation Alpha software is abandonware, however a wide variety of media authoring, muxing, and playing software supports SSA, including [VLC](../video-players.mdx), [MPV](../video-players.mdx), and [FFmpeg](../utilities/ffmpeg.mdx). 10 | 11 | ## Format 12 | SSA uses the word "script" to refer to the subtitles that track a video. The character ';' at the beginning of a line is used to mark comments. 13 | ### ASS (SSA v4+) header 14 | ``` 15 | [Script Info] 16 | ; This is an Advanced Sub Station Alpha v4+ script. 17 | ; For Sub Station Alpha info and downloads, 18 | ; go to http://www.eswat.demon.co.uk/ 19 | ; or email kotus@eswat.demon.co.uk 20 | ; 21 | ; Advanced Sub Station Alpha script format developed by #Anime-Fansubs@EfNET 22 | ; http://www.anime-fansubs.org 23 | ; 24 | ; For additional info and downloads go to http://vobsub.edensrising.com/ 25 | ; or email gabest@freemail.hu 26 | ; 27 | ; Note: This file was saved by Subresync. 28 | ; 29 | ScriptType: v4.00+ 30 | Collisions: Normal 31 | PlayResX: 384 32 | PlayResY: 288 33 | Timer: 100.0000 34 | 35 | [V4+ Styles] 36 | Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding 37 | Style: Default,Tahoma,16,&H00000000,&H00ffffff,&H00ffffff,&H00c0c0c0,-1,0,0,0,100,100,0,0.00,1,2,3,2,20,20,20,1 38 | 39 | [Events] 40 | Format: Layer, Start, End, Style, Actor, MarginL, MarginR, MarginV, Effect, Text 41 | Dialogue: 0,0:01:41.70,0:01:46.84,Default,,0000,0000,0000,,Le rugissement des larmes !\NTu es mon ami. 42 | Dialogue: 0,0:02:00.99,0:02:02.87,Default,,0000,0000,0000,,Est-ce vraiment Naruto ? 43 | ``` 44 | 45 | ## Further reading: 46 | [Multimedia wiki](https://wiki.multimedia.cx/index.php/SubStation_Alpha) 47 | 48 | [Specification](http://moodub.free.fr/video/ass-specs.doc) 49 | 50 | [Archived original software release](https://web.archive.org/web/20030603235926/http://www.eswat.demon.co.uk/substation.html) -------------------------------------------------------------------------------- /docs/subtitles/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "💬 Subtitles", 3 | "position": 6 4 | } 5 | -------------------------------------------------------------------------------- /docs/subtitles/webvtt.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: WebVTT 3 | --- 4 | 5 | # WebVTT 6 | 7 | WebVTT, or Web Video Text Tracks, is the format for subtitles on the web. It is used with the [HTML \ element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/track), or embedded into a webm container. 8 | 9 | ## Structure 10 | WebVTT is a simple, text-based format, based on [SRT](./SRT.mdx). All files start with the string 11 | `WEBVTT`, optionally, some text, then two new lines. That's where the 12 | data we're interested in starts. 13 | 14 | ### Cue 15 | 16 | A WebVTT file is basically a bunch of cues. They can have a line with 17 | an ID, then they have to have a line specifying from where to where 18 | the cue should be displayed like this: `STARTTIME -> ENDTIME [optional 19 | settings go here]`, then all the text to be displayed goes after 20 | it. That text can have some HTML-like formatting in it. To learn about 21 | them, see [the documentation](https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API#webvtt_cues). 22 | 23 | ## Example 24 | ``` 25 | WEBVTT 26 | 27 | 00:01.000 --> 00:04.000 28 | - Never drink liquid nitrogen. 29 | 30 | 00:05.000 --> 00:09.000 31 | - It will perforate your stomach. 32 | - You could die. 33 | ``` -------------------------------------------------------------------------------- /docs/utilities/Discord.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Discord 3 | sidebar_position: 14 4 | --- 5 | 6 | # Discord 7 | 8 | :::info Under Maintenance 9 | The content in this entry is incomplete & is in the process of being completed. 10 | ::: 11 | 12 | :::caution Pending Review 13 | The content in this entry may not be entirely accurate, & is pending further review to assess the quality of the information. 14 | ::: 15 | 16 | This entry is a bit different from others, and may be moved to a blog post in the future. Below are a number of tables that enumerate the codecs Discord supports for local playback (*not* livestreaming). These tables are based on community testing across a number of platforms, and are not exhaustive. 17 | 18 | ## Key 19 | 20 | The key has a number of emojis corresponding to full support, partial support, support with the [Discord embed workaround](https://wiki.x266.mov/blog/embedding-the-un-embeddable), and no support. 21 | 22 | - ✅ Full support 23 | - ⚠️ Partial support 24 | - 🛠️ Support with the Discord embed workaround 25 | - ❔ Untested or unknown 26 | - ❌ No support 27 | 28 | If the browser isn't compatible with a particular platform, it will be marked as N/A. 29 | 30 | ## Video Codecs & Containers 31 | 32 | **[H.264](../video/AVC.mdx)** 4:2:0 8-bit lossy | .mp4 33 | 34 | | Browser | macOS | Windows | iOS | Android | Linux | 35 | |---------|:-----:|:-------:|:---:|:-------:|:-----:| 36 | | Chrome | ✅ | ✅ | ❔ | ❔ | ✅ | 37 | | Firefox | ✅ | ✅ | ❔ | ❔ | ✅ | 38 | | Safari | ✅ | N/A | ✅ | N/A | N/A | 39 | | App | ✅ | ✅ | ✅ | ✅ | ✅ | 40 | 41 | **[H.265](../video/HEVC.mdx)** 4:2:0 8-bit lossy | .mp4 42 | 43 | | Browser | macOS | Windows | iOS | Android | Linux | 44 | |---------|:-----:|:-------:|:---:|:-------:|:-----:| 45 | | Chrome | ✅ | ⚠️** | ❔ | ❔ | ❌ | 46 | | Firefox | ❌ | ⚠️*** | ❔ | ❔ | ❌ | 47 | | Safari | ⚠️* | N/A | ⚠️* | N/A | N/A | 48 | | App | ✅ | ⚠️** | ⚠️* | ✅ | ❌ | 49 | 50 | \* Only supports H.265 with the `hvcC` box in the MP4 container. These streams can be encoded by adding `-tag:v hvc1` to an FFmpeg encoding command. 51 | 52 | \** Requires you have hardware accelerated HEVC decoding support. 53 | 54 | \*** Firefox on Windows requires you have hardware accelerated HEVC decoding support and the `media.wmf.hevc.enabled` flag enabled in `about:config`. 55 | 56 | **[H.265](../video/HEVC.mdx)** 4:2:0 8-bit lossy | .mov 57 | 58 | | Browser | macOS | Windows | iOS | Android | Linux | 59 | |---------|:-----:|:-------:|:---:|:-------:|:-----:| 60 | | Chrome | ✅ | ⚠️** | ❔ | ❔ | ❌ | 61 | | Firefox | ❌ | ⚠️*** | ❔ | ❔ | ❌ | 62 | | Safari | ⚠️* | N/A | ⚠️* | N/A | N/A | 63 | | App | ✅ | ⚠️** | ⚠️* | ✅ | ❌ | 64 | 65 | \* Only supports H.265 with the `hvcC` box in the MOV container. These streams can be encoded by adding `-tag:v hvc1` to an FFmpeg encoding command. 66 | 67 | \** Requires you have hardware accelerated HEVC decoding support. 68 | 69 | \*** Firefox on Windows requires you have hardware accelerated HEVC decoding support and the `media.wmf.hevc.enabled` flag enabled in `about:config`. 70 | 71 | **[H.265](../video/HEVC.mdx)** 4:2:0 10-bit lossy | .mp4 72 | 73 | | Browser | macOS | Windows | iOS | Android | Linux | 74 | |---------|:-----:|:-------:|:---:|:-------:|:-----:| 75 | | Chrome | ✅ | ❌ | ❔ | ❔ | ❌ | 76 | | Firefox | ❌ | ❌ | ❔ | ❔ | ❌ | 77 | | Safari | ⚠️* | N/A | ⚠️* | N/A | N/A | 78 | | App | ✅ | ❌ | ⚠️* | ✅ | ❌ | 79 | 80 | \* Only supports H.265 with the `hvcC` box in the MP4 container. These streams can be encoded by adding `-tag:v hvc1` to an FFmpeg encoding command. 81 | 82 | **[H.265](../video/HEVC.mdx)** 4:2:0 10-bit lossy | .mov 83 | 84 | | Browser | macOS | Windows | iOS | Android | Linux | 85 | |---------|:-----:|:-------:|:---:|:-------:|:-----:| 86 | | Chrome | ✅ | ❌ | ❔ | ❔ | ❌ | 87 | | Firefox | ❌ | ❌ | ❔ | ❔ | ❌ | 88 | | Safari | ⚠️* | N/A | ⚠️* | N/A | N/A | 89 | | App | ✅ | ❌ | ⚠️* | ✅ | ❌ | 90 | 91 | \* Only supports H.265 with the `hvcC` box in the MOV container. These streams can be encoded by adding `-tag:v hvc1` to an FFmpeg encoding command. -------------------------------------------------------------------------------- /docs/utilities/FFMetrics.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: FFMetrics 3 | sidebar_position: 8 4 | --- 5 | 6 | # FFMetrics 7 | 8 | 9 | 10 | 11 | FFmetrics Window 12 | 13 |

14 | 15 | FFMetrics is a proprietary Windows-only graphical user interface (GUI) for FFmpeg that allows you to calculate and visualize video quality metric results with graphs. PSNR, SSIM, and VMAF are the only options. 16 | 17 | 18 | ## Installation 19 | 20 | :::caution 21 | You need to have FFmpeg in your system PATH in order to use this. and `--enable-libvmaf` is required for VMAF calculation support. 22 | ::: 23 | 24 | Download the program from their GitHub homepage [releases](https://github.com/fifonik/FFMetrics/releases), pick whichever version you'd like to download and extract to your preferred folder. 25 | Run the exe file to launch. 26 | 27 | ## Usage 28 | 29 | Use the "Browse" button to insert your reference (source) video and "Add files" to add your distorted (encoded) video(s). Tick the checkboxes to choose the metric calculations you'd like to run. 30 | Custom VMAF models can be chosen via "VMAF options" and once you're done just click "Start", the program will automatically generate graphs live for each score. 31 | 32 | Depending on your CPU. This process might take a while. -------------------------------------------------------------------------------- /docs/utilities/MKVToolNix.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: MKVToolNix 3 | sidebar_position: 4 4 | --- 5 | 6 | # MKVToolNix 7 | 8 | 9 | 10 | MKVToolNix Workload 11 | 12 |

13 | 14 | MKVToolNix is free and open source GUI frontend to a set of tools (mkvmerge, mkvinfo, mkvpropedit, mkvextract) to create, alter and inspect Matroska files under Linux, other \*NIXes and Windows. 15 | 16 | MKVToolNix is built with Qt and written in C++. 17 | 18 | ## Installation 19 | 20 | Fortunately, Moritz Bunkus (Creator) is sane enough to provide downloads for pretty much all popular desktop operating systems. 21 | - Windows & Mac: [MKVToolNix site](https://mkvtoolnix.download/downloads.html). 22 | - Linux: [Install as a Flatpak](https://flathub.org/apps/org.bunkus.mkvtoolnix-gui) or check your package manager. 23 | 24 | ## Usage 25 | 26 | Drag and drop media files (or use "Add source files") to the application and modify, remux, demux, add streams, drop streams, anything and when done set your output destination and click "Start multiplexing" to start writing the output. 27 | 28 | ## Tips and tricks 29 | 30 | 1. You can import unencrypted BDMV (``index.bdmv``) or Blu-ray playlist files into MKVToolNix and it will prompt you to select which stream you would want to import. 31 | 2. You can set a WebM output in Output > Miscellaneous > "Create WebM compliant file" 32 | 3. You can split videos in multiple ways in Output > Splitting. Best of all? No freeze frames unlike in FFmpeg and no re-encoding required. 33 | 4. You can edit metadata without remuxing (Albeit rather limited) in the "Header Editor". -------------------------------------------------------------------------------- /docs/utilities/YUView.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: YUView 3 | sidebar_position: 13 4 | --- 5 | 6 | # YUView 7 | 8 | 9 | 10 | YUView Window 11 | 12 |

13 | 14 | [YUView](https://github.com/IENT/YUView) is a free and open source, cross-platform software developed by [IENT](https://github.com/IENT/) (Institut für Nachrichtentechnik) for working, playing, and analyzing YUV files. 15 | Though it supports more than YUV thanks to FFmpeg and other third party decoders while providing a lot of options for [HEVC](/docs/video/HEVC) internal visualizations such as slice index and transform depth. 16 | 17 | The software is built with QT and written in C++. 18 | 19 | 20 | ## Installation 21 | 22 | IENT provides the complete set of binaries for all major desktop operating systems on their GitHub [releases](https://github.com/IENT/YUView/releases/). So pick and choose your OS there. 23 | 24 | For Linux, YUView is in the official repo on Ubuntu and the AUR (Arch User Repository) for Arch Linux. But they do provide an AppImage in their releases and a [Flatpak](https://flathub.org/apps/de.rwth_aachen.ient.YUView). 25 | 26 | For those who want to compile from source instead, they provided a tutorial [here](https://github.com/IENT/YUView/wiki/Compile-YUView). 27 | 28 | 29 | ## Usage 30 | 31 | Open a file via the "File" > "Open File" tab on the top left or by pressing Ctrl + O, you may import multiple files. After that, you can start analyzing the file such as viewing motion vectors, isolating chroma to Cb for YCbCr, etc. -------------------------------------------------------------------------------- /docs/utilities/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "🛠️ Utilities", 3 | "position": 8, 4 | } 5 | -------------------------------------------------------------------------------- /docs/utilities/autocompressor.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: autocompressor 3 | sidebar_position: 15 4 | --- 5 | 6 | # Autocompressor 7 | 8 | [Autocompressor](https://autocompressor.net/) is a free online media compression tool by Auto-Rez Media Technologies that compresses videos, images, audio, and GIFs to a target file size. Depending on the file type you upload, it will be handled differently such that the result serves a similar function to what you uploaded. For example, videos are transcoded to videos, audio files to audio files, images to images, and animations to animations. 9 | 10 | From their site: 11 | > Reduce the file size of your video, image, audio, or GIF quickly and easily with our free online compression tool. Whether you need to shrink your file to 25MB or any other specific size, our tool offers a simple and intuitive solution. We'll also create perfectly compressed emotes and stickers for Discord. Using the link mode, you can instantly compress YouTube videos and other sites to 25MB. Our advanced AUTO-REZ™ technology achieves higher quality at a given filesize than any other website. Autocompressor will automatically choose the output format based on the input format and the compatibility category you select. 12 | 13 | Autocompressor also plans to offer a premium service in the future where the cost is determined by the CPU minutes used during the operation as well as the compression effort tier. For instance, encoding a typical 4-minute YouTube video to 8MB with MP4-Normal will cost about 5 CPU minutes. 14 | 15 | Users can create an account to get 1800 CPU minutes free. The site ensures high security for user data by using BCrypt hashes to store passwords. 16 | 17 | You can read more on their [About page](https://autocompressor.net/about). -------------------------------------------------------------------------------- /docs/utilities/av1an-command-gen.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: av1an-command-gen 3 | sidebar_position: 14 4 | --- 5 | 6 | # Av1an Command Generator 7 | 8 | Av1an Command Generator is a rudimentary tool for easily generating Av1an commands for AV1 encoding. It is written in the Zig programming language. It is very similar to [rAV1ator CLI](../utilities/rav1ator-cli.mdx) in the sense that it can produce Av1an commands based on user input. 9 | 10 | [GitHub Link](https://github.com/gianni-rosato/av1an-command-gen/) 11 | 12 | ## Description 13 | 14 | Av1an Command Generator is designed for beginners, although experienced encoders can use it to speed up their Av1an scripting. The program generates an AV1 video encoding command for use with [Av1an](../utilities/av1an.mdx), a chunked video encoding tool that can be used with [aomenc](../encoders/aomenc.mdx), [SVT-AV1](../encoders/SVT-AV1.mdx), and [rav1e](../encoders/rav1e.mdx). 15 | 16 | This tool takes in the video resolution, frame rate, desired encoder, speed preset, and target bitrate range as command line arguments. Based on these parameters, it calculates settings like tile columns/rows, lag-in-frames, CRF, and encoder speed preset. Then, it injects these into a generated encoding command string. 17 | 18 | The output is a full `av1an` command that can be run to encode a video based on the specified settings. 19 | 20 | ## Usage 21 | 22 | ```bash 23 | av1an-command-gen [width] [height] [fps] [encoder] [speed] [bitrate_target] 24 | ``` 25 | 26 | - `width` - Input video width in pixels 27 | - `height` - Input video height in pixels 28 | - `fps` - Input video frame rate 29 | - `encoder` - `aom`, `svt`, or `rav1e` 30 | - `speed` - `slower`, `slow`, `med`, `fast`, `faster` 31 | - `bitrate_target` - `lowest`, `low`, `med`, `high` 32 | 33 | ## Examples 34 | 35 | Generate a command for encoding a 1280x720 video at 24 fps using rav1e at 'med' speed and 'low' bitrate target: 36 | 37 | ```bash 38 | av1an-command-gen 1280 720 24 rav1e med low 39 | ``` 40 | 41 | Generate a command for encoding a 1920x1080 video at 30 fps using svt-av1 at 'fast' speed and 'high' bitrate target: 42 | 43 | ```bash 44 | av1an-command-gen 1920 1080 30 svt fast high 45 | ``` 46 | 47 | ## Installation 48 | 49 | This program requires the [Zig](https://ziglang.org/) v0.11.0 programming language. 50 | 51 | To build: 52 | 53 | ```bash 54 | zig build 55 | ``` 56 | 57 | This will produce a standalone binary `av1an-command-gen` in `zig-out/bin/`. 58 | 59 | ## License 60 | 61 | This project is licensed under the BSD 3-Clause License. -------------------------------------------------------------------------------- /docs/utilities/dav1d.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: dav1d 3 | sidebar_position: 15 4 | --- 5 | 6 | # dav1d 7 | 8 | The dav1d (which stands for "dav1d is an AV1 decoder") AV1 decoder is a high-performance, lightweight, and open-source software decoder for the AV1 video codec. It is primarily developed by [Two Orioles, LLC](https://www.twoorioles.com) on behalf of Videolan. It is known for being extremely lightweight and very fast. 9 | 10 | ## Features 11 | 12 | - **Design**: Written in C99 with assembly optimizations (NASM/GAS syntax), dav1d is designed for speed and low resource consumption 13 | - **Platform Support**: Compatible with x86, x64, ARMv7, ARMv8, & more. It runs on Windows, Linux, macOS, Android, and iOS. 14 | - **Adoption**: dav1d is used across all Android devices as well as major browsers like Chrome, Safari, Edge, and Firefox. It is believed that the AVIF decoding on Apple devices uses a version of dav1d that may be an internal fork. 15 | 16 | ## Binary Size 17 | 18 | dav1d's binary size is approximately one-third that of libaom's decoder, weighing in at around 0.9 MB. It also has a much smaller codebase that libaom, about one-tenth the lines of code; making it lightweight and easier to integrate into applications. 19 | 20 | ## Performance Comparison 21 | 22 | ### libgav1 23 | 24 | - dav1d significantly outperforms Google's libgav1 in decoding speed. For example: 25 | - On a Google Pixel 3 XL (without hardware acceleration), dav1d achieves 50 fps for 4K60 video decoding, whereas libgav1 achieves less than 10 fps. 26 | - dav1d is more efficient in CPU resource usage and power consumption, making it ideal for low-end devices. 27 | 28 | ### libaom 29 | 30 | - dav1d offers better decoding performance than libaom (the AV1 reference implementation), particularly after optimizations with assembly code. While libaom is slower due to its focus on demonstrating codec functionality rather than performance, dav1d is optimized for real-world use cases. 31 | - Memory usage is also significantly lower with dav1d—about one-fourth that of libaom. 32 | 33 | ### ffhevc 34 | 35 | dav1d's decoding efficiency rivals or exceeds that of ffhevc. 36 | 37 | ## Recent Developments 38 | 39 | As of April 2024: 40 | - Android officially adopted dav1d as its default AV1 software decoder via a Play System update. This change significantly improved video playback on devices without hardware AV1 decoders 41 | - dav1d supports smooth playback of 720p30 videos on most devices and even higher resolutions on capable hardware 42 | 43 | ## Conclusion 44 | dav1d stands out as the most efficient and widely adopted software-based AV1 decoder. Its small binary size, high performance across platforms, and low resource consumption make it a preferred choice over alternatives like libgav1 and libaom. Additionally, its adoption by major platforms such as Android underscores its effectiveness in real-world applications. 45 | -------------------------------------------------------------------------------- /docs/utilities/dovi_tool.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: dovi_tool 3 | sidebar_position: 9 4 | --- 5 | 6 | import Tabs from '@theme/Tabs'; 7 | import TabItem from '@theme/TabItem'; 8 | 9 | # dovi_tool 10 | 11 | **dovi_tool** is a command line tool written in Rust combining multiple utilities for working with Dolby Vision. 12 | 13 | ## Installation 14 | 15 | 16 | 17 | You can download official pre-built binaries for Linux & macOS from [the GitHub Releases](https://github.com/quietvoid/dovi_tool/releases), or you may compile the tool yourself via the instructions below. 18 | 19 | Ensure you have Rust installed. 20 | 21 | ```bash 22 | git clone https://github.com/quietvoid/dovi_tool.git 23 | cd dovi_tool 24 | RUSTFLAGS="-C target-cpu=native" cargo build --release 25 | ``` 26 | 27 | 28 | You can download official pre-built binaries for Windows from [the GitHub Releases](https://github.com/quietvoid/dovi_tool/releases), or you may compile the tool yourself via the instructions below. 29 | 30 | Ensure you have Rust installed. 31 | 32 | ```pwsh 33 | git clone https://github.com/quietvoid/dovi_tool.git 34 | cd dovi_tool 35 | set RUSTFLAGS=-C target-cpu=native 36 | cargo build --release 37 | ``` 38 | 39 | 40 | 41 | ## Usage 42 | 43 | ```bash title="General usage" 44 | dovi_tool [OPTIONS] 45 | ``` 46 | 47 | ```bash title="Get more options for a subcommand" 48 | dovi_tool --help 49 | ``` -------------------------------------------------------------------------------- /docs/utilities/eac3to.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: eac3to 3 | sidebar_position: 10 4 | --- 5 | 6 | # eac3to 7 | 8 | eac3to is a command line tool written by madshi to mostly work with audios (conversion) and raw, unencrypted Blu-rays (BDMV). 9 | 10 | :::info Compatibility 11 | This is a Windows only software, although usage with Wine is possible. 12 | ::: 13 | 14 | :::caution Avoid using when possible 15 | There is absolutely no reason whatsoever to use this software unless required by paleolithic [private trackers](https://wiki.installgentoo.com/wiki/Private_trackers), due to a bajillion dependencies needed that aren't bundled with the download itself. Use something like FFmpeg instead. 16 | ::: 17 | 18 | ## Installation 19 | 20 | - Download from [VideoHelp](https://www.videohelp.com/software/eac3to), drag and drop into your designated folder, add to PATH when necessary. 21 | 22 | ## Usage 23 | 24 | ### Audio conversion 25 | 26 | Examples: 27 | ```bash title="Convert PCM audio to FLAC" 28 | eac3to source.pcm destination.flac 29 | ``` 30 | 31 | ```bash title="Convert TrueHD to FLAC while also extracting the AC-3 compatibility layer" 32 | eac3to source.thd destination.flac destination.ac3 33 | ``` 34 | 35 | 36 | ### Get BDMV info 37 | 38 | ```bash 39 | eac3to Movie.2024.Bluray/BDMV 40 | ``` 41 | 42 | ### Demux 43 | 44 | ```bash 45 | eac3to Movie.2024.Bluray/BDMV -demux 46 | ``` 47 | 48 | ### Delay audio 49 | ```bash 50 | eac3to input.eac3 output.eac3 1000ms 51 | ``` -------------------------------------------------------------------------------- /docs/utilities/ffmpeg.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ffmpeg 3 | sidebar_position: 3 4 | --- 5 | 6 | # FFmpeg 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | [FFmpeg](https://ffmpeg.org/) is a multimedia framework that has utilities for transcoding, transmuxing, and filtering audio and video. It provides the `ffmpeg`, `ffprobe`, and `ffplay` command-line utilities. It also features the libav\* libraries, which allow you to use the functionality of FFmpeg without the programs. 13 | 14 | # Installation 15 | 16 | There are a number of ways to install FFmpeg depending on the operating system you're using. 17 | 18 | ### Linux & macOS 19 | 20 | **Package Manager** 21 | 22 | The easiest way to obtain FFmpeg is through your package manager. On most package managers, the package is simply named `ffmpeg`, however `ffprobe` and `ffplay` may have their own packages. Note that the packages may be outdated. 23 | 24 | **Compiling from source** 25 | 26 | A more complete guide is available at the [FFmpeg Compilation Guide](https://trac.ffmpeg.org/wiki/CompilationGuide). Simplifying things a bit, what you need to do is: 27 | - grab [the sources](https://ffmpeg.org/download.html) or clone from FFmpeg's git: `git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg` 28 | - Enter the directory & run `./configure --help` to see a list of features and libraries you can choose to build with. 29 | - Install all libraries you want to build FFmpeg with. 30 | - Run `./configure` with `--enable-` flags as desired. 31 | - Run `make`, or `make -j $(nproc)` on Linux to properly make use of multiple cores. on macOS, this would be `make -j $(sysctl -n hw.ncpu)`. 32 | - Run `make install`. May require root. 33 | 34 | ### Windows 35 | 36 | There are no official binaries for FFmpeg on Windows, but you can download third-party binaries: 37 | - by [gyan.dev](https://www.gyan.dev/ffmpeg/builds/) 38 | - by [BtbN](https://github.com/BtbN/FFmpeg-Builds/releases) 39 | 40 | # Using FFmpeg 41 | `ffmpeg` is the primary command-line tool of FFmpeg. It takes 0 or more files as inputs & outputs. 42 | 43 | `ffmpeg`'s command-line arguments are positional, meaning it matters where you put each option. Each input and output has its own arguments. For example, `ffmpeg -r 24 -i file1 file2` applies the `-r 24` option to the input `file1`, interpreting the video as having that frame rate, while `ffmpeg -i file1 -r 24 file2` applies the `-r 24` option to `file2`. To get a list of options, refer to the more verbose [FFmpeg documentation](//ffmpeg.org/ffmpeg-all.html). 44 | 45 | #### Transcode a video 46 | 47 | ```bash 48 | ffmpeg -i [input] -c:v [video_codec] -b:v [video_bitrate] -c:a [audio_codec] -b:a [audio_bitrate] output 49 | ``` 50 | 51 | | Option | Meaning | 52 | |----------------------|-------------------------------------------------------------| 53 | | `-c:v video_encoder` | **c**odec for the automatically selected **v**ideo stream | 54 | | `-b:v video_bitrate` | **b**itrate for the automatically selected **v**ideo stream | 55 | | `-c:a audio_encoder` | **c**odec for the automatically selected **a**udio stream | 56 | | `-b:a audio_bitrate` | **b**itrate for the automatically selected **a**udio stream | 57 | 58 | #### Transmux a video 59 | 60 | ```bash 61 | ffmpeg -i [input] -c copy [output] 62 | ``` 63 | 64 | | Option | Meaning | 65 | |-----------|-------------------------------| 66 | | `-c copy` | set the **c**odec to **copy** | 67 | 68 | #### Filter a video 69 | 70 | ```bash 71 | ffmpeg -i [input] -c:v [video_encoder] -c:a [audio_codec] (...) -vf [filter_name] output 72 | ``` 73 | 74 | | Option | Meaning | 75 | |-------------------|-------------------------------------------------| 76 | | `-vf filter_name` | set the **v**ideo **f**ilter to **filter_name** | 77 | 78 | #### Container selection 79 | 80 | FFmpeg will usually select the appropriate container based on the file extension of the output. If it doesn't detect the correct container, you can specify it with `-f`. 81 | 82 | | Option | Meaning | 83 | |------------------|---------------------------------------| 84 | | `-f format_name` | set the **f**ormat to **format_name** | 85 | 86 | *References:* 87 | *[^multimediawiki-howtos]: [HOWTO Search Results - MultimediaWiki](//wiki.multimedia.cx/index.php?search=HOWTO&title=Special%3ASearch&go=Go)* 88 | 89 | *Special thanks to [bluefalcon's encoding guide](https://encoding.bluefalcon.cc/) for this material, licensed under CC BY-SA 4.0. Our adaptation features formatting changes & content changes, specifically regarding the titles of some headings.* 90 | -------------------------------------------------------------------------------- /docs/utilities/hdr10plus_tool.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: hdr10plus_tool 3 | sidebar_position: 11 4 | --- 5 | 6 | import Tabs from '@theme/Tabs'; 7 | import TabItem from '@theme/TabItem'; 8 | 9 | # hdr10plus_tool 10 | 11 | **hdr10plus_tool** is a command line tool written in Rust for working with HDR10+ in HEVC files. It was previously named *hdr10plus_parser*. 12 | 13 | ## Installation 14 | 15 | 16 | 17 | You can download official pre-built binaries for Linux & macOS from [the GitHub Releases](https://github.com/quietvoid/hdr10plus_tool/releases), or you may compile the tool yourself via the instructions below. 18 | 19 | Ensure you have Rust installed. 20 | 21 | ```bash 22 | git clone https://github.com/quietvoid/hdr10plus_tool.git 23 | cd hdr10plus_tool 24 | RUSTFLAGS="-C target-cpu=native" cargo build --release 25 | ``` 26 | 27 | 28 | You can download official pre-built binaries for Windows from [the GitHub Releases](https://github.com/quietvoid/hdr10plus_tool/releases), or you may compile the tool yourself via the instructions below. 29 | 30 | Ensure you have Rust installed. 31 | 32 | ```pwsh 33 | git clone https://github.com/quietvoid/hdr10plus_tool.git 34 | cd hdr10plus_tool 35 | set RUSTFLAGS=-C target-cpu=native 36 | cargo build --release 37 | ``` 38 | 39 | 40 | 41 | ## Usage 42 | 43 | ```bash title="General usage" 44 | hdr10plus_tool [OPTIONS] 45 | ``` 46 | ```bash title="Get more options for a subcommand" 47 | hdr10plus_tool --help 48 | ``` 49 | ### Extracting 50 | ```bash title="Extract using FFmpeg pipe (Recommended)" 51 | ffmpeg -hide_banner -strict -2 -i input.mkv -map 0:v:0 -c copy -vbsf hevc_mp4toannexb -f hevc - | hdr10plus_tool extract -o metadata.json - 52 | ``` 53 | ```bash title="Extract from raw bitstream" 54 | hdr10plus_tool extract video.hevc -o metadata.json 55 | ``` 56 | ### Injecting 57 | 58 | ```bash title="Inject to raw bitstream" 59 | hdr10plus_tool inject -i video.hevc -j metadata.json -o injected_output.hevc 60 | ``` 61 | ### Removing HDR10+ Metadata 62 | 63 | ```bash title="Remove using FFmpeg pipe (Recommended)" 64 | ffmpeg -hide_banner -strict -2 -i input.mkv -map 0:v:0 -c copy -vbsf hevc_mp4toannexb -f hevc - | hdr10plus_tool remove - 65 | ``` 66 | ```bash title="Remove from raw bitstream" 67 | hdr10plus_tool remove video.hevc -o hdr10plus_removed_output.hevc 68 | ``` -------------------------------------------------------------------------------- /docs/utilities/mp4box.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: MP4Box 3 | sidebar_position: 12 4 | --- 5 | 6 | # MP4Box 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | MP4Box is a software for multi-purpose MP4 file manipulation. Part of the free and open-source multimedia framework called [GPAC](https://github.com/gpac/gpac) for working with the MP4/ISOBMFF standard. -------------------------------------------------------------------------------- /docs/utilities/nmkoder.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: NMKODER 3 | sidebar_position: 7 4 | --- 5 | 6 | # NMKODER 7 | 8 | 9 | 10 | NMKODER Window 11 | 12 |

13 | 14 | [NMKODER](https://github.com/n00mkrad/nmkoder) is a free and open source, **Windows-only** GUI software developed by [N00MKRAD](https://github.com/n00mkrad). Built around FFmpeg, FFprobe, and Av1an 15 | for video encoding, muxing, and analysis such as concatenation, metrics calculation, and bitrate plotting. Though most people use this for the [Av1an](/docs/utilities/av1an) functionality. 16 | 17 | The software is written in C# and built with WinForms. 18 | 19 | :::danger Abandonware 20 | NMKODER have not been updated for years, it is not recommended to use this. But you can attempt to replace the provided binaries (aomenc.exe, etc) with new ones to technically "update" this. 21 | ::: 22 | 23 | ## Installation 24 | 25 | You can download it from the GitHub [releases](https://github.com/n00mkrad/nmkoder/releases) page (the 7z file). Extract it to wherever after it's finished downloading, open the folder, and click the exe file. 26 | 27 | The entire software is portable, so you can share the folder with anyone and they'll have no problem with running it. 28 | 29 | ## Usage 30 | 31 | NMKODER is really straightforward to use and consists of multiple tabs for each functionality. There is a drop zone on the left for drag-and-drop video files. 32 | 33 | - "File List" is for imported files. 34 | - "Track List" is for A/V tracks. 35 | - "Quick Convert" tab is for conversion with FFmpeg. 36 | - "AV1AN" is what it exactly says. 37 | - "Utilities" is for helpful tools such as colorspace/HDR metadata transferring, metric calculation, etc. 38 | 39 | After configuring everything, click on the "Start" button to start encoding. -------------------------------------------------------------------------------- /docs/utilities/rAV1ator.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: rAV1ator 3 | sidebar_position: 5 4 | --- 5 | 6 | # rAV1ator 7 | 8 | :::info Under Maintenance 9 | The content in this entry is incomplete & is in the process of being completed. 10 | ::: 11 | 12 | rAV1ator is a fork of [Aviator](../utilities/Aviator.mdx) designed to use [Av1an](../utilities/av1an.mdx) & [rav1e](../encoders/rav1e.mdx) instead of [SVT-AV1](../encoders/SVT-AV1.mdx). It is also distributed as a Flatpak with bundled dependencies outside of Flathub; running the following command will allow you to install it: 13 | 14 | ```bash 15 | flatpak --user remote-add --no-gpg-verify project-volo https://giannirosato.com/repo && flatpak --user install project-volo net.natesales.rAV1ator 16 | ``` 17 | 18 | Initially, Aviator was supposed to switch to using the Av1an + rav1e backend that currently serves rAV1ator, but the decision was made to split the two projects due to their fundamentally different goals & Flathub's trouble with Rust dependencies. Aviator is designed to allow easy, painless AV1 encoding, while rAV1ator is designed to make accessing *specifically* Av1an & rav1e easier for interested codec enthusiasts. rAV1ator is maintained by Gianni Rosato & Trix. -------------------------------------------------------------------------------- /docs/video-players.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Video Players 3 | sidebar_label: ▶️ Video Players 4 | sidebar_position: 11 5 | --- 6 | 7 | # Video Players 8 | 9 | Many different players exist for video, but here are a few recommended ones: 10 | 11 | ## MPV 12 | 13 | **MPV** is a open source lightweight media player. It is intended as a command-line application, making it's user interface extremely minimal, however, many frontends exist for mpv, giving a more complete GUI, such as Celluloid and IINA. It has wide codec and container support. 14 | 15 | TODO: MPV keyboard shorcuts 16 | 17 | 18 | ## VLC 19 | 20 | **VLC** is an open source media player and toolkit. It supports almost all video and audio codecs in common use. 21 | 22 | 23 | Download instructions for VLC on all relevant platforms can be found at [VideoLAN's website](https://www.videolan.org/vlc/#download) 24 | 25 | 26 | ## MPC-HC 27 | 28 | **Media Player Classic - Home Cinema (MPC-HC)** is an open source media player designed exclusively for Windows 7, 8, 8.1, 10, 11 operating systems. Recognized for its simplicity and efficiency, MPC-HC provides users with a streamlined and user-friendly platform for playing a diverse range of audio and video file formats. Its lightweight design ensures smooth playback without taxing system resources. While the official development ceased in 2017, the community-driven MPC-HC on GitHub continues to provide updates and support. 29 | 30 | The latest un/stable builds of MPC-HC, maintained by the community, can be found on [clsid2's MPC-HC repository](https://github.com/clsid2/mpc-hc/releases). 31 | -------------------------------------------------------------------------------- /docs/video/AVC.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: AVC / H.264 3 | sidebar_position: 1 4 | --- 5 | 6 | # H.264 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | H.264, also known as AVC (Advanced Video Coding), is a video compression standard that has played a significant role in multimedia codec technology. H.264 revolutionized video encoding by offering vastly more efficient compression than predecessors, and has been the nearly universal defacto video compression standard since. Its history is marked by continuous refinement and widespread adoption, especially as it pertains to the highly optimized [x264](../encoders/x264.mdx) video encoder. Despite being over a decade old, H.264 remains relevant today. Newer codecs like [H.265](../video/HEVC.mdx), [VP9](../video/VP9.mdx), and [AV1](../video/AV1.mdx) aim to provide more efficient compression than H.264 but are currently not as universal. The choice between these codecs largely depends on the specific requirements of the application, compatibility and support, and the balance between compression efficiency and computational complexity. -------------------------------------------------------------------------------- /docs/video/AVS3.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: AVS3 3 | sidebar_position: 7 4 | --- 5 | 6 | # AVS3 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | AVS3 is the most recent codec from the AVS family. It aims to bring a significant coding improvement over AVS2 and [HEVC](../video/HEVC.mdx). The specification was divided into 2 phases, the first one (main profile) finished in 2019 and the second (high profile) in 2021. 13 | 14 | AVS3 has more flexible coding tree and block partitioning shemes compared to previous generation AVS codecs. It also employs new DCT-VII and DST-VII transforms. The work on AVS3 was sponsored by organizations including Peking University, Pengcheng Laboratory and Huawei. 15 | 16 | In 2022 it was [added](https://dvb.org/news/dvb-test-content-for-vvc-and-avs3-codecs-now-available) to worldwide DVB standard alongside [VVC](../video/VVC.mdx). As of 2024 there several hardware AVS3 decoders including Mediatek and HiSilicon. We should be seeing more AVS3 in hardware since it was added to DVB toolbox. 17 | 18 | [uavs3](https://github.com/uavs3) is an open source high performance software encoder and decoder of AVS3-P2. The project was initialized by the Peking University Shenzhen Graduate School and over the time was optimized for x86 and arm processors. FFmpeg since version 6 supports only avs3 decoding via [uavs3d](https://github.com/uavs3/uavs3d). 19 | 20 | Intel partnered with Boya and created [SVT-AVS3](https://www.intel.com/content/www/us/en/developer/articles/technical/scalable-video-technology.html) which to my knowledge is not available to the public. The only open-source encoder available to general public is [uavs3e](/docs/encoders/uavs3e). 21 | 22 | -------------------------------------------------------------------------------- /docs/video/ECM.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ECM 3 | sidebar_position: 15 4 | --- 5 | 6 | # ECM 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | ECM (Enhanced Compression Model) is a video codec developed by the Fraunhofer Heinrich-Hertz-Institute. It is purportedly designed to succeed H.266, or [VVC](../video/VVC.mdx). 13 | 14 | The [Git repo](https://vcgit.hhi.fraunhofer.de/ecm/ECM) provides a bit more information: 15 | 16 | ```md 17 | # ECM reference software 18 | 19 | This software package is the reference software for Enhanced Compression Model (ECM). The reference software includes both encoder and decoder functionality. 20 | Reference software is useful in aiding users of a video coding standard to establish and test conformance and interoperability, and to educate users and demonstrate the capabilities of the test model. 21 | The software has been jointly developed by the ITU-T Video Coding Experts Group (VCEG, Question 6 of ITU-T Study Group 16) and the ISO/IEC Moving Picture Experts Group (MPEG, Working Group 11 of Subcommittee 29 of ISO/IEC Joint Technical Committee 1). 22 | ``` 23 | 24 | Other than this generic overview, build instructions are provided in the repo's README. Not much else is known about ECM besides the fact that it will likely become H.267. -------------------------------------------------------------------------------- /docs/video/FFV1.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: FFV1 3 | sidebar_position: 12 4 | --- 5 | 6 | # FFV1 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | FFV1 ([rfc9043](https://datatracker.ietf.org/doc/html/rfc9043)) is a lossless intra-frame video codec designed for archival use and preservation. Created by Michael Niedermayer, it is part of the [FFmpeg](../utilities/ffmpeg.mdx) project. The codec supports a wide range of color spaces, works with YUV and RGB content including alpha channel of color depths ranging from 8 to 16 bits (only up to 14 in case of RGB). It has good parallelization support and achieves very high compression ratios compared to other lossless video encoders such as [UT Video](../video/utvideo.mdx), albeit at the cost of being more resource-hungry. 13 | 14 | ## History 15 | 16 | In 2003, the codec was merged into FFmpeg; however, the bitstream specification was frozen in 2006 (officially FFV1 version 0). Later, in 2009, version 1 came out, covering more video bit depths. Version 2 never got its release, existing only in experimental form. 17 | 18 | The third bitstream version was frozen in 2013 and is still the latest as of 2024. It added multithreading support and frame integrity checking. 19 | 20 | There is a fourth version [coming](https://datatracker.ietf.org/doc/draft-ietf-cellar-ffv1-v4/) which might bring better support for color spaces, compression improvements, and maybe proper inter-frame prediction. 21 | 22 | ## Usage 23 | 24 | ```bash title="Fast, heavily multithreaded" 25 | ffmpeg -i input.mkv -c:v ffv1 -slices 16 out.mkv 26 | ``` 27 | 28 | ```bash title="Slow, highest compression" 29 | ffmpeg -i input.mkv -c:v ffv1 -g 60 -slices 4 -context 1 -coder 2 out.mkv 30 | ``` 31 | 32 | ```bash title="Recommended for archival purposes, high compression, multithreaded" 33 | ffmpeg -i input.mkv -c:v ffv1 -g 1 -slices 16 -slicecrc 1 -context 1 -coder 2 out.mkv 34 | ``` 35 | 36 | ### Options 37 | - `slices` - Slices divide the frame into multiple parts that can be encoded and decoded in parallel. Can only be one of: [`4`, `6`, `9`, `12`, `16`, `24`, `30`], where `4` is the default. 38 | - `slicecrc` - Setting it to `1` will enable the decoder to detect errors in the bitstream. Must be enabled for archival use. Can be either `0` or `1`. 39 | - `context` - Setting it to `1` will make the encoder use a larger context size, which usually leads to better compression. Can be either `0` or `1`. 40 | - `coder` - Sets entropy coding method: 41 | - `0` - Golomb-Rice (faster, default) 42 | - `1` - Range Coder (used for higher bit depths and better compression) 43 | - `2` - Range Coder with custom state transition table (almost the same as `1`) 44 | - `g` - Sets GOP size. Must be `1` for archival use. [See below](#intra-frame-only-catch) 45 | 46 | ## Intra-frame only catch 47 | 48 | Intra-frame codecs do not use well known inter-frame video coding techniques such as motion compensation, reusing parts of surrounding frames or adapting encoding context based on them. Every frame is independent from one another. Common intra-frame codecs include Motion JPEG (Lossy), Motion JPEG 2000 (Both), and [UT Video](../video/utvideo.mdx) (Lossless). 49 | 50 | If you're a careful reader, you might have noticed that setting `GOP size` isn't a common characteristic among intra-frame codecs. 51 | 52 | In fact, FFV1 can be considered an intra-frame codec only if the `GOP size` is set to `1`. When it's larger than that, its context model depends on other frames found within the GOP, which contradicts the definition of intra-frame video codec. That is why it's highly advised to set `GOP size` to `1` for archiving. This way, if a single frame gets damaged, you'll 53 | only lose that frame. If `GOP size` was large, you might lose much bigger part of the video. 54 | 55 | References: 56 | - [Wikipedia](https://en.wikipedia.org/wiki/FFV1) 57 | - [RFC9043](https://datatracker.ietf.org/doc/html/rfc9043) 58 | - [FFmpeg Docs](https://trac.ffmpeg.org/wiki/Encode/FFV1) 59 | - [This Thread](https://forum.shotcut.org/t/exporting-as-ffv1-change-form-to-support-lossless-parameters/41230/19?page=2) 60 | - [This Question](https://video.stackexchange.com/questions/24874/what-does-the-context-parameter-mean-when-using-ffv1-in-ffmpeg) -------------------------------------------------------------------------------- /docs/video/HEVC.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: HEVC / H.265 3 | sidebar_position: 2 4 | --- 5 | 6 | # H.265 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | H.265, also known as High-Efficiency Video Coding (HEVC), is a video compression standard designed to deliver higher-quality videos with reduced file sizes. It is a successor to the [H.264](../video/AVC.mdx) codec and was developed to address the increasing demand for efficient and high-quality video compression, particularly in the context of 4K content. This codec is encumbered by royalties. -------------------------------------------------------------------------------- /docs/video/Theora.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Theora 3 | sidebar_position: 9 4 | --- 5 | 6 | # Theora 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | Theora is a legacy video codec first released in 2004. It is derived from VP3, part of the same family of codecs that formed [VP8](./VP8.mdx), [VP9](./VP9.mdx) and [AV1](./AV1.mdx). 13 | 14 | ## Encoding 15 | Theora is frequently contained within a ogg (`.ogg` or `.ogv`) container with [vorbis](../audio/Vorbis.mdx) audio. 16 | 17 | To be filled. -------------------------------------------------------------------------------- /docs/video/VC-1.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: VC-1 3 | sidebar_position: 8 4 | --- 5 | 6 | # VC-1 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | VC-1 is video codec created by Microsoft and released in 2006. It largely aimed to compete with [AVC](../video/AVC.mdx). 13 | 14 | ## Encoding 15 | VC-1 can be contained in `.mp4`, `.mkv`, and `.avi` containers. 16 | To be filled 17 | ## Decoding 18 | VC-1 can be decoded by [FFmpeg](../utilities/ffmpeg.mdx), [VLC](../video-players.mdx), [MPV](../video-players.mdx), and any device that supports blu-ray. -------------------------------------------------------------------------------- /docs/video/VP8.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: VP8 3 | sidebar_position: 4 4 | --- 5 | 6 | # VP8 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | VP8 is a video compression format developed by On2 Technologies released in 2008. It was later released as a royalty free codec in 2010 by Google. Its efficiency is competitive with [AVC](../video/AVC.mdx). VP8 was a significant player in the royalty-free codec space and was used in various applications like web video delivery. It is the precursor to [VP9](../video/VP9.mdx) & [AV1](../video/AV1.mdx), which both further improve video compression efficiency. VP8 has faced criticism for having a messy specification that many considered to be incomplete. -------------------------------------------------------------------------------- /docs/video/VP9.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: VP9 3 | sidebar_position: 5 4 | --- 5 | 6 | # VP9 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | VP9, famous for being YouTube's codec of choice for many years, is a royalty free video compression format that competes with [HEVC](../video/HEVC.mdx) and [AVC](../video/AVC.mdx). It is slightly less efficient than HEVC in terms of visual quality, but VP9 is a computationally much simpler codec and therefore is very easy on system resources when decoding. If you're interested in VP9 encoding, please see the [vpxenc](../encoders/vpxenc.mdx) or [SVT-VP9](../encoders/SVT-VP9.mdx) sections. -------------------------------------------------------------------------------- /docs/video/VVC.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: VVC / H.266 3 | sidebar_position: 3 4 | --- 5 | 6 | # H.266 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](../contribution-guide.mdx) to get started as a contributor! 10 | ::: 11 | 12 | H.266, or VVC (Versatile Video Coding), is a codec standardized in 2020 by the Joint Video Experts Team (JVET). It succeeds [H.265](../video/HEVC.mdx), and claims to be 40% more efficient. In practice, it is currently about as efficient as [AV1](../video/AV1.mdx) when using the [VVenC](../encoders/VVenC.mdx) encoder, although it is inherently a more complex format which means it will be more difficult to decode. It is encumbered by royalties. 13 | 14 | [FFmpeg](../utilities/ffmpeg.mdx) 7.0 released in April 2024 comes with native VVC decoder. 15 | -------------------------------------------------------------------------------- /docs/video/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "📹️ Video", 3 | "position": 3, 4 | } -------------------------------------------------------------------------------- /docs/video/prores.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ProRes 3 | sidebar_position: 14 4 | --- 5 | 6 | # ProRes 7 | 8 | ProRes is a family of lossy video compression codecs developed by Apple Inc. ProRes is designed to serve as a high-quality "visually lossless" video editing codec that offers superior image quality compared to many other editing codecs while still maintaining a relatively compact file size compared to uncompressed video. 9 | 10 | ProRes uses 4:2:2 or 4:4:4 chroma subsampling depending on the specific subset. This provides greater color fidelity and precision than typical 8-bit 4:2:0 codecs like what can commonly be seen with [AVC](../video/AVC.mdx). 11 | 12 | ProRes compression uses the [Discrete Cosine Transform](../introduction/terminology.mdx#discrete-cosine-transform-dct) and intra-frame compression techniques; there is no inter-frame compression applied, meaning redundancy between frames isn't utilized to increase compression efficiency; this keeps decoding light, and simplifies the codec. ProRes is able to achieve very high quality video with relatively low data rates around 100-400 MB/s depending on the resolution and specific ProRes variant. 13 | 14 | ## Format Breakdown 15 | 16 | There are multiple variants of ProRes that offer different combinations of image quality and compression ratios: 17 | 18 | Format | Chroma Subsampling | Supported Bit Depth(s) 19 | --- | :---: | ---: 20 | [ProRes RAW](https://www.apple.com/final-cut-pro/docs/Apple_ProRes_RAW.pdf) | N/A | 12-bit 21 | ProRes 4444 XQ | 4:4:4 | 10-bit, 12-bit\* 22 | ProRes 4444 | 4:4:4 | 10-bit, 12-bit\* 23 | ProRes HQ | 4:2:2 | 10-bit 24 | ProRes | 4:2:2 | 10-bit 25 | ProRes LT | 4:2:2 | 10-bit 26 | ProRes Proxy | 4:2:2 | 10-bit 27 | 28 | \**ProRes 4444 XQ and 4444 support 12-bit color depth, but the lossless alpha channel is 16-bit if included.* 29 | 30 | The higher data rate variants like 4444 XQ and HQ prioritize maximum fidelity at the expense of larger file sizes. The lower data rate variants trade off some quality for much smaller file sizes suitable for editing where storage space is constrained. 31 | 32 | ## Usage 33 | 34 | Apple ProRes Raw is available in LUMIX cameras & the Sony Alpha FX3 via Atomos Ninja V. Both cameras are capable of recording 12-bit uncompressed RAW video in the ProRes RAW format. 35 | 36 | ProRes has become widely adopted in professional video post-production workflows due to its quality, performance, metadata handling, and tight integration with Apple's Final Cut Pro editing software & ecosystem. 37 | 38 | ProRes is supported by most major non-linear editing systems beyond just Final Cut Pro, including Adobe Premiere Pro & BlackMagic's DaVinci Resolve. This cross-platform compatibility makes it a convenient codec for exchange between different video editing applications. 39 | 40 | While designed primarily as an editing codec, Apple has also implemented hardware acceleration for ProRes encode & decode in recent Mac devices via Apple Silicon starting with the M2 chip. This hardware acceleration enables higher performance for tasks like playback, transcoding, and export compared to software-only implementations. -------------------------------------------------------------------------------- /docs/video/utvideo.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: UT Video 3 | sidebar_position: 13 4 | --- 5 | 6 | # UT Video Codec Suite 7 | 8 | :::danger Help Wanted 9 | This section is in need of contributions. If you believe you can help, please see our [Contribution Guide](/docs/contribution-guide) to get started as a contributor! 10 | ::: 11 | 12 | UT Video Codec Suite is a fast, lossless video codec, developed by Takeshi Umezawa (梅澤 威志, Umezawa Takeshi) and released under the free GNU General Public License. The algorithm of UT video is based on the Huffman code. 13 | 14 | UT Video was developed as an alternative to HuffYUV, in order to achieve better compression. It can handle color spaces such as YUV422 (ULY2), RGB (ULRG), RGBA (ULRA) and, most recently, YUV420 (ULY0). 15 | 16 | It has both x86 and x64 builds. Due to its multithreading support, this codec is also capable of encoding HDTV material in real time. The codec requires support for the SSE2 instruction set because it is heavily used for speed optimizations. 17 | 18 | There are various predction modes, which can be used via [FFmpeg](/docs/utilities/ffmpeg): 19 | - no prediction employed 20 | - left neighbour prediction (continuous for the whole slice) 21 | - gradient prediction 22 | - median prediction 23 | 24 | You can use FFmpeg to encode utvideo as follows: 25 | `ffmpeg -i [input] -c:v utvideo -pred [0,1,2,3] [output]` 26 | 27 | *References: [Wikipedia](https://en.wikipedia.org/wiki/Ut_Video_Codec_Suite)* -------------------------------------------------------------------------------- /frontmatter.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://frontmatter.codes/frontmatter.schema.json", 3 | "frontMatter.taxonomy.contentTypes": [ 4 | { 5 | "name": "default", 6 | "pageBundle": false, 7 | "previewPath": null, 8 | "fields": [ 9 | { 10 | "title": "Title", 11 | "name": "title", 12 | "type": "string" 13 | }, 14 | { 15 | "title": "Description", 16 | "name": "description", 17 | "type": "string" 18 | }, 19 | { 20 | "title": "Publishing date", 21 | "name": "date", 22 | "type": "datetime", 23 | "default": "{{now}}", 24 | "isPublishDate": true 25 | }, 26 | { 27 | "title": "Content preview", 28 | "name": "preview", 29 | "type": "image" 30 | }, 31 | { 32 | "title": "Is in draft", 33 | "name": "draft", 34 | "type": "draft" 35 | }, 36 | { 37 | "title": "Tags", 38 | "name": "tags", 39 | "type": "tags" 40 | }, 41 | { 42 | "title": "Categories", 43 | "name": "categories", 44 | "type": "categories" 45 | } 46 | ] 47 | } 48 | ], 49 | "frontMatter.framework.id": "docusaurus", 50 | "frontMatter.content.publicFolder": "static", 51 | "frontMatter.preview.host": "http://localhost:3000", 52 | "frontMatter.content.pageFolders": [ 53 | { 54 | "title": "blog", 55 | "path": "[[workspace]]/blog" 56 | }, 57 | { 58 | "title": "pages", 59 | "path": "[[workspace]]/src/pages" 60 | }, 61 | { 62 | "title": "utilities", 63 | "path": "[[workspace]]/docs/utilities" 64 | }, 65 | { 66 | "title": "introduction", 67 | "path": "[[workspace]]/docs/introduction" 68 | }, 69 | { 70 | "title": "filtering", 71 | "path": "[[workspace]]/docs/filtering" 72 | }, 73 | { 74 | "title": "encoders", 75 | "path": "[[workspace]]/docs/encoders" 76 | }, 77 | { 78 | "title": "2021-08-26-welcome", 79 | "path": "[[workspace]]/blog/2021-08-26-welcome" 80 | } 81 | ] 82 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codec-wiki", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "docusaurus": "docusaurus", 7 | "start": "docusaurus start", 8 | "build": "docusaurus build", 9 | "swizzle": "docusaurus swizzle", 10 | "deploy": "docusaurus deploy", 11 | "clear": "docusaurus clear", 12 | "serve": "docusaurus serve", 13 | "write-translations": "docusaurus write-translations", 14 | "write-heading-ids": "docusaurus write-heading-ids" 15 | }, 16 | "dependencies": { 17 | "@ant-design/icons": "^5.3.6", 18 | "@docusaurus/core": "^3.7.0", 19 | "@docusaurus/preset-classic": "^3.7.0", 20 | "@easyops-cn/docusaurus-search-local": "latest", 21 | "@mdx-js/react": "^3.0.1", 22 | "antd": "^5.16.4", 23 | "clsx": "^2.1.1", 24 | "plugin-image-zoom": "latest", 25 | "prism-react-renderer": "^2.3.1", 26 | "react": "^18.3.0", 27 | "react-dom": "^18.3.0", 28 | "rehype-katex": "7", 29 | "remark-math": "6", 30 | "yarn": "^1.22.22" 31 | }, 32 | "devDependencies": { 33 | "@docusaurus/module-type-aliases": "^3.7.0" 34 | }, 35 | "browserslist": { 36 | "production": [ 37 | ">0.5%", 38 | "not dead", 39 | "not op_mini all" 40 | ], 41 | "development": [ 42 | "last 1 chrome version", 43 | "last 1 firefox version", 44 | "last 1 safari version" 45 | ] 46 | }, 47 | "overrides": { 48 | "docusaurus-plugin-image-zoom": { 49 | "@docusaurus/theme-classic": "^3.0.0" 50 | } 51 | }, 52 | "engines": { 53 | "node": ">=18.0" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /sidebars.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Creating a sidebar enables you to: 3 | - create an ordered group of docs 4 | - render a sidebar for each doc of that group 5 | - provide next/previous navigation 6 | 7 | The sidebars can be generated from the filesystem, or explicitly defined here. 8 | 9 | Create as many sidebars as you want. 10 | */ 11 | 12 | // @ts-check 13 | 14 | /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ 15 | const sidebars = { 16 | // By default, Docusaurus generates a sidebar from the docs folder structure 17 | tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], 18 | 19 | // But you can create a sidebar manually 20 | /* 21 | tutorialSidebar: [ 22 | 'intro', 23 | 'hello', 24 | { 25 | type: 'category', 26 | label: 'Tutorial', 27 | items: ['tutorial-basics/create-a-document'], 28 | }, 29 | ], 30 | */ 31 | }; 32 | 33 | module.exports = sidebars; 34 | -------------------------------------------------------------------------------- /src/pages/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import clsx from 'clsx'; 3 | import Link from '@docusaurus/Link'; 4 | import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; 5 | import Layout from '@theme/Layout'; 6 | 7 | import styles from './index.module.css'; 8 | 9 | function HomepageHeader() { 10 | const {siteConfig} = useDocusaurusContext(); 11 | return ( 12 |
13 |
14 |

{siteConfig.title}

15 |

{siteConfig.tagline}

16 |
17 | 20 | Start learning! 21 | 22 |
23 |
24 |
25 | ); 26 | } 27 | 28 | export default function Home() { 29 | const {siteConfig} = useDocusaurusContext(); 30 | return ( 31 | 34 | 35 | 36 | ); 37 | } 38 | -------------------------------------------------------------------------------- /src/pages/index.module.css: -------------------------------------------------------------------------------- 1 | /** 2 | * CSS files with the .module.css suffix will be treated as CSS modules 3 | * and scoped locally. 4 | */ 5 | 6 | .heroBanner { 7 | padding: 4rem 0; 8 | text-align: center; 9 | position: relative; 10 | overflow: hidden; 11 | } 12 | 13 | @media screen and (max-width: 996px) { 14 | .heroBanner { 15 | padding: 2rem; 16 | } 17 | } 18 | 19 | .buttons { 20 | display: flex; 21 | align-items: center; 22 | justify-content: center; 23 | } 24 | -------------------------------------------------------------------------------- /src/pages/markdown-page.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Markdown page example 3 | --- 4 | 5 | # Markdown page example 6 | 7 | You don't need React to write simple standalone pages. 8 | -------------------------------------------------------------------------------- /src/utils/ImageCarousel.mdx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | import { Flex, Carousel, Image, Card } from 'antd'; 3 | import { LeftOutlined, RightOutlined } from '@ant-design/icons'; 4 | 5 | export const CarouselGenerator = ({ imageData, pixelsAbove, pixelsBelow }) => { 6 | // Thanks to Nathan Arritt: https://github.com/ant-design/ant-design/issues/12479#issuecomment-1071492637 7 | const Arrow = ({ currentSlide, direction, slideCount, ...carouselProps }) => 8 | direction === 'left' ? ( 9 | 10 | ) : ( 11 | 12 | ); 13 | 14 | if (!pixelsAbove || pixelsAbove < 0) { 15 | pixelsAbove = 0; 16 | } 17 | if (!pixelsBelow || pixelsBelow < 0) { 18 | pixelsBelow = 0; 19 | } 20 | 21 | return ( 22 | 26 |
27 | } 31 | nextArrow={} 32 | > 33 | {imageData.map(datum => { 34 | return ; 38 | })} 39 | 40 |
41 | 42 | ); 43 | }; 44 | 45 | export const TabbedCarouselGenerator = ({ tabMap, pixelsAbove, pixelsBelow }) => { 46 | const [activeTabKey, setActiveTabKey] = useState(Object.keys(tabMap)[0]); 47 | 48 | const onTabChange = (key) => { 49 | setActiveTabKey(key); 50 | }; 51 | 52 | if (!pixelsAbove || pixelsAbove < 0) { 53 | pixelsAbove = 0; 54 | } 55 | if (!pixelsBelow || pixelsBelow < 0) { 56 | pixelsBelow = 0; 57 | } 58 | 59 | return ( 60 | 64 |
65 | { 68 | return { key, label: tab.label }; 69 | }) 70 | } 71 | activeTabKey={activeTabKey} 72 | onTabChange={onTabChange} 73 | > 74 | {tabMap[activeTabKey].component} 75 | 76 |
77 | 78 | ); 79 | }; -------------------------------------------------------------------------------- /static/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/.nojekyll -------------------------------------------------------------------------------- /static/CNAME: -------------------------------------------------------------------------------- 1 | wiki.x266.mov -------------------------------------------------------------------------------- /static/_headers: -------------------------------------------------------------------------------- 1 | # They are safe for immutable caching, as we're not changing fonts any time soon 2 | 3 | /static/fonts/* 4 | Cache-Control: public 5 | Cache-Control: max-age=31536000 6 | Cache-Control: immutable -------------------------------------------------------------------------------- /static/fonts/Hubot-Sans.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/fonts/Hubot-Sans.woff2 -------------------------------------------------------------------------------- /static/fonts/Inter.var.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/fonts/Inter.var.woff2 -------------------------------------------------------------------------------- /static/fonts/Mona-Sans.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/fonts/Mona-Sans.woff2 -------------------------------------------------------------------------------- /static/fonts/Monaspace-Argon.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/fonts/Monaspace-Argon.woff2 -------------------------------------------------------------------------------- /static/fonts/Monaspace-Krypton.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/fonts/Monaspace-Krypton.woff2 -------------------------------------------------------------------------------- /static/fonts/Monaspace-Neon.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/fonts/Monaspace-Neon.woff2 -------------------------------------------------------------------------------- /static/img/_DSC8466-smaller-recomp.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/_DSC8466-smaller-recomp.jxl -------------------------------------------------------------------------------- /static/img/_DSC8466-smaller-xyb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/_DSC8466-smaller-xyb.jpg -------------------------------------------------------------------------------- /static/img/_DSC8466-smaller.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/_DSC8466-smaller.avif -------------------------------------------------------------------------------- /static/img/_DSC8466-smaller.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/_DSC8466-smaller.jpg -------------------------------------------------------------------------------- /static/img/_DSC8466-smaller.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/_DSC8466-smaller.jxl -------------------------------------------------------------------------------- /static/img/_DSC8466.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/_DSC8466.jpg -------------------------------------------------------------------------------- /static/img/av1_for_dummies_guide.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/av1_for_dummies_guide.avif -------------------------------------------------------------------------------- /static/img/av1_for_dummies_guide.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/av1_for_dummies_guide.jpg -------------------------------------------------------------------------------- /static/img/av1an_96_workers.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/av1an_96_workers.avif -------------------------------------------------------------------------------- /static/img/av1stonks.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/av1stonks.avif -------------------------------------------------------------------------------- /static/img/blog_turbo-metrics_11-2024/image.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/blog_turbo-metrics_11-2024/image.avif -------------------------------------------------------------------------------- /static/img/box-size-mac.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/box-size-mac.avif -------------------------------------------------------------------------------- /static/img/clybius-av1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/clybius-av1.webp -------------------------------------------------------------------------------- /static/img/clybius-dwayne.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/clybius-dwayne.webp -------------------------------------------------------------------------------- /static/img/codec-wiki-social-card.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/codec-wiki-social-card.webp -------------------------------------------------------------------------------- /static/img/color-huffman-tree-svg.svg: -------------------------------------------------------------------------------- 1 | 011001 -------------------------------------------------------------------------------- /static/img/comp_showcase.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/comp_showcase.webp -------------------------------------------------------------------------------- /static/img/compare-guide.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/compare-guide.webp -------------------------------------------------------------------------------- /static/img/crop_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/crop_1.jpg -------------------------------------------------------------------------------- /static/img/crop_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/crop_2.jpg -------------------------------------------------------------------------------- /static/img/crop_tool.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/crop_tool.webp -------------------------------------------------------------------------------- /static/img/discord-embed-blog-image.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/discord-embed-blog-image.webp -------------------------------------------------------------------------------- /static/img/discord.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/img/discordnfpis-fnaf.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/discordnfpis-fnaf.webp -------------------------------------------------------------------------------- /static/img/docusaurus-social-card.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/docusaurus-social-card.jpg -------------------------------------------------------------------------------- /static/img/docusaurus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/docusaurus.png -------------------------------------------------------------------------------- /static/img/eve_av1_speed.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/eve_av1_speed.webp -------------------------------------------------------------------------------- /static/img/eve_vp9_speed.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/eve_vp9_speed.webp -------------------------------------------------------------------------------- /static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/favicon.ico -------------------------------------------------------------------------------- /static/img/img_size/img_1350.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_1350.avif -------------------------------------------------------------------------------- /static/img/img_size/img_1350.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_1350.jpg -------------------------------------------------------------------------------- /static/img/img_size/img_1350.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_1350.jxl -------------------------------------------------------------------------------- /static/img/img_size/img_1660.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_1660.avif -------------------------------------------------------------------------------- /static/img/img_size/img_1660.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_1660.jpg -------------------------------------------------------------------------------- /static/img/img_size/img_1660.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_1660.jxl -------------------------------------------------------------------------------- /static/img/img_size/img_1916.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_1916.avif -------------------------------------------------------------------------------- /static/img/img_size/img_1916.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_1916.jpg -------------------------------------------------------------------------------- /static/img/img_size/img_1916.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_1916.jxl -------------------------------------------------------------------------------- /static/img/img_size/img_270.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_270.avif -------------------------------------------------------------------------------- /static/img/img_size/img_270.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_270.jpg -------------------------------------------------------------------------------- /static/img/img_size/img_270.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_270.jxl -------------------------------------------------------------------------------- /static/img/img_size/img_958.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_958.avif -------------------------------------------------------------------------------- /static/img/img_size/img_958.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_958.jpg -------------------------------------------------------------------------------- /static/img/img_size/img_958.jxl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/img_size/img_958.jxl -------------------------------------------------------------------------------- /static/img/nmkoder.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/nmkoder.avif -------------------------------------------------------------------------------- /static/img/nmkoder.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/nmkoder.webp -------------------------------------------------------------------------------- /static/img/preset_7_meme.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/preset_7_meme.webp -------------------------------------------------------------------------------- /static/img/python-path.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/python-path.webp -------------------------------------------------------------------------------- /static/img/responsive_image_linter.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/responsive_image_linter.avif -------------------------------------------------------------------------------- /static/img/stolenshoes-mario.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/stolenshoes-mario.webp -------------------------------------------------------------------------------- /static/img/stolenshoes-puss.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/stolenshoes-puss.webp -------------------------------------------------------------------------------- /static/img/svt-1.8.0-testing-blog-image.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/svt-1.8.0-testing-blog-image.webp -------------------------------------------------------------------------------- /static/img/svt-2.1.0-testing-blog-image.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/svt-2.1.0-testing-blog-image.webp -------------------------------------------------------------------------------- /static/img/svt-2.2.x-testing-blog-image.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/svt-2.2.x-testing-blog-image.webp -------------------------------------------------------------------------------- /static/img/tiles.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/tiles.webp -------------------------------------------------------------------------------- /static/img/vs2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/vs2.webp -------------------------------------------------------------------------------- /static/img/yuview.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/yuview.avif -------------------------------------------------------------------------------- /static/img/yuview.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/yuview.webp -------------------------------------------------------------------------------- /static/img/zoom_tool.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/av1-community-contributors/codec-wiki/4544c4be321cff6e4627e400e0023b605b67de37/static/img/zoom_tool.avif --------------------------------------------------------------------------------