新增 video_quality 參數控制檔案大小; 修正 NVENC 位元率
- 原本 NVENC 只給 -cq 沒搭 -rc,位元率爆高(約112Mbps),成品比原檔還大 - 改為 -rc vbr -cq,cq 才真正生效;新增 video_quality 參數(預設 30) - 實測 11 秒 4K 測試片由 161.7MB 降到 74.9MB(-54%) - video_quality 同時套用到 NVENC -cq 與 x264 -crf;數字越大檔案越小 - 同步更新 README 本次調整由 Claude Opus 4.8 (1M context) 協助處理。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -96,6 +96,7 @@ python auto_remove_redlight.py 01.MOV 03.MOV 05.MOV
|
||||
| `transition` | `true` | 剪接點是否加轉場(淡出淡入 + 恆定功率交叉淡化)。**開啟會強制重新編碼**,有 NVIDIA 顯卡時自動用 NVENC 加速 |
|
||||
| `transition_duration` | `0.5` | 轉場長度(秒),畫面與聲音共用以維持同步 |
|
||||
| `video_transition` | `fadeblack` | 畫面轉場類型:`fadeblack`=淡出到黑再淡入;`fade`=交叉溶接;其餘見 FFmpeg `xfade` 文件 |
|
||||
| `video_quality` | `30` | 重新編碼畫質(NVENC `-rc vbr -cq`/x264 `-crf`)。數字越大檔案越小、畫質越低。參考(4K 來源約 54Mbps):`28`≈高畫質(檔大)/`30`≈接近原檔/`33`≈省空間/`36`≈更小 |
|
||||
| `volume_boost` | `true` | **音量增益**(Adobe PR「增益/音量」):是否放大音量 |
|
||||
| `volume_boost_percent` | `30` | 音量增加幅度(%),`30` = 放大成 130%(×1.3 ≈ +2.3dB) |
|
||||
| `hard_limiter` | `true` | **強制壓限**(Adobe PR「強制壓限/Hard Limiter」):拉大音量後把峰值壓在 0dB 以下,避免破音 |
|
||||
|
||||
+11
-4
@@ -117,6 +117,10 @@ USE_GPU = True # EasyOCR 是否用 GPU。需 CUDA + GPU 版
|
||||
# 設 True 時若沒有 CUDA,EasyOCR 會自動退回 CPU(不會壞)
|
||||
REENCODE = False # False = 無損 -c copy(切點對齊關鍵幀,可能 ±1~2 秒)
|
||||
# True = 重新編碼(切點精準到幀,但較慢、非無損)
|
||||
VIDEO_QUALITY = 30 # 重新編碼(轉場/REENCODE)畫質。NVENC 用 -rc vbr -cq,
|
||||
# 數字越大檔案越小、畫質越低。參考(4K 來源約 54Mbps):
|
||||
# 28≈高畫質(~69Mbps,檔大) / 30≈接近原檔 / 33≈省空間(~37Mbps)
|
||||
# / 36≈更小。同一數字也用作 x264 -crf(CPU 退回時)。
|
||||
PROGRESS_EVERY = 60 # 進度回報: 每處理幾秒影片印一行目前時速 (秒)。
|
||||
# 純顯示用,改小只是印多幾行,不影響速度與偵測精度
|
||||
|
||||
@@ -463,7 +467,7 @@ def ffmpeg_cut_concat(input_path: str, keeps: List[Tuple[float, float]],
|
||||
"ffmpeg", "-y",
|
||||
"-ss", f"{start:.3f}", "-i", input_path,
|
||||
"-t", f"{dur:.3f}",
|
||||
"-c:v", "libx264", "-preset", "medium", "-crf", "18",
|
||||
"-c:v", "libx264", "-preset", "medium", "-crf", str(VIDEO_QUALITY),
|
||||
"-c:a", "aac", "-b:a", "192k",
|
||||
"-avoid_negative_ts", "make_zero",
|
||||
seg,
|
||||
@@ -619,11 +623,13 @@ def ffmpeg_cut_concat_xfade(input_path: str, keeps: List[Tuple[float, float]],
|
||||
|
||||
filtergraph = ";".join(parts)
|
||||
|
||||
# --- 編碼器: 有 GPU 用 NVENC,否則 libx264 ---
|
||||
# --- 編碼器: 有 GPU 用 NVENC,否則 libx264;畫質由 VIDEO_QUALITY 控制 ---
|
||||
# NVENC 必須搭配 -rc vbr,-cq 才會真正控制位元率/檔案大小(否則位元率會爆高)
|
||||
if use_gpu:
|
||||
venc = ["-c:v", "h264_nvenc", "-preset", "p5", "-cq", "19"]
|
||||
venc = ["-c:v", "h264_nvenc", "-preset", "p5",
|
||||
"-rc", "vbr", "-cq", str(VIDEO_QUALITY)]
|
||||
else:
|
||||
venc = ["-c:v", "libx264", "-preset", "medium", "-crf", "18"]
|
||||
venc = ["-c:v", "libx264", "-preset", "medium", "-crf", str(VIDEO_QUALITY)]
|
||||
|
||||
cmd += ["-filter_complex", filtergraph, "-map", f"[{vlabel}]"]
|
||||
if audio:
|
||||
@@ -974,6 +980,7 @@ _CONFIG_KEYS = {
|
||||
"transition": "TRANSITION",
|
||||
"transition_duration": "TRANSITION_DURATION",
|
||||
"video_transition": "VIDEO_TRANSITION",
|
||||
"video_quality": "VIDEO_QUALITY",
|
||||
"volume_boost": "VOLUME_BOOST",
|
||||
"volume_boost_percent": "VOLUME_BOOST_PERCENT",
|
||||
"hard_limiter": "HARD_LIMITER",
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
"transition": true,
|
||||
"transition_duration": 0.5,
|
||||
"video_transition": "fadeblack",
|
||||
"video_quality": 30,
|
||||
"volume_boost": true,
|
||||
"volume_boost_percent": 30,
|
||||
"hard_limiter": true,
|
||||
|
||||
Reference in New Issue
Block a user