Files
CookiesChartConverter/pv_decode.py
2025-05-09 19:31:58 +08:00

62 lines
1.9 KiB
Python

import os
import subprocess
from pathlib import Path
from pv_convert import process_video
# === 配置 ===
WANNACRI_PATH = "wannacri" # 需在 PATH 或填写完整路径
FFMPEG_PATH = "ffmpeg" # 需在 PATH 或填写完整路径
def extract_usm(usm_path: Path, output_dir: Path):
""" 提取 usm 文件内容 """
subprocess.run([WANNACRI_PATH, "extractusm", str(usm_path),"--key","0x7F4551499DF55E68"], cwd=output_dir, check=True)
def convert_ivf_to_mp4(ivf_path: Path, output_mp4_path: Path):
""" 将 ivf 文件转换为 mp4 """
subprocess.run([
FFMPEG_PATH,
"-y", "-i", str(ivf_path),
"-c:v", "copy",
str(output_mp4_path)
], check=True)
def dat_to_mp4(dat_file: str):
""" 将 .dat 文件当作 .usm 文件处理,提取并转换为 .mp4 """
dat_path = Path(dat_file).resolve()
base_name = dat_path.stem
work_dir = dat_path.parent / "work"
usm_path = work_dir / f"{base_name}.dat" # 直接将 .dat 文件当作 .usm
ivf_path = work_dir / "output" / f"{base_name}.dat" / "videos" / f"{base_name}.ivf"
mp4_path = work_dir / f"{base_name}.mp4"
# 直接将 .dat 当作 .usm 文件处理
print(f"[1/3] 提取 USM 内容 ...")
extract_usm(usm_path, work_dir)
if not ivf_path.exists():
print(f"❌ 提取失败,未找到 {ivf_path.name}")
return
print(f"[2/3] 转换为 MP4 ...")
convert_ivf_to_mp4(ivf_path, mp4_path)
print(f"[3/3] 成功生成:{mp4_path}")
return mp4_path
# === 示例用法 ===
if __name__ == "__main__":
import sys
if len(sys.argv) != 2:
print("用法: python dat_to_mp4.py <xxx.dat>")
exit(1)
dat_file = sys.argv[1]
mp4_output = dat_to_mp4(dat_file)
if mp4_output:
converted_mp4_path = f"{mp4_output.stem}(converted).mp4"
print(f"[4/4] 开始转换为新的 MP4 文件:{converted_mp4_path}")
process_video(mp4_output, converted_mp4_path)