mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-11-12 12:05:07 +00:00
fix(tracks): keep the Dolby Vision record when remuxing video with ffmpeg
The MP4 muxer drops dvcC/dvvC unless -strict unofficial is set, so a repacked DV track muxed as plain HEVC and lost its DV tag
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
"""Repackaging a video keeps its Dolby Vision configuration record."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
from langcodes import Language
|
||||
|
||||
from unshackle.core import binaries
|
||||
from unshackle.core.tracks import Video
|
||||
|
||||
|
||||
def test_repackage_asks_ffmpeg_to_keep_unofficial_boxes(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
source = tmp_path / "v.mp4"
|
||||
source.write_bytes(b"\0")
|
||||
calls: list[list[str]] = []
|
||||
|
||||
def fake_run(args: list, **kwargs: object) -> subprocess.CompletedProcess:
|
||||
calls.append([str(a) for a in args])
|
||||
Path(args[-1]).write_bytes(b"\0")
|
||||
return subprocess.CompletedProcess(args, 0)
|
||||
|
||||
monkeypatch.setattr(binaries, "FFMPEG", "ffmpeg")
|
||||
monkeypatch.setattr(subprocess, "run", fake_run)
|
||||
video = Video(url="https://cdn.example/v.mp4", language=Language.get("en"))
|
||||
video.path = source
|
||||
video.repackage()
|
||||
|
||||
args = calls[0]
|
||||
assert args[args.index("-strict") + 1] == "unofficial"
|
||||
@@ -1160,6 +1160,8 @@ class Track:
|
||||
"bitexact",
|
||||
"-codec",
|
||||
"copy",
|
||||
"-strict",
|
||||
"unofficial",
|
||||
]
|
||||
)
|
||||
if bsf:
|
||||
|
||||
@@ -392,6 +392,8 @@ class Video(Track):
|
||||
original_path,
|
||||
"-codec",
|
||||
"copy",
|
||||
"-strict",
|
||||
"unofficial",
|
||||
"-bsf:v",
|
||||
f"{filter_key}=video_full_range_flag={range_}",
|
||||
str(output_path),
|
||||
@@ -503,6 +505,8 @@ class Video(Track):
|
||||
str(original_path),
|
||||
"-codec",
|
||||
"copy",
|
||||
"-strict",
|
||||
"unofficial",
|
||||
"-bsf:v",
|
||||
bsf,
|
||||
str(output_path),
|
||||
|
||||
Reference in New Issue
Block a user