Видео: 10-bit, DV и профиль DV из заголовка
docker / build (push) Successful in 5m30s

На nnm строка «Видео» не называет битность и HDR — они только в заголовке («[4K, HDR10, DV 8.1, 10-bit]»).
- bit_depth: если в строке «Видео» нет, ищется в заголовке
- «DV» считается Dolby Vision (\b не цепляет DVD/DVDRip)
- профиль из «DV 8.1», «DV P7», «DoVi P5»; только реальные профили, «DV 10-bit» — не профиль
- тесты: раздача nnm «В поисках Дори», DVDRip / DV 10-bit, DV P7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
DenozordecandClaude Opus 5.5 committed 2026-11-06 19:02:37 +07:00
1 parent dc19fe6255
commit 3c42d2d4e2
2 files changed
+14 -3

No files matched your search

+6 -3
View File
@@ -51,8 +51,10 @@ RE_FPS = re.compile(r"(?i)(?<![\d.,])(\d{2,3}(?:[.,]\d{1,6})?)\s*(?:fps|кадр
RE_RATE = re.compile(r"(?i)(?<![\d.,xх×*])(?<![xх×*] )(\d{1,3}(?: \d{3})+|\d+)((?:[.,]\d+)?)\s*([kкmм])\s*(?:bps|bit|бит|b/[sсc])")
RE_DEPTH = re.compile(r"(?i)(?<![\d.,])(8|10|12)\s*-?\s*(?:bits?|бит)(?!\s*/)")
RE_DV_PROFILE = re.compile(r"(?i)dolby\s*vision[^/\n]{0,15}?profile\s*(\d+(?:\.\d+)?)|dvhe\.0?(\d+)")
# сокращение в заголовке: «DV 8.1», «DV P7», «DoVi P5»; только реальные профили, «DV 10-bit» — не профиль
RE_DV_SHORT = re.compile(r"(?i)\b(?:DV|DoVi)\s*(?:P|profile\s*)?([45789](?:\.[1-4])?)\b(?!\s*-?\s*bit)")
HDR_FLAGS = [ # (шаблон, флаг) — что нашли, в этом порядке и отдаём
(r"dolby\s*vision|\bDoVi\b", "Dolby Vision"),
(r"dolby\s*vision|\bDoVi\b|\bDV\b", "Dolby Vision"), # «DV» из заголовка; \b не цепляет DVD/DVDRip
(r"HDR10\+|HDR10\s*plus", "HDR10+"),
(r"HDR10(?!\+|\s*plus)|SMPTE\s*ST\s*2086", "HDR10"),
(r"\bHLG\b", "HLG"),
@@ -107,8 +109,9 @@ def video_info(text: str, title: str = "") -> dict | None:
size = RE_SIZE.search(src) or RE_SIZE.search(extra)
width, height = (int(size.group(1)), int(size.group(2))) if size else (None, None)
fps = RE_FPS.search(src)
depth = RE_DEPTH.search(src)
dv = RE_DV_PROFILE.search(src) or RE_DV_PROFILE.search("\n".join(_field(text, r"HDR\s*format")))
depth = RE_DEPTH.search(src) or RE_DEPTH.search(title or "") # nnm: «10-bit» бывает только в заголовке
dv = (RE_DV_PROFILE.search(src) or RE_DV_PROFILE.search("\n".join(_field(text, r"HDR\s*format")))
or RE_DV_SHORT.search(src) or RE_DV_SHORT.search(title or ""))
hdr = hdr_flags(src, *_field(text, r"HDR\s*format"), release_quality(text), title)
return {
"codec": codec,
+8
View File
@@ -420,6 +420,14 @@ check("видео: «5763 Mбит/с» — на деле килобиты", _rat
check("видео: кадр 1920x800 — всё равно 1080p; fps 23.809523 целиком",
(lambda v: v["resolution"] == "1080p" and v["fps"] == 23.809523)(video_info("Видео: AVC, 1920x800, 23.809523 fps, 1776 Kbps")))
check("видео: строки «Видео» нет -> None", video_info("Аудио: AC3, 2 ch") is None)
_vn = video_info("Видео: HEVC/H.265, 3840x2160, ~21.4 Mbps",
"В поисках Дори / Finding Dory (2016) UHD BDRip [H.265/2160p] [4K, HDR10, DV 8.1, 10-bit]")
check("видео nnm: 10-bit и «DV 8.1» только в заголовке -> bit_depth 10, Dolby Vision, профиль 8.1",
(_vn["bit_depth"], _vn["hdr"], _vn["dv_profile"]) == (10, ["Dolby Vision", "HDR10"], "8.1"), str(_vn))
check("видео: «DVDRip», «DV 10-bit» — не Dolby Vision-профиль",
(lambda a, b: a["hdr"] == [] and a["dv_profile"] is None and b["dv_profile"] is None and b["bit_depth"] == 10)(
video_info("Видео: XviD, 720x400", "Фильм [2001, DVDRip]"), video_info("Видео: HEVC, 3840x2160", "Фильм [DV 10-bit]")))
check("видео: «DV P7» в заголовке -> профиль 7", video_info("Видео: HEVC, 3840x2160", "Film 2160p DV P7 HDR10")["dv_profile"] == "7")
check("релиз: «18 x ~ 00:20:00» и список файлов — без duration_sec",
release_info("Продолжительность: 18 x ~ 00:20:00")["duration_sec"] is None
and release_info("Продолжительность: 01:31:25, 01:25:23")["duration_sec"] is None)