mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-11-11 19:45:06 +00:00
Deployed 1a8e633 with MkDocs version: 1.6.1
This commit is contained in:
@@ -3230,7 +3230,8 @@ all of this in <a href="../../guide/drm-and-cdm/">DRM and CDM</a> and
|
||||
the API surface.</p>
|
||||
<h3 id="dolby-vision-and-hybrid">Dolby Vision and hybrid<a class="headerlink" href="#dolby-vision-and-hybrid" title="Permanent link">¶</a></h3>
|
||||
<p>Two DV mechanisms sit on top of the track model. <strong>DV fixup</strong> re-exposes DV signalling on
|
||||
HLS streams that carry a valid DV RPU but advertise plain HEVC (<code>dv_compatible_bitstream</code>).
|
||||
HLS and DASH streams that carry a valid DV RPU but advertise plain HEVC, with DV only in the
|
||||
supplemental codecs (<code>dv_compatible_bitstream</code>). <code>--list</code> shows such a track as <code>HDR10+DV</code> or <code>HDR10P+DV</code>.
|
||||
<strong>Hybrid</strong> processing (<code>Video.Range.HYBRID</code>) selects an HDR10(+) base and a DV donor,
|
||||
extracts the RPU with <code>dovi_tool</code>, and injects it onto the base layer, to make a single
|
||||
track that carries both HDR10 metadata and the DV RPU. Both are automatic once the
|
||||
|
||||
@@ -3297,6 +3297,40 @@ either enum <strong>names</strong> or their <strong>values</strong>, comma-separ
|
||||
</table>
|
||||
<div class="language-shell highlight"><span class="filename">Grab HDR10 and Dolby Vision in one run</span><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>unshackle<span class="w"> </span>dl<span class="w"> </span>-q<span class="w"> </span><span class="m">2160</span><span class="w"> </span>-r<span class="w"> </span>HDR10,DV<span class="w"> </span>EXAMPLE<span class="w"> </span><span class="s1">'...'</span>
|
||||
</span></code></pre></div>
|
||||
<p><code>--list</code> labels a track that carries a second format as <code><range>+<format></code>:</p>
|
||||
<ul>
|
||||
<li>The first part is the range that <code>-r</code> selects the track by.</li>
|
||||
<li>The second part is the format that the track also carries.</li>
|
||||
<li>The <code>+</code> only joins the two parts. unshackle writes HDR10+ as <code>HDR10P</code>, so <code>HDR10+DV</code> is HDR10 with
|
||||
Dolby Vision, not HDR10+ with Dolby Vision.</li>
|
||||
</ul>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Label</th>
|
||||
<th>Track</th>
|
||||
<th>Selected by</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>DV+HDR10P</code></td>
|
||||
<td>A Dolby Vision track that also carries HDR10+</td>
|
||||
<td><code>-r DV</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>HDR10+DV</code></td>
|
||||
<td>An HDR10 track whose frames also carry a Dolby Vision profile 8 RPU</td>
|
||||
<td><code>-r HDR10</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>HDR10P+DV</code></td>
|
||||
<td>An HDR10+ track whose frames also carry a Dolby Vision profile 8 RPU</td>
|
||||
<td><code>-r HDR10P</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>The output file of a track with a Dolby Vision profile 8 RPU plays as Dolby Vision on a DV screen.</p>
|
||||
<div class="admonition warning">
|
||||
<p class="admonition-title">HYBRID requires dovi_tool</p>
|
||||
<p><code>-r HYBRID</code> makes a single hybrid track by injecting the Dolby Vision RPU
|
||||
@@ -3309,10 +3343,11 @@ HEVC; a title whose HDR10/HDR10+ tracks are all in another codec fails before it
|
||||
If the hybrid step fails for one resolution, unshackle logs an error, skips that resolution
|
||||
and goes on with the other resolutions of the title. When no hybrid file at all was made,
|
||||
the title fails.</p>
|
||||
<p>A DV track that carries HDR10+ (<code>DV+HDR10P</code> in <code>--list</code>) is already a hybrid. At a resolution
|
||||
that has one, <code>-r HYBRID</code> selects the DV+HDR10P track with the highest bitrate (the lowest with
|
||||
<code>--worst</code>) and muxes it as it is, with no base track and no dovi_tool step. The other
|
||||
resolutions get a hybrid that unshackle makes.</p>
|
||||
<p>A track that is <code>DV+HDR10P</code>, <code>HDR10+DV</code> or <code>HDR10P+DV</code> in <code>--list</code> already carries Dolby Vision and an HDR10
|
||||
or HDR10+ base, so it is already a hybrid. At a resolution that has one, <code>-r HYBRID</code> selects it
|
||||
and muxes it as it is, with no base track and no dovi_tool step. A track that carries HDR10+
|
||||
comes first, then the highest bitrate (the lowest with <code>--worst</code>). The other resolutions get a
|
||||
hybrid that unshackle makes.</p>
|
||||
<p>To keep an HDR10+ deliverable <em>alongside</em> the hybrid, request both ranges:
|
||||
<code>-r HYBRID,HDR10P</code>. <code>-r HYBRID</code> on its own muxes only the merged hybrid.</p>
|
||||
</div>
|
||||
|
||||
BIN
Binary file not shown.
@@ -2911,6 +2911,28 @@
|
||||
<nav class="md-nav" aria-label=" Video">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#unshackle.core.tracks.Video.carries_hdr10plus" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
<code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code> carries_hdr10plus
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#unshackle.core.tracks.Video.finished_hybrid" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
<code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code> finished_hybrid
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#unshackle.core.tracks.Video.range_label" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
@@ -2948,6 +2970,39 @@
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#unshackle.core.tracks.Video.dv_fourccs" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code> dv_fourccs
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#unshackle.core.tracks.Video.has_dv_codec" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code> has_dv_codec
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#unshackle.core.tracks.Video.is_dv_composite" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code> is_dv_composite
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
@@ -4164,6 +4219,28 @@
|
||||
<nav class="md-nav" aria-label=" Video">
|
||||
<ul class="md-nav__list">
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#unshackle.core.tracks.Video.carries_hdr10plus" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
<code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code> carries_hdr10plus
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#unshackle.core.tracks.Video.finished_hybrid" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
<code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code> finished_hybrid
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#unshackle.core.tracks.Video.range_label" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
@@ -4201,6 +4278,39 @@
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#unshackle.core.tracks.Video.dv_fourccs" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code> dv_fourccs
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#unshackle.core.tracks.Video.has_dv_codec" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code> has_dv_codec
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#unshackle.core.tracks.Video.is_dv_composite" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code> is_dv_composite
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
@@ -7813,13 +7923,17 @@ A <code>native_hybrid</code> track is the hybrid itself, so it stays unflagged t
|
||||
|
||||
|
||||
<a href="#unshackle.core.tracks.Tracks.select_hybrid" class="headerlink" title="Permanent link">¶</a></h3>
|
||||
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">select_hybrid</span><span class="p">(</span><span class="n">tracks</span><span class="p">,</span> <span class="n">quality</span><span class="p">,</span> <span class="n">worst</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">select_hybrid</span><span class="p">(</span>
|
||||
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">tracks</span><span class="p">,</span> <span class="n">quality</span><span class="p">,</span> <span class="n">worst</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">generate_dv</span><span class="o">=</span><span class="kc">False</span>
|
||||
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="p">)</span>
|
||||
</span></code></pre></div>
|
||||
|
||||
<div class="doc doc-contents ">
|
||||
|
||||
<p>A filter for the hybrid ingredients of each resolution. It sets <code>native_hybrid</code> on every track.</p>
|
||||
<p>A DV track that carries HDR10+ is already a hybrid, so its resolution takes that track and no base.</p>
|
||||
<p>A track that already carries DV and an HDR10 or HDR10+ base (DV+HDR10P, HDR10+DV, HDR10P+DV) is a finished
|
||||
hybrid, so its resolution takes that track and no base. One that carries HDR10+ comes first. The other
|
||||
resolutions get a base only when a DV track can give it an RPU, or with <code>generate_dv</code>.</p>
|
||||
|
||||
|
||||
</div>
|
||||
@@ -8208,6 +8322,54 @@ skip some checks or assume a value. Give as much information as possible.</p>
|
||||
|
||||
|
||||
|
||||
<div class="doc doc-object doc-attribute">
|
||||
|
||||
|
||||
|
||||
<h3 id="unshackle.core.tracks.Video.carries_hdr10plus" class="doc doc-heading">
|
||||
<code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">carries_hdr10plus</span>
|
||||
|
||||
|
||||
<span class="doc doc-labels">
|
||||
<small class="doc doc-label doc-label-property"><code>property</code></small>
|
||||
</span>
|
||||
|
||||
<a href="#unshackle.core.tracks.Video.carries_hdr10plus" class="headerlink" title="Permanent link">¶</a></h3>
|
||||
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="n">carries_hdr10plus</span>
|
||||
</span></code></pre></div>
|
||||
|
||||
<div class="doc doc-contents ">
|
||||
|
||||
<p>Whether the track carries HDR10+, as its range or, on a DV track, found by the HDR10+ probe.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="doc doc-object doc-attribute">
|
||||
|
||||
|
||||
|
||||
<h3 id="unshackle.core.tracks.Video.finished_hybrid" class="doc doc-heading">
|
||||
<code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">finished_hybrid</span>
|
||||
|
||||
|
||||
<span class="doc doc-labels">
|
||||
<small class="doc doc-label doc-label-property"><code>property</code></small>
|
||||
</span>
|
||||
|
||||
<a href="#unshackle.core.tracks.Video.finished_hybrid" class="headerlink" title="Permanent link">¶</a></h3>
|
||||
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="n">finished_hybrid</span>
|
||||
</span></code></pre></div>
|
||||
|
||||
<div class="doc doc-contents ">
|
||||
|
||||
<p>Whether the track already carries DV and an HDR10 or HDR10+ base, so <code>-r HYBRID</code> needs no build.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="doc doc-object doc-attribute">
|
||||
|
||||
|
||||
@@ -8226,7 +8388,7 @@ skip some checks or assume a value. Give as much information as possible.</p>
|
||||
|
||||
<div class="doc doc-contents ">
|
||||
|
||||
<p>The range name, with <code>+HDR10P</code> on a DV track that also carries HDR10+.</p>
|
||||
<p>The range that <code>-r</code> selects the track by, then any second format it carries: HDR10+DV, DV+HDR10P.</p>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -8324,6 +8486,78 @@ FFmpeg's AVColorPrimaries/AVColorTransferCharacteristic enums.</p>
|
||||
<div class="doc doc-object doc-function">
|
||||
|
||||
|
||||
<h3 id="unshackle.core.tracks.Video.dv_fourccs" class="doc doc-heading">
|
||||
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">dv_fourccs</span>
|
||||
|
||||
|
||||
<span class="doc doc-labels">
|
||||
<small class="doc doc-label doc-label-staticmethod"><code>staticmethod</code></small>
|
||||
</span>
|
||||
|
||||
<a href="#unshackle.core.tracks.Video.dv_fourccs" class="headerlink" title="Permanent link">¶</a></h3>
|
||||
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">dv_fourccs</span><span class="p">(</span><span class="n">codecs</span><span class="p">)</span>
|
||||
</span></code></pre></div>
|
||||
|
||||
<div class="doc doc-contents ">
|
||||
|
||||
<p>The Dolby Vision fourccs in a codecs list (comma or space separated, <code>/brand</code> suffixes allowed).</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="doc doc-object doc-function">
|
||||
|
||||
|
||||
<h3 id="unshackle.core.tracks.Video.has_dv_codec" class="doc doc-heading">
|
||||
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">has_dv_codec</span>
|
||||
|
||||
|
||||
<span class="doc doc-labels">
|
||||
<small class="doc doc-label doc-label-staticmethod"><code>staticmethod</code></small>
|
||||
</span>
|
||||
|
||||
<a href="#unshackle.core.tracks.Video.has_dv_codec" class="headerlink" title="Permanent link">¶</a></h3>
|
||||
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">has_dv_codec</span><span class="p">(</span><span class="n">codecs</span><span class="p">)</span>
|
||||
</span></code></pre></div>
|
||||
|
||||
<div class="doc doc-contents ">
|
||||
|
||||
<p>Whether a codecs list names a Dolby Vision codec.</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="doc doc-object doc-function">
|
||||
|
||||
|
||||
<h3 id="unshackle.core.tracks.Video.is_dv_composite" class="doc doc-heading">
|
||||
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">is_dv_composite</span>
|
||||
|
||||
|
||||
<span class="doc doc-labels">
|
||||
<small class="doc doc-label doc-label-staticmethod"><code>staticmethod</code></small>
|
||||
</span>
|
||||
|
||||
<a href="#unshackle.core.tracks.Video.is_dv_composite" class="headerlink" title="Permanent link">¶</a></h3>
|
||||
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">is_dv_composite</span><span class="p">(</span><span class="n">codec</span><span class="p">,</span> <span class="n">codecs</span><span class="p">,</span> <span class="n">supplemental_codecs</span><span class="p">)</span>
|
||||
</span></code></pre></div>
|
||||
|
||||
<div class="doc doc-contents ">
|
||||
|
||||
<p>Whether an HEVC track names DV only in its supplemental codecs: DV profile 8 on an HDR10, SDR or HLG base.</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="doc doc-object doc-function">
|
||||
|
||||
|
||||
<h3 id="unshackle.core.tracks.Video.change_color_range" class="doc doc-heading">
|
||||
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">change_color_range</span>
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user