HLS .0 캐시 → MP4
Huawei Browser 스니프-다운로드는 각 동영상을 암호화된 HLS의 UUID 폴더로 저장한 다음 모든 파일 이름에 .0을 추가합니다. 휴대폰 플레이어는 자체 DB와 이 이름을 읽습니다. PC 플레이어와 FFmpeg는 읽지 못합니다.
이 스킬은 .ts.0→.ts 및 .key.0→.key를 하드링크하고, 원본 재생 목록을 FFmpeg(-c copy)에 전달한 다음 임시 이름만 삭제하여 해당 캐시를 변환합니다. Huawei Browser 캐시에서 검증되었습니다. 다른 브라우저는 테스트되지 않았습니다.
사용 시기
다음 중 하나라도 해당되면 활성화하세요:
- 폴더 이름이
64f1723d-421b-495c-8a10-85ab7d74ddab와 같습니다. - 파일 이름이
aq.m3u8.0,*.ts.0,*.key.0입니다. - 사용자가 嗅探下载 / 华为浏览器 / VideoData / 手机能播电脑不能 이라고 말합니다.
- 로그에
DLEngine,DLSegMgr,download_content_가 포함되어 있습니다.
m3u8 URL 다운로드(N_m3u8DL-RE / 猫抓), Widevine/PSSH DRM, 또는 이미 일반 .mp4를 리먹스하는 데는 사용하지 마십시오.
레이아웃 (작업 공간 검색 신뢰 금지)
Cursor/ripgrep은 바이너리 *.0 파일을 생략합니다. Glob **/*.ts.0은 73개의 세그먼트가 있어도 0을 반환합니다. 디렉터리 목록(Get-ChildItem / dir / Path.iterdir)을 통해 파일을 증명하거나 재생 목록 이름 경로를 읽어서(바이너리 읽기 오류 = 파일 존재) 증명하세요.
각 동영상 폴더:
<uuid>/
aq.m3u8.0 # 재생 목록; foo.ts와 foo.key 참조 (.0 없음)
<digits>.ts.0 # AES-128 MPEG-TS, 각각 ~10초
<digits>.key.0 # 16바이트 HLS 키
선택적 형제 log/<uuid>.txt는 DLEngine 텍스트이며 미디어가 아닙니다.
트리가 다른 경우(키 누락, 중첩 디렉터리, aq.m3u8.0 없음) references/layout.md를 읽으십시오.
워크플로우
하드 게이트 — 변환 또는 다운로드 전에 이 작업을 수행하십시오.
0. ffmpeg 찾기, 또는 중지 후 요청
제한된 검색만 수행합니다(전체 드라이브를 재귀적으로 탐색하지 마십시오). scripts/convert.py는 동일한 순서를 사용합니다:
--ffmpeg/ 환경 변수HLS_DOT0_FFMPEG<cache-root>/ffmpeg.exe또는<cache-root>/ffmpegPATH(where.exe ffmpeg/command -v ffmpeg)- 여전히 없으면 몇 가지 일반적인 디렉터리:
%LOCALAPPDATA%\Microsoft\WinGet\Links\ffmpeg.exe,%USERPROFILE%\scoop\shims\ffmpeg.exe,C:\ffmpeg\bin\ffmpeg.exe,/opt/homebrew/bin/ffmpeg,/usr/local/bin/ffmpeg
ffmpeg -version(또는 해당 절대 경로)를 실행하십시오. 성공 → 1단계로 이동합니다.
찾을 수 없으면 중지하십시오. 사용자에게 정확히 다음 두 가지 옵션을 요청하십시오. 사용자가 응답할 때까지 설치하거나 변환하지 마십시오:
- A. 사용자가 직접
ffmpeg를 설치하거나 넣은 후 준비가 되면 알려줍니다. — 이 검색 +-version을 다시 실행합니다. - B. 당신이 설치합니다. — 먼저 OS와 아키텍처를 감지합니다(
win32+PROCESSOR_ARCHITECTURE/uname -s+uname -m). 그런 다음 references/ffmpeg-install.md의 일치하는 기본값만 따르십시오.
설치 규칙: 하나의 기본 명령어, 실패 시 하나의 대체 명령어, 그런 다음 다시 요청합니다. 사용자가 동의하지 않으면 ffmpeg를 얻기 위해 Homebrew / Chocolatey / Scoop을 설치하지 마십시오. 다운로드한 바이너리를 이 스킬 저장소에 커밋하지 마십시오. 성공적인 설치 후 새 셸에서 또는 설치 프로그램 경로를 통해 -version을 확인하십시오(Windows PATH는 종료된 후 구식일 수 있음).
1. 계획 (출력 후 변환)
UUID 디렉터리(8-4-4-4-12 16진수)를 나열합니다. 각각에 대해 *.ts.0, *.key.0 개수와 aq.m3u8.0 존재 여부를 확인합니다. 세그먼트가 0개이거나 키가 없는 폴더는 건너뜁니다.
기본 순서: 폴더 이름 A–Z. --start(기본값 1)부터 --out-dir(기본값 <cache-root>/mp4)에 01.mp4, 02.mp4, ...로 출력 번호를 매깁니다. 스크립트는 해당 mp4가 이미 존재하면 이름을 건너뜁니다(JSON skipped: true). 단, --force가 있는 경우는 예외입니다. 부분 배치 후 동일한 명령어를 다시 실행하면 이미 완료된 번호는 유지되고 나머지가 변환됩니다. 두 번째 번호 매기기 체계를 만들지 마십시오.
2. 번들 스크립트 실행 (재발명 금지)
이 스킬 루트에서:
python scripts/convert.py --root <cache-root> --dry-run
python scripts/convert.py --root <cache-root> --out-dir <cache-root>/mp4 --start 1
python scripts/convert.py --root <cache-root> --folder <uuid> --name 01 --force
새 트리에서는 항상 먼저 --dry-run을 전달하십시오. 스크립트 표준 출력은 JSON이고, 진행 상황은 표준 오류로 전달됩니다.
재생 목록을 *.ts.0으로 다시 쓰지 마십시오. FFmpeg는 -allowed_extensions ALL을 사용해도 해당 확장자를 거부합니다(not in allowed_segment_extensions). aq.m3u8.0에 이미 있는 이름으로 하드링크/복사하십시오.
PowerShell $ErrorActionPreference = "Stop"와 ffmpeg -i file -f null -로 출력을 검사하지 마십시오. FFmpeg는 배너를 표준 오류로 출력합니다. PowerShell은 이를 종료 오류로 처리하고 catch가 mp4를 삭제하면 성공적인 변환을 지울 수 있습니다.
정확한 FFmpeg 플래그(취약 — 생략 금지):
ffmpeg -y -hide_banner -loglevel warning -stats -allowed_extensions ALL -protocol_whitelist file,crypto,data -i play.m3u8 -c copy out.mp4
3. 정리 및 보고
스크립트는 이번 실행에서 자신이 만든 임시 이름만 제거하고(이미 .0 파일을 가리키는 남은 하드링크 포함) 항상 play.m3u8을 제거합니다. 원본 *.ts.0 / *.key.0 / aq.m3u8.0은 유지됩니다. .0 파일에 대한 하드링크가 아닌 사전 존재하는 .ts / .key는 삭제하지 않습니다.
표로 보고: 번호, 크기, 알려진 경우 길이, sps_warning. SPS 및 기타 실패는 references/troubleshooting.md를 참조하십시오.
사용자가 SPS 경고 파일을 다시 인코딩하도록 요청하는 경우: ffmpeg -i 04.mp4 -c:v libx264 -crf 18 -c:a copy 04_fixed.mp4 — 전체 배치가 아닌 해당 파일만.
체크리스트
- 디렉터리 목록에
.ts.0및.key.0이 표시됨(검색 도구는 거짓말할 수 있음) - ffmpeg 찾음(제한된 검색) 또는 사용자가 A/B 선택;
-version정상; 전체 디스크 검색 없음 - 설치하는 경우: OS/아키텍처 감지;
references/ffmpeg-install.md의 일치하는 명령어만 -
--dry-run계획이 올바른 것 같음(개수, 출력 이름, 기존 mp4에 대한SKIP) - 하나의 폴더 변환 후 사용자가 재생 가능(전체 변환을 요청하지 않은 경우)
- 배치 JSON
ok/skipped/ 항목별 오류; 임시 링크 사라짐 - 사용자가 스팟 확인할 수 있도록 SPS 경고 번호 언급
출력 형식
Converted N/M videos → <out-dir>
01.mp4 101 MB (~12:10) ok
04.mp4 251 MB (~23:59) SPS warning — check start and ~10s cuts
FAIL <uuid> missing key.0
주의 사항
.0이 실제 미디어입니다. 인덱싱을 건너뛰는 Glob/바이너리는 "파일 누락"이 아닙니다.- 재생 목록
URI="….key"및….ts— 디스크에는….key.0/….ts.0입니다. - 하드링크는 동일한 볼륨에 유지되어야 합니다.
os.link가 실패하면 복사(느림, 추가 디스크). non-existing SPS 0 referenced in buffering period는 일반적으로-c copy에서 외관상 문제입니다. 10초 경계를 확인하고 재생이 깨진 경우에만 다시 인코딩하십시오.- GUI 도구(N_m3u8DL-RE, m3u8-to-mp4)는 표준 확장자를 기대합니다. 이름 바꾸기/하드링크 후에 작동하며 원시 Huawei 이름에서는 작동하지 않습니다.
- 이것은 로컬 키가 있는 표준 HLS AES-128입니다(DLEngine 로그에
no pssh). Widevine 우회가 아닙니다. - ffmpeg가 없으면 → 먼저 A/B를 요청하십시오. 조용히
winget/brew/apt를 실행하거나 exe를 다운로드하지 마십시오. - 기존
01.mp4등은 오류가 아니라 건너뜁니다. 사용자가 해당 파일을 덮어쓰려는 경우에만--force를 사용하십시오.