Deployed 0c45195 with MkDocs version: 1.6.1

This commit is contained in:
2026-10-31 05:23:11 +00:00
parent 802ce0d6a1
commit dad55e4568
8 changed files with 277 additions and 51 deletions
+1 -1
View File
@@ -3928,7 +3928,7 @@ the <code>m3u8</code> library.</p>
<code>session</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="requests.Session">Session</span>]</code>
<code><span title="typing.Optional">Optional</span>[<span title="unshackle.core.session.AnySession">AnySession</span>]</code>
</td>
<td>
<div class="doc-md-description">
+7 -7
View File
@@ -3077,7 +3077,7 @@ still, during track download.</p>
<span class="normal"><a href="#unshackle.core.service.Service--source--__codelineno-0-297">297</a></span>
<span class="normal"><a href="#unshackle.core.service.Service--source--__codelineno-0-298">298</a></span>
<span class="normal"><a href="#unshackle.core.service.Service--source--__codelineno-0-299">299</a></span>
<span class="normal"><a href="#unshackle.core.service.Service--source--__codelineno-0-300">300</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="unshackle.core.service.Service--source--__span-0-177"><a id="unshackle.core.service.Service--source--__codelineno-0-177" name="unshackle.core.service.Service--source--__codelineno-0-177"></a><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">:</span> <span class="n">click</span><span class="o">.</span><span class="n">Context</span><span class="p">):</span>
<span class="normal"><a href="#unshackle.core.service.Service--source--__codelineno-0-300">300</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="unshackle.core.service.Service--source--__span-0-177"><a id="unshackle.core.service.Service--source--__codelineno-0-177" name="unshackle.core.service.Service--source--__codelineno-0-177"></a><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">:</span> <span class="n">click</span><span class="o">.</span><span class="n">Context</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="unshackle.core.service.Service--source--__span-0-178"><a id="unshackle.core.service.Service--source--__codelineno-0-178" name="unshackle.core.service.Service--source--__codelineno-0-178"></a> <span class="n">console</span><span class="o">.</span><span class="n">print</span><span class="p">(</span><span class="n">Padding</span><span class="p">(</span><span class="n">Rule</span><span class="p">(</span><span class="sa">f</span><span class="s2">"[rule.text]Service: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">"</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)))</span>
</span><span id="unshackle.core.service.Service--source--__span-0-179"><a id="unshackle.core.service.Service--source--__codelineno-0-179" name="unshackle.core.service.Service--source--__codelineno-0-179"></a>
</span><span id="unshackle.core.service.Service--source--__span-0-180"><a id="unshackle.core.service.Service--source--__codelineno-0-180" name="unshackle.core.service.Service--source--__codelineno-0-180"></a> <span class="bp">self</span><span class="o">.</span><span class="n">config</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">config</span>
@@ -3090,7 +3090,7 @@ still, during track download.</p>
</span><span id="unshackle.core.service.Service--source--__span-0-187"><a id="unshackle.core.service.Service--source--__codelineno-0-187" name="unshackle.core.service.Service--source--__codelineno-0-187"></a> <span class="bp">self</span><span class="o">.</span><span class="n">cache_dir</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">directories</span><span class="o">.</span><span class="n">cache</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span>
</span><span id="unshackle.core.service.Service--source--__span-0-188"><a id="unshackle.core.service.Service--source--__codelineno-0-188" name="unshackle.core.service.Service--source--__codelineno-0-188"></a>
</span><span id="unshackle.core.service.Service--source--__span-0-189"><a id="unshackle.core.service.Service--source--__codelineno-0-189" name="unshackle.core.service.Service--source--__codelineno-0-189"></a> <span class="bp">self</span><span class="o">.</span><span class="n">ctx</span> <span class="o">=</span> <span class="n">ctx</span>
</span><span id="unshackle.core.service.Service--source--__span-0-190"><a id="unshackle.core.service.Service--source--__codelineno-0-190" name="unshackle.core.service.Service--source--__codelineno-0-190"></a> <span class="bp">self</span><span class="o">.</span><span class="n">credential</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># Will be set in authenticate()</span>
</span><span id="unshackle.core.service.Service--source--__span-0-190"><a id="unshackle.core.service.Service--source--__codelineno-0-190" name="unshackle.core.service.Service--source--__codelineno-0-190"></a> <span class="bp">self</span><span class="o">.</span><span class="n">credential</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Credential</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># Will be set in authenticate()</span>
</span><span id="unshackle.core.service.Service--source--__span-0-191"><a id="unshackle.core.service.Service--source--__codelineno-0-191" name="unshackle.core.service.Service--source--__codelineno-0-191"></a> <span class="bp">self</span><span class="o">.</span><span class="n">current_region</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># Will be set based on proxy/geolocation</span>
</span><span id="unshackle.core.service.Service--source--__span-0-192"><a id="unshackle.core.service.Service--source--__codelineno-0-192" name="unshackle.core.service.Service--source--__codelineno-0-192"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_input_bridge</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">InputBridge</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="unshackle.core.service.Service--source--__span-0-193"><a id="unshackle.core.service.Service--source--__codelineno-0-193" name="unshackle.core.service.Service--source--__codelineno-0-193"></a>
@@ -3461,7 +3461,7 @@ then merges the DV tracks into the HDR10 result. With no DV video and
</span><span id="unshackle.core.service.Service.get_tracks_for_variants--source--__span-0-349"><a id="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-349" name="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-349"></a> <span class="n">held</span> <span class="o">=</span> <span class="p">{</span><span class="n">Tracks</span><span class="o">.</span><span class="n">signature</span><span class="p">(</span><span class="n">track</span><span class="p">)</span> <span class="k">for</span> <span class="n">track</span> <span class="ow">in</span> <span class="n">all_tracks</span><span class="p">}</span>
</span><span id="unshackle.core.service.Service.get_tracks_for_variants--source--__span-0-350"><a id="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-350" name="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-350"></a> <span class="n">all_tracks</span><span class="o">.</span><span class="n">add</span><span class="p">([</span><span class="n">track</span> <span class="k">for</span> <span class="n">track</span> <span class="ow">in</span> <span class="n">tracks</span> <span class="k">if</span> <span class="n">Tracks</span><span class="o">.</span><span class="n">signature</span><span class="p">(</span><span class="n">track</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">held</span><span class="p">],</span> <span class="n">warn_only</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="unshackle.core.service.Service.get_tracks_for_variants--source--__span-0-351"><a id="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-351" name="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-351"></a>
</span><span id="unshackle.core.service.Service.get_tracks_for_variants--source--__span-0-352"><a id="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-352" name="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-352"></a> <span class="n">codecs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">track_request</span><span class="o">.</span><span class="n">codecs</span> <span class="ow">or</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span>
</span><span id="unshackle.core.service.Service.get_tracks_for_variants--source--__span-0-352"><a id="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-352" name="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-352"></a> <span class="n">codecs</span><span class="p">:</span> <span class="n">Sequence</span><span class="p">[</span><span class="n">Optional</span><span class="p">[</span><span class="n">Video</span><span class="o">.</span><span class="n">Codec</span><span class="p">]]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">track_request</span><span class="o">.</span><span class="n">codecs</span> <span class="ow">or</span> <span class="p">[</span><span class="kc">None</span><span class="p">]</span>
</span><span id="unshackle.core.service.Service.get_tracks_for_variants--source--__span-0-353"><a id="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-353" name="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-353"></a> <span class="n">ranges</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">track_request</span><span class="o">.</span><span class="n">ranges</span> <span class="ow">or</span> <span class="p">[</span><span class="n">Video</span><span class="o">.</span><span class="n">Range</span><span class="o">.</span><span class="n">SDR</span><span class="p">]</span>
</span><span id="unshackle.core.service.Service.get_tracks_for_variants--source--__span-0-354"><a id="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-354" name="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-354"></a>
</span><span id="unshackle.core.service.Service.get_tracks_for_variants--source--__span-0-355"><a id="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-355" name="unshackle.core.service.Service.get_tracks_for_variants--source--__codelineno-0-355"></a> <span class="k">for</span> <span class="n">range_val</span> <span class="ow">in</span> <span class="n">ranges</span><span class="p">:</span>
@@ -3593,7 +3593,7 @@ from config, cookies, retry handler, and a proxy if available.
</span><span id="unshackle.core.service.Service.get_session--source--__span-0-419"><a id="unshackle.core.service.Service.get_session--source--__codelineno-0-419" name="unshackle.core.service.Service.get_session--source--__codelineno-0-419"></a> <span class="n">status_forcelist</span><span class="o">=</span><span class="n">STATUS_FORCELIST</span><span class="p">,</span>
</span><span id="unshackle.core.service.Service.get_session--source--__span-0-420"><a id="unshackle.core.service.Service.get_session--source--__codelineno-0-420" name="unshackle.core.service.Service.get_session--source--__codelineno-0-420"></a> <span class="n">allowed_methods</span><span class="o">=</span><span class="n">RETRY_METHODS</span><span class="p">,</span>
</span><span id="unshackle.core.service.Service.get_session--source--__span-0-421"><a id="unshackle.core.service.Service.get_session--source--__codelineno-0-421" name="unshackle.core.service.Service.get_session--source--__codelineno-0-421"></a> <span class="n">respect_retry_after_header</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="unshackle.core.service.Service.get_session--source--__span-0-422"><a id="unshackle.core.service.Service.get_session--source--__codelineno-0-422" name="unshackle.core.service.Service.get_session--source--__codelineno-0-422"></a> <span class="n">retry_after_max</span><span class="o">=</span><span class="n">MAX_BACKOFF</span><span class="p">,</span>
</span><span id="unshackle.core.service.Service.get_session--source--__span-0-422"><a id="unshackle.core.service.Service.get_session--source--__codelineno-0-422" name="unshackle.core.service.Service.get_session--source--__codelineno-0-422"></a> <span class="n">retry_after_max</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">MAX_BACKOFF</span><span class="p">),</span>
</span><span id="unshackle.core.service.Service.get_session--source--__span-0-423"><a id="unshackle.core.service.Service.get_session--source--__codelineno-0-423" name="unshackle.core.service.Service.get_session--source--__codelineno-0-423"></a> <span class="p">),</span>
</span><span id="unshackle.core.service.Service.get_session--source--__span-0-424"><a id="unshackle.core.service.Service.get_session--source--__codelineno-0-424" name="unshackle.core.service.Service.get_session--source--__codelineno-0-424"></a> <span class="n">pool_connections</span><span class="o">=</span><span class="n">POOL_MAX_SIZE</span><span class="p">,</span>
</span><span id="unshackle.core.service.Service.get_session--source--__span-0-425"><a id="unshackle.core.service.Service.get_session--source--__codelineno-0-425" name="unshackle.core.service.Service.get_session--source--__codelineno-0-425"></a> <span class="n">pool_maxsize</span><span class="o">=</span><span class="n">POOL_MAX_SIZE</span><span class="p">,</span>
@@ -3936,7 +3936,7 @@ Ideally re-use the title ID argument (that is, self.title).</p>
<span class="normal"><a href="#unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-523">523</a></span>
<span class="normal"><a href="#unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-524">524</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="unshackle.core.service.Service.get_widevine_service_certificate--source--__span-0-511"><a id="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-511" name="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-511"></a><span class="k">def</span><span class="w"> </span><span class="nf">get_widevine_service_certificate</span><span class="p">(</span>
</span><span id="unshackle.core.service.Service.get_widevine_service_certificate--source--__span-0-512"><a id="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-512" name="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-512"></a> <span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">challenge</span><span class="p">:</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">title</span><span class="p">:</span> <span class="n">Title_T</span><span class="p">,</span> <span class="n">track</span><span class="p">:</span> <span class="n">AnyTrack</span>
</span><span id="unshackle.core.service.Service.get_widevine_service_certificate--source--__span-0-513"><a id="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-513" name="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-513"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Union</span><span class="p">[</span><span class="nb">bytes</span><span class="p">,</span> <span class="nb">str</span><span class="p">]:</span>
</span><span id="unshackle.core.service.Service.get_widevine_service_certificate--source--__span-0-513"><a id="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-513" name="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-513"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">bytes</span><span class="p">,</span> <span class="nb">str</span><span class="p">]]:</span>
</span><span id="unshackle.core.service.Service.get_widevine_service_certificate--source--__span-0-514"><a id="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-514" name="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-514"></a><span class="w"> </span><span class="sd">"""</span>
</span><span id="unshackle.core.service.Service.get_widevine_service_certificate--source--__span-0-515"><a id="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-515" name="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-515"></a><span class="sd"> Get the Widevine Service Certificate used for Privacy Mode.</span>
</span><span id="unshackle.core.service.Service.get_widevine_service_certificate--source--__span-0-516"><a id="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-516" name="unshackle.core.service.Service.get_widevine_service_certificate--source--__codelineno-0-516"></a>
@@ -4277,7 +4277,7 @@ fallback to cached data when API calls fail.</p>
<code>title_id</code>
</td>
<td>
<code><span title="str">str</span></code>
<code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
</td>
<td>
<div class="doc-md-description">
@@ -4360,7 +4360,7 @@ fallback to cached data when API calls fail.</p>
<span class="normal"><a href="#unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-646">646</a></span>
<span class="normal"><a href="#unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-647">647</a></span>
<span class="normal"><a href="#unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-648">648</a></span>
<span class="normal"><a href="#unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-649">649</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="unshackle.core.service.Service.get_titles_cached--source--__span-0-607"><a id="unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-607" name="unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-607"></a><span class="k">def</span><span class="w"> </span><span class="nf">get_titles_cached</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">title_id</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Titles_T</span><span class="p">:</span>
<span class="normal"><a href="#unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-649">649</a></span></pre></div></td><td class="code"><div><pre><span></span><code><span id="unshackle.core.service.Service.get_titles_cached--source--__span-0-607"><a id="unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-607" name="unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-607"></a><span class="k">def</span><span class="w"> </span><span class="nf">get_titles_cached</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">title_id</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Titles_T</span><span class="p">:</span>
</span><span id="unshackle.core.service.Service.get_titles_cached--source--__span-0-608"><a id="unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-608" name="unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-608"></a><span class="w"> </span><span class="sd">"""</span>
</span><span id="unshackle.core.service.Service.get_titles_cached--source--__span-0-609"><a id="unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-609" name="unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-609"></a><span class="sd"> Cached wrapper around get_titles() to reduce redundant API calls.</span>
</span><span id="unshackle.core.service.Service.get_titles_cached--source--__span-0-610"><a id="unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-610" name="unshackle.core.service.Service.get_titles_cached--source--__codelineno-0-610"></a>
+227 -3
View File
@@ -1981,6 +1981,28 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.tracks.Audio.dolby_channel_layout" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;dolby_channel_layout
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.tracks.Audio.channels_from_count" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;channels_from_count
</span>
</a>
</li>
<li class="md-nav__item">
@@ -2269,6 +2291,28 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.tracks.Subtitle.dash_offset_ms" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;dash_offset_ms
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.tracks.Subtitle.rebase_ttml" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;rebase_ttml
</span>
</a>
</li>
<li class="md-nav__item">
@@ -3113,6 +3157,17 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.tracks.Video.vp9_colour_args" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;vp9_colour_args
</span>
</a>
</li>
<li class="md-nav__item">
@@ -3366,6 +3421,28 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.tracks.Audio.dolby_channel_layout" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;dolby_channel_layout
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.tracks.Audio.channels_from_count" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;channels_from_count
</span>
</a>
</li>
<li class="md-nav__item">
@@ -3654,6 +3731,28 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.tracks.Subtitle.dash_offset_ms" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;dash_offset_ms
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.tracks.Subtitle.rebase_ttml" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;rebase_ttml
</span>
</a>
</li>
<li class="md-nav__item">
@@ -4498,6 +4597,17 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.tracks.Video.vp9_colour_args" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;vp9_colour_args
</span>
</a>
</li>
<li class="md-nav__item">
@@ -4717,7 +4827,7 @@ If mime_type is not provided, it will try to guess it.</p>
<code>session</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="unshackle.core.tracks.attachment.AnySession">AnySession</span>]</code>
<code><span title="typing.Optional">Optional</span>[<span title="unshackle.core.session.AnySession">AnySession</span>]</code>
</td>
<td>
<div class="doc-md-description">
@@ -4947,7 +5057,7 @@ If mime_type is not provided, it will try to guess it.</p>
<code>session</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="unshackle.core.tracks.attachment.AnySession">AnySession</span>]</code>
<code><span title="typing.Optional">Optional</span>[<span title="unshackle.core.session.AnySession">AnySession</span>]</code>
</td>
<td>
<div class="doc-md-description">
@@ -5206,6 +5316,56 @@ It does not convert the value to assume a sub speaker channel layout, e.g. 5.1-&
<div class="doc doc-object doc-function">
<h3 id="unshackle.core.tracks.Audio.dolby_channel_layout" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">dolby_channel_layout</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-staticmethod"><code>staticmethod</code></small>
</span>
<a href="#unshackle.core.tracks.Audio.dolby_channel_layout" class="headerlink" title="Permanent link">&para;</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">dolby_channel_layout</span><span class="p">(</span><span class="n">mask</span><span class="p">)</span>
</span></code></pre></div>
<div class="doc doc-contents ">
<p>Channel layout of a Dolby DASH channel configuration mask, e.g. 0xF801 -&gt; 5.1.</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="unshackle.core.tracks.Audio.channels_from_count" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">channels_from_count</span>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-staticmethod"><code>staticmethod</code></small>
</span>
<a href="#unshackle.core.tracks.Audio.channels_from_count" class="headerlink" title="Permanent link">&para;</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">channels_from_count</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</span></code></pre></div>
<div class="doc doc-contents ">
<p>Channel layout for a bare number of channels, as HLS CHANNELS, Smooth Streaming and most DASH schemes give it.</p>
<p>A count does not say which channel is the LFE, so 6, 7 and 8 take the 5.1, 6.1 and 7.1 layouts those streams
carry in practice. Any other value goes back as-is, for parse_channels to read.</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="unshackle.core.tracks.Audio.channel_total" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">channel_total</span>
@@ -6072,6 +6232,48 @@ explanation list above.</p>
<div class="doc doc-object doc-function">
<h3 id="unshackle.core.tracks.Subtitle.dash_offset_ms" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">dash_offset_ms</span>
<a href="#unshackle.core.tracks.Subtitle.dash_offset_ms" class="headerlink" title="Permanent link">&para;</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">dash_offset_ms</span><span class="p">()</span>
</span></code></pre></div>
<div class="doc doc-contents ">
<p>The DASH presentationTimeOffset and one segment's length, in ms, from the merged SegmentTemplate.
Returns (0, 0) for a track that is not DASH or has no SegmentTemplate.</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="unshackle.core.tracks.Subtitle.rebase_ttml" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">rebase_ttml</span>
<a href="#unshackle.core.tracks.Subtitle.rebase_ttml" class="headerlink" title="Permanent link">&para;</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">rebase_ttml</span><span class="p">(</span><span class="n">offset_ms</span><span class="p">,</span> <span class="n">segment_ms</span><span class="p">)</span>
</span></code></pre></div>
<div class="doc doc-contents ">
<p>Move the TTML cues back by offset_ms, under the same first-cue guard as rebase_webvtt.
A cue carried in from before the offset starts at 0; this method drops a cue that ends by then.</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="unshackle.core.tracks.Subtitle.strip_webvtt_cue_classes" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">strip_webvtt_cue_classes</span>
@@ -7826,7 +8028,7 @@ is larger than it. Use a value of 20000 (20KB) or higher.</p>
<code>session</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="requests.Session">Session</span>]</code>
<code><span title="typing.Optional">Optional</span>[<span title="unshackle.core.session.AnySession">AnySession</span>]</code>
</td>
<td>
<div class="doc-md-description">
@@ -8955,6 +9157,28 @@ the bitstream.</p>
<div class="doc doc-object doc-function">
<h3 id="unshackle.core.tracks.Video.vp9_colour_args" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">vp9_colour_args</span>
<a href="#unshackle.core.tracks.Video.vp9_colour_args" class="headerlink" title="Permanent link">&para;</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">vp9_colour_args</span><span class="p">(</span><span class="n">track_id</span><span class="p">)</span>
</span></code></pre></div>
<div class="doc doc-contents ">
<p>Return mkvmerge colour args for an HDR VP9 track.</p>
<p>mkvmerge drops the MP4 vpcC/SmDm/CoLL colour boxes of VP9, which leaves an HDR10 file tagged as SDR.
The transfer the file states wins; <code>self.range</code> applies only when the file states none.</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="unshackle.core.tracks.Video.ccextractor" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">ccextractor</span>