dovitool [](https://github.com/quietvoid/dovitool/actions/workflows/ci.yml) [](https://github.com/quietvoid/dovi_tool/actions/workflows/release.yml)
May 17, 2026 · View on GitHub
dovi_tool is a CLI tool combining multiple utilities for working with Dolby Vision.
The dolby_vision crate is also hosted in this repo, see README for use as a Rust/C lib.
The C compatible library is also known as libdovi, refer to the same document for building/installing.
Building
Toolchain
The minimum Rust version to build dovi_tool is 1.88.0.
Dependencies
On Linux systems, fontconfig is required.
Alternatively, system fonts can be bypassed by building with --no-default-features --features internal-font.
Release binary
To build release binary in target/release/dovi_tool run:
cargo build --release
Usage
dovi_tool [OPTIONS] <SUBCOMMAND>
To get more detailed options for a subcommand
dovi_tool <SUBCOMMAND> --help
All options
--help,--version,--crop,--drop-hdr10plus,--mode,--edit-config,--start-code
All subcommands
- Metadata utilities:
info,generate,editor,export,plot - HEVC parsing & handling:
convert,demux,mux,extract-rpu,inject-rpu
More information and detailed examples for the subcommands below.
Dolby Vision metadata utilities
dovi_tool provides an important set of tools for analyzing, editing and generating Dolby Vision metadata.
Commands
-
info
Prints the parsed RPU information.
To get the summary, use--summaryor-s.Using
--frame: prints the RPU data as JSON for a specific frame.- Frame indices start at 0.
Example to get metadata for frame 124:
dovi_tool info -i RPU.bin -f 123
-
generate
Allows generating a binary RPU from different sources.
From an exported CMv2.9 or CMv4.0 Dolby Vision XML metadata file
-
The binary RPU can be created with support for the following metadata levels:
- CMv2.9: L1, L2, L5, L6
- CMv4.0: CMv2.9 + L3, L8, L9, L10, L11
Both per-shot and per-frame trims are supported.
Level 5 metadata requires bothcanvas-widthandcanvas-heightto be set.Example:
dovi_tool generate --xml dolbyvision_metadata.xml -o RPU_from_xml.bin
From a generic profile 5/8.1/8.4 configuration JSON file
-
See documentation: generator.md or examples
Example:
dovi_tool generate -j assets/generator_examples/default_cmv40.json -o RPU_generated.bin
From an existing HDR10+ metadata JSON file
-
The metadata is generated from a configuration JSON file, and the L1 metadata is derived from HDR10+ metadata.
The HDR10+ metadata must contain scene information for proper scene cuts.Flags:
--hdr10plus-peak-sourceHow to extract the peak brightness for the metadata [default:histogram]
Possible values:histogram,histogram99,max-scl,max-scl-luminance
Example:
dovi_tool generate -j assets/generator_examples/default_cmv40.json --hdr10plus-json hdr10plus_metadata.json -o RPU_from_hdr10plus.bin
From a madVR HDR measurement file
-
The metadata is generated from a configuration JSON file, and the L1 metadata is derived from the madVR measurements.
Supports using custom targets nits from Soulnight's madMeasureHDR Optimizer, with flag--use-custom-targets.Example:
dovi_tool generate -j assets/generator_examples/default_cmv40.json --madvr-file madmeasure-output.bin -o RPU_from_madVR.bin
-
-
editor
Allows editing a binary RPU according to a JSON config. See documentation: editor.md or examples.
All indices start at 0, and are inclusive. For example, using "0-39" edits the first 40 frames.Example:
dovi_tool editor -i RPU.bin -j assets/editor_examples/mode.json -o RPU_mode2.bin
-
export
Allows exporting a binary RPU file to text files containing relevant information.
The command allows specifying the desired data to export as file.
Default:exportoutputs the full RPU serialized to JSON (equivalent to--data all).-d,--data: List of key-value export parameters formatted askey=output,key2...all- Exports the list of RPUs as a JSON filescenes- Exports the frame indices at whichscene_refresh_flagis set to 1level5- Exports the video's L5 metadata in the form of aneditorconfig JSON
-l,--levels: Export specific extension metadata levels.- Possible values: all levels in format
level1,level2... Seedovi_tool export --helpmessage.
Output file path may be added aslevel1=output.csv,level2...to override default path.
- Possible values: all levels in format
-f,--levels-format: Format to output levels exports, defaults tocsv.- Possible values:
csv,json
- Possible values:
Example to export the whole RPU list to JSON:
dovi_tool export -i RPU.bin -d all=RPU_export.jsonExample to export both scene change frames and L5 metadata (with specific path)
dovi_tool export -i RPU.bin -d scenes,level5=L5.json
-
plot
Allows plotting the RPU metadata into a graph.
The output is a PNG image.Flags:
-t,--titleThe title to set at the top of the plot-s,--startSet frame range start-e,--endSet frame range end (inclusive)
Plot options:
-
-p,--plot-typeSets the DV metadata level to plot [default:l1, brightness metadata]
Possible values:l1,l2,l8,l8-saturation,l8-hue -
--target-nitsTarget brightness in nits for L2/L8 plots [default:100]
Possible values:100,300,600,1000,2000,4000 -
--trimsTrim parameters to include in L2/L8 trims plots. By default all are included.
Possible values:slope,offset,power,chroma,saturation,ms,mid,clip
L8only:midandclip.
Example:
dovi_tool plot RPU.bin -t "Dolby Vision L1 plot" -o L1_plot.png # L2 plot dovi_tool plot RPU.bin -p l2
HEVC parsing & handling
For working with an HEVC source file, there are multiple options that apply to most commands:
Conversion modes
-m,--modeSets the mode for RPU processing.- Default (no mode) - Copies the RPU untouched.
0- Parses the RPU, rewrites it untouched.1- Converts the RPU to be MEL compatible.2- Converts the RPU to be profile 8.1 compatible.- Removes luma/chroma mapping for profile 7 FEL.
3- Converts profile 5 to 8.1.4- Converts to profile 8.4.5- Converts to profile 8.1, preserving mapping.- Old mode 2.
Other options
-c,--cropSet active area offsets to 0 (meaning no letterbox bars).--drop-hdr10plusIgnore HDR10+ metadata when writing the output HEVC.--edit-configPath to editor config JSON file.- Limited editing capabilities when working with HEVC. See documentation.
--start-codeHEVC NALU start code to use when writing HEVC.- Options:
four(default),annex-b fouris the default, writing a 4-byte start code all the time.annex-bvaries the start code, according to spec. Almost matchesx265behaviour.
- Options:
Commands
-
convert
Converts RPU within a single layer HEVC file.
The enhancement layer can be discarded using--discard.Examples to convert to profile 8.1 and discard EL:
dovi_tool -m 2 convert --discard file.hevcffmpeg -i input.mkv -c:v copy -bsf:v hevc_mp4toannexb -f hevc - | dovi_tool -m 2 convert --discard -
-
demux
Rust port of yusesope's python tool. Credits goes to them.
Demuxes single track dual layer Dolby Vision into Base layer and Enhancement layer files.
The base layer file output is equivalent to using theremovesubcommand.Flags:
--el-onlyOutput the EL file only.
Examples:
dovi_tool demux file.hevcffmpeg -i input.mkv -c:v copy -bsf:v hevc_mp4toannexb -f hevc - | dovi_tool demux -Example to convert RPU to profile 8.1 while demuxing:
dovi_tool -m 2 demux file.hevc
-
mux
Interleaves the enhancement layer into a base layer HEVC bitstream.
This is the inverse ofdemux.Muxing supports the base layer input as both raw HEVC bitstream and piped/streamed.
--no-add-audDisable adding AUD NALUs between frames--remove-eosRemoves EOS/EOB NALUs from both BL and EL, if present--discardDiscard the EL while muxing. This is equivalent to injecting the RPU, but without extracting first.
Examples:
dovi_tool mux --bl BL.hevc --el EL.hevcffmpeg -i input.mkv -c:v copy -bsf:v hevc_mp4toannexb -f hevc - | dovi_tool mux --bl - --el EL.hevcExample to convert RPU to profile 8.1 while muxing:
dovi_tool -m 2 mux --bl BL.hevc --el EL.hevc --discard
-
extract-rpu
Extracts Dolby Vision RPU from an HEVC file.
Input file:- HEVC bitstream: single track (BL + RPU), single track dual layer (BL+EL+RPU) or an enhancement layer (EL+RPU) video file.
- Matroska =: MKV file containing a HEVC video track.
Supports profiles 4, 5, 7, and 8.
Flags:
-l,--limitNumber of frames to process from the input. Processing stops after N frames.
Examples:
dovi_tool extract-rpu video.hevc # Directly using MKV file dovi_tool extract-rpu video.mkvffmpeg -i input.mkv -c:v copy -bsf:v hevc_mp4toannexb -f hevc - | dovi_tool extract-rpu - -o RPU.binFEL to MEL example:
dovi_tool -m 1 extract-rpu video.hevc
-
inject-rpu
Interleaves RPU NAL units between slices in an HEVC encoded bitstream.
Global options have no effect when injecting.Flags:
--no-add-audDisable adding AUD NALUs between frames
Example:
dovi_tool inject-rpu -i video.hevc --rpu-in RPU.bin -o injected_output.hevc
-
remove
Removes the enhancement layer and RPU data from the video.
Outputs to aBL.hevcfile by default.Examples:
dovi_tool remove file.hevcffmpeg -i input.mkv -c:v copy -bsf:v hevc_mp4toannexb -f hevc - | dovi_tool remove -
Build artifacts can be found in the Github Actions.
More features may or may not be added in the future.