Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/quietvoid/hdr10plus_tool

CLI utility to work with HDR10+ in HEVC files.
https://github.com/quietvoid/hdr10plus_tool

dynamic-metadata ffmpeg hdr hdr10plus

Last synced: 3 months ago
JSON representation

CLI utility to work with HDR10+ in HEVC files.

Awesome Lists containing this project

README

        

# hdr10plus_tool [![CI](https://github.com/quietvoid/hdr10plus_tool/workflows/CI/badge.svg)](https://github.com/quietvoid/hdr10plus_tool/actions/workflows/ci.yml) [![Artifacts](https://github.com/quietvoid/hdr10plus_tool/workflows/Artifacts/badge.svg)](https://github.com/quietvoid/hdr10plus_tool/actions/workflows/release.yml)
CLI utility to work with HDR10+ in HEVC files.
Previously named `hdr10plus_parser`, now it's more than just a parser.

 

## **Building**
### **Toolchain**

The minimum Rust version to build **`hdr10plus_tool`** is 1.79.0.

### **Dependencies**
On Linux systems, [fontconfig](https://github.com/yeslogic/fontconfig-rs#dependencies) is required.
Alternatively, system fonts can be bypassed by building with `--no-default-features --features internal-font`.

 

Options that apply to the commands:
* `--verify` Checks if input file contains dynamic metadata.
* `--skip-validation` Skip profile conformity validation. Invalid metadata is set to profile `N/A`.

## Commands
* ### **extract**
Extracts the HDR10+ metadata from HEVC SEI messages to a JSON file.
Also calculates the scene information for compatibility with Samsung tools.

If no output is specified, the file is only parsed partially to verify presence of metadata.

**Flags**:
* `--skip-reorder` Skip metadata reordering after extracting.
- [Explanation on when to use `--skip-reorder`](README.md#wrong-metadata-order-workaround).

**Examples**:
```console
hdr10plus_tool extract video.hevc -o metadata.json
```
```console
ffmpeg -i input.mkv -map 0:v:0 -c copy -bsf:v hevc_mp4toannexb -f hevc - | hdr10plus_tool extract -o metadata.json -
```

**Extract without validating**:
```console
hdr10plus_tool --skip-validation extract video.hevc -o metadata.json
```

 
* ### **inject**
Interleaves HDR10+ metadata NAL units before slices in an HEVC encoded bitstream.
`--verify` has no effect with this command.

**Example**:
```console
hdr10plus_tool inject -i video.hevc -j metadata.json -o injected_output.hevc
```

 
* ### **remove**
Removes HDR10+ metadata NAL units (or SEI messages) in an HEVC encoded bitstream.
`--verify` has no effect with this command.

**Example**:
```console
hdr10plus_tool remove video.hevc -o hdr10plus_removed_output.hevc
```
```console
ffmpeg -i input.mkv -map 0:v:0 -c copy -bsf:v hevc_mp4toannexb -f hevc - | hdr10plus_tool remove -
```
 
* ### **plot**
Allows plotting the HDR10+ brightness metadata into a graph.
The output is a PNG image.

**Flags**:
- `-t`, `--title` The title to set at the top of the plot
- `-p`, `--peak-source` How to extract the peak brightness for the metadata [default: `histogram`]
Possible values: `histogram`, `histogram99`, `max-scl`, `max-scl-luminance`

**Example**:
```console
hdr10plus_tool plot metadata.json -t "HDR10+ plot" -o hdr10plus_plot.png
```
 

### Wrong metadata order workaround
The `skip-reorder` option should only be used as a workaround for misauthored HEVC files.
Some rare retail discs use an incorrect workflow where the original metadata is inserted sequentially in the final video, which causes issues when B frames exist.
As the metadata is inserted for every frame in **decode order**, on playback it is likely that the **presentation order** is different.
In playback, this means that the metadata associated with the image presented may be wrong.

A simple way to tell if the metadata is in the wrong order is by looking at the `SceneFrameNumbers` list in the JSON.
If there are many entries where scenes only contain 1 to 3 frames, it is likely that the video has wrong order.
The `SceneFirstFrameIndex` values should also be aligned with scene cuts in the video.
If the scenes are small and misaligned, `skip-reorder` must be used when using `extract` to keep the order correct.

 

## Sample files
Tears of Steel samples encoded with x265 using `--dhdr10-info` for tests.

Sample JSON metadata available here: https://bitbucket.org/multicoreware/x265_git/downloads/