High bit-depth Support with Avisynth
Contents |
Introduction
Currently, Avisynth only supports 8-bit video. Nevertheless, through various utilities, plugins, and scripts, Avisynth can be used to import, process, and export high bit-depth video. There has been some effort to update Avisynth itself to support high bit-depth, but there has been no progress as of 2012 (http://forum.doom9.org/showthread.php?t=162436).
What is deepcolor?
Deepcolor refers to using more than 8 bits of data to represent each color channel. It is also referred to as high bit-depth color. Basically, deepcolor/high bit-depth allows finer graduations of color, allowing smoother gradients and more detail. Please refer to this short, easy to understand article: http://www.pcworld.com/article/171223/what_is_10bit_color.html
Why Use Deepcolor?
-Higher internal precision, using high-bit depth color, when processing an image in a filter, gives a higher quality (8-bit) output
-If a video filter uses linear gamma internally, there can be noticeable differences in the image. A linear gamma representation is best supported with a high bit-depth. See the illustration for ResampleHQ, http://int64.org/projects/resamplehq/
-If you encode high-bit depth video, you can get better compression (reportedly up to 30%) and less banding. Banding is one of the most serious liabilities of 8-bit depth. Refer to the following references for an explanation of why 10-bit encodes compress better:
http://x264.nl/x264/10bit_02-ateme-why_does_10bit_save_bandwidth.pdf
http://x264.nl/x264/10bit_01-ateme_pierre_larbier_422_10-bit.pdf
http://x264.nl/x264/10bit_03-422_10_bit_pristine_video_quality.pdf
-Professional video is stored in 10bit formats (like ProRes 422) and people want to use Avisynth for processing.
Importing High Bit-depth Video into Avisynth
- Patched ffms2 - (See SAPikachu's signature for downloading the latest verions)
- Can import DNxHD, ProRes, or other 10 bit videos in their native chroma format (4:2:2 and 4:4:4 are also supported), output will always be in the Stack16 format.
- Note:
- AviSynth 2.6.0 Alpha5 or later is recommended.
- There may be a long delay on opening, as FFMS2 performs an automatic indexing operation.
- At the time of writing (1-8-2012), the official libav library has a bug with decoding of DNxHD video, so you should use the ffmbc build to decode that.
- Other than that, both builds should be OK, but ffmbc may have better support for professional video formats (ProRes etc.), and libav is better for H264 and other common formats.
- Note:
- LSMASHSource - Another source filter to import regular 8-bit and high bit depth video.
- LSMASHSource includes these 2 fuctions to import video:
- LSMASHVideoSource - This function uses libavcodec as a video decoder and L-SMASH as a demuxer. Recommended for MP4, MOV, ISO Base Media and its derived file formats.
- LWLibavVideoSource - This function uses libavcodec as a video decoder and libavformat as a demuxer.
- LSMASHSource includes these 2 fuctions to import video:
- VapourSource - Can be used to import VapourSynth scripts into Avisynth. Video can be 8-bit or greater.
The following methods are obsolete! If you must, only use as a verification or as workaround:
- Readv210mod - Can read uncompressed v210 in .mov container as color. Needs a manual setting skip the file header.
- Sashimi - Sashimi 0.85 has different bit-depth support. Please see OtherFormats/Read_v210.avs included in the package.
- ReadV210 - Can read uncompressed v210 in .mov container as greyscale.
- Alternative builds and methods of importing (also obsolete):
- ffms2mod - Can return most 10bit video in the Avisynth high bit-depth convention.
- RawSource with ffmpeg - shows an example of using ffmpeg to convert to a 16bit format which can be read by RawSource in Avisynth 2.6.
Processing High Bit-depth Video with Avisynth
Some plugins support processing internally in a higher bit-depth for better quality and return an 8-bit video. Others support full high-bit processing and can retun a special format 16 bit video.
Most developers have adopted a vertically stacked format known as Stack16, where the high bits (MSB) are stored in the upper half of a video, and the lower bits (LSB) in the lower half of the video.
This special format must be processed only with high-bit aware scripts and plugins.
- AutoAdjust - A high quality automatic color adjustment filter. AutoAdjust can input and output 16-bits; all calculations are internally done in 32-bit float to avoid rounding errors and artifacts.
- AvgAll_16 - Average all frames in a clip with 16-bit accuracy.
- CLExpr - OpenCl plugin for runtime calculation of expressions on 8 and 16-bit depths clips. Makes mt_lutxy and mt_lutxyz possible on 16-bit.
- ClipBlend16 - Blend an specified amount of frames into a single frame with 16-bit accuracy.
- Debilinear - This filter is designed to reverse the effects of bilinear upsampling. 8/16-bit input and output.
- Deep Color Tools - This Script provides basic functions to import 10bit video, do color adjustments, and export to 8bit. (NOT RECOMMENDED, THERE ARE BETTER ALTERNATIVES)
- DenoiseMD - 8/16-bit denoise.
- Dither - A set of scripts, original and modified plugins to process 16-bit clips. Some of the functions include 16-bit color space conversion, debanding, denoising, resizing, and dithering 16-bit to lower bit depths.
- flash3kyuu_deband - Debanding filter with 8/16 bit input/output. In addition flash3kyuu_deband can be used to dither 16-bit to lower bit depths.
- HQDeringMod - Deringing script with 16-bit input and output.
- RedAverage - 16-bit capable average with masking.
- ResampleHQ - Provides gamma-aware resizing and color space conversion. Uses 32-bit linear color internally but input and output is limited to 8-bit.
- Resizers Functions Pack - Includes LinearResize(), a function to resize in linear space. 8/16-bit input/output.
- SMDegrainMod - 8/16 bit denoising with additional features like sharpening.
- SmoothAdjust - High quality YUV color adjustment plugin. SmoothAdjust can input and output 16-bits; all calculations are internally done in 32-bit float to avoid rounding errors and artifacts.
- TempLinearApproximate - 8/16 bit filter for temporal linear approximation between pixels . Meant mainly for denoising aid in motion compensated clips.
You can also check DeepColor Filters section for possibly more listings.
8-bit video to 16-bit Scene Referred Linear .EXR’s
Codecs which support high bit-depth
- H.264, High 10 Profile (Hi10P) and above - 10-bit YUV 4:2:0/4:2:2/4:4:4 available via x264.
- Ut Video Codec Suite - YUV 4:2:2 10bit (lossless compression).
https://en.wikipedia.org/wiki/Digital_cinematography#Digital_acquisition_codecs_compared
Exporting High Bit-depth Video
You can encode out of AVIsynth to 10bit x264 via
AVS4x264 https://astrataro.wordpress.com/2012/06/04/avs4x264mod-v0-8-0-supports-d2v-dgi-dga-avi-mkv-mp4-m2ts-wmv-input-and-auto-fps-correction/ This command-line tool will directly convert from a high bit-depth convention Avisynth script to H.264 with x264, including the 10bit profile. Please check the blog for updated versions.
x264+tmod https://astrataro.wordpress.com/2012/07/21/x264-rev2208677-tmod/ tmod is a modification to the x264 encoder to enable various enhancements, especially for the use of high-bit depth input. Supports the Avisynth high bit-depth convention, quality enhancements, bit-depth conversion, filters such as denoising and deinterlacing
10bit x264 command-line example:
avs2yuv -raw "script.avs" -o - | x264-10bit --demuxer raw --input-depth 10 --input-res 1280x720 --fps 24 --output "out.mp4" -
AVS2yuv (http://akuvian.org/src/avisynth/avs2yuv/)
AVS2pipemod (https://github.com/chikuzen/avs2pipemod#readme). The Dither html doc with the plugin gives examples of using AVS2yuv including lossless 10bit.
AVS2x264mod http://forum.doom9.org/showthread.php?p=1529305#post1529305 Example:
avs4x264mod.exe --x264-binary “C:\x264_64-abc.exe” -o out.264 in.avs
Playback of High Bit-depth Videos
-Most of the time you will only get to see dithered 8-bit video, as equipment to truly display high bit-depths is rare at the consumer level in 2011. Digital theaters project up to 12-bit video. Guide: http://coalgirls.wakku.to/?page_id=4635
-The Bluray standard does not support xvColor (using full-range 8 bit video) or high bit-depth video.
Playback Software
MPlayer with high-bit codecs installed, such as http://samples.mplayerhq.hu/drivers32/new/AppleProResDecoder.qtx ProRES 422
MadVR http://forum.doom9.org/showthread.php?t=146228
Other sofware and information
Further information on high-bit playback http://forum.doom9.org/showthread.php?t=161548
FFdshow builds with 10-bit support http://forum.doom9.org/showthread.php?t=161915
An excellent guide on 10-bit playback: http://haruhichan.com/wpblog/?p=205
Sample High Bit-Depth Videos
See this thread for links to examples. There are also deepcolor versions of standard test clips (used in image processing research). http://forum.doom9.org/showthread.php?t=158836&highlight=v210