享技水工坊 TechX Studio,資訊.音樂人同學會 –我們要如何由 DVD 影音光碟自動偵測光碟直接提取 WAVE 曲目音樂檔呢 ?

小編叮嚀: 轉檔工具僅限個人收藏使用,請尊重版權,切勿將轉出檔案進行網路傳播或商業行為,請以系統管理員執行。

Grok AI 產生的圖片

影音光碟收藏數位化!「DVD To WAVE 轉檔工具」:自動化提取、智慧偵測、CD音質保存參考

在數位音樂全面串流化的年代,仍有不少經典演唱會 DVD、音樂紀錄片或珍藏影音,只存在於光碟之中,那麼這篇教學正是,本篇將以「DVD To WAVE 自動偵測光碟及轉檔」為主軸,逐段拆解 Batch 程式碼。

DVD To WAVE(自動偵測光碟) 轉換系統批次檔,參考代碼

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
title DVD 2 WAVE 旗艦轉檔工具 (支援 C/D 槽自動切換)

echo 小編叮嚀: 轉檔工具僅限個人收藏使用,請尊重版權,切勿將轉出檔案進行網路傳播或商業行為

:: --- 1. 環境檢查 ---
echo [1/5] 檢查 FFmpeg 與 MakeMKV 狀態...
ffmpeg -version >nul 2>&1 || (winget install --id=Gyan.FFmpeg -e --accept-source-agreements)
set "MKVCON=C:\Program Files (x86)\MakeMKV\makemkvcon64.exe"
if not exist "%MKVCON%" (
    echo [提示] 正在開啟 MakeMKV 官網,請安裝後按任意鍵繼續...
    start https://www.makemkv.com/download/
    pause >nul
)

:: --- 2. 智能路徑偵測 (D: 優先,無則 C:) ---
echo [2/5] 正在設定輸出路徑...
if exist D:\ (
    set "TARGET_DRIVE=D:"
    set "OUT_BASE=D:\DVD_Output"
) else (
    set "TARGET_DRIVE=C:"
    set "OUT_BASE=%USERPROFILE%\Music\DVD_Output"
    echo [提醒] 偵測到無 D:\,輸出路徑設為: %OUT_BASE%
)

set "TMP=%OUT_BASE%\Temp_MKV"
set "WAV=%OUT_BASE%\WAVE_Files"

:: 檢查磁碟剩餘空間 (PowerShell 避免 WMIC 錯誤)
for /f %%s in ('powershell -NoProfile -Command "[math]::round(((Get-PSDrive %TARGET_DRIVE:~0,1%).Free / 1GB), 2)"') do set "FREE_GB=%%s"
echo [狀態] 目標磁碟 %TARGET_DRIVE% 剩餘空間: %FREE_GB% GB

:: --- 3. 自動偵測 DVD 裝置與標籤 ---
:Detect
for /f "tokens=*" %%i in ('powershell -NoProfile -Command "Get-Volume | Where-Object {$_.DriveType -eq 'CD-ROM' -and $_.Size -gt 0} | Select-Object -ExpandProperty DriveLetter"') do (set "DVD_L=%%i:")
if "%DVD_L%"=="" (
    echo [警告] 沒偵測到光碟。請確認光碟已放入並在系統顯示後,按任意鍵重試...
    pause >nul
    goto Detect
)

:: 讀取光碟標籤 (Label) 作為檔案命名前綴
for /f "tokens=*" %%a in ('powershell -NoProfile -Command "(Get-Volume -DriveLetter %DVD_L:~0,1%).FileSystemLabel"') do set "DISC_LABEL=%%a"
if "%DISC_LABEL%"=="" set "DISC_LABEL=DVD_Track"
echo [發現] 光碟 [%DISC_LABEL%] 位於 %DVD_L%

:: --- 4. 執行提取 ---
if exist "%OUT_BASE%" rd /s /q "%OUT_BASE%"
mkdir "%TMP%" && mkdir "%WAV%"



echo [3/5] 正在解密並提取音軌 (預計 5-15 分鐘)...
"%MKVCON%" mkv disc:0 all "%TMP%" --minlength=60 --noscan >nul 2>&1

:: --- 5. 智能命名與轉碼 ---
echo [4/5] 正在依曲目順序轉換為 WAVE...
set /a t_count=0
cd /d "%TMP%"
for /f "delims=" %%F in ('dir /b /s "*.mkv"') do (
    set /a t_count+=1
   
    :: 嘗試獲取 MKV 內部是否有 Title 中繼資料
    set "INTERNAL_NAME="
    for /f "tokens=*" %%n in ('ffprobe -v error -show_entries format_tags^=title -of default^=noprint_wrappers^=1:nokey^=1 "%%F"') do set "INTERNAL_NAME=%%n"
   
    :: 組合檔名:優先使用內部標題,否則使用光碟標籤+編號
    if "!INTERNAL_NAME!"=="" (
        set "FINAL_FILE_NAME=%DISC_LABEL%_!t_count!"
    ) else (
        set "FINAL_FILE_NAME=!INTERNAL_NAME!"
    )
   
    echo 正在處理: !FINAL_FILE_NAME!
    ffmpeg -i "%%F" -vn -acodec pcm_s16le -ar 44100 "%WAV%\!FINAL_FILE_NAME!.wav" -loglevel warning -stats
)

:: --- 6. 清理與完工 ---
echo [5/5] 正在清理暫存並開啟資料夾...
rd /s /q "%TMP%"
echo --------------------------------------------------
echo [成功] 全部曲目已轉出為 WAVE。
echo 檔案路徑: %WAV%
echo --------------------------------------------------
start "" "%WAV%"
pause

小記

PCM 全稱是 Pulse Code Modulation,中文叫脈衝編碼調變,是目前最常見的數字音頻格式,也是音樂 CD、WAV 檔、藍光音頻等所使用的核心編碼方式。

一、整體架構總覽:按步驟完成 DVD → WAVE

Batch 轉換工具的理念:

  1. 環境檢查:沒有 FFmpeg / MakeMKV?自動處理
  2. 智慧路徑偵測:D 槽優先,沒有就退回 C 槽使用者目錄
  3. DVD 裝置與標籤自動偵測:免手動指定光碟機
  4. 解密與提取:MakeMKV 負責分析,FFmpeg 負責轉換
  5. 智慧命名 + 清理:成品整齊、暫存不殘留

二、前置設定:UTF-8、延遲展開與視窗標題

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
title DVD 2 WAVE 旗艦轉檔工具 (支援 C/D 槽自動切換)

這幾行目標

  • @echo off:保持畫面乾淨
  • chcp 65001:UTF-8 關鍵設定,否則中文光碟名稱會亂碼
  • enabledelayedexpansion:讓 !變數! 在 for 迴圈中即時更新
  • title:多工具並行時不混亂

實務經驗提醒:只要 Batch 牽涉到中文、for 迴圈,這三行幾乎是標配。


三、環境檢查:FFmpeg 與 MakeMKV 的自動化處理

echo [1/5] 檢查 FFmpeg 與 MakeMKV 狀態...
ffmpeg -version >nul 2>&1 || (
    winget install --id=Gyan.FFmpeg -e --accept-source-agreements
)

分別解析

  • 直接嘗試 ffmpeg -version
  • 失敗才啟動 winget 安裝
  • 無須使用者自己找下載頁

這是「失敗導向安裝」以免錯誤。


MakeMKV 檢查與官網導引

set "MKVCON=C:\Program Files (x86)\MakeMKV\makemkvcon64.exe"
if not exist "%MKVCON%" (
    echo [提示] 正在開啟 MakeMKV 官網,請安裝後按任意鍵繼續...
    start https://www.makemkv.com/download/
    pause >nul
)

  • 明確指定 64 位元 CLI 工具(👉 一個 在命令列介面執行,並且 專為 64 位元系統編譯的程式。)
  • 不存在就開官網,而非直接中斷

四、智慧輸出路徑:D 槽優先的思維

if exist D:\ (
    set "TARGET_DRIVE=D:"
    set "OUT_BASE=D:\DVD_Output"
) else (
    set "TARGET_DRIVE=C:"
    set "OUT_BASE=%USERPROFILE%\Music\DVD_Output"
)

為什麼要這樣設計?

  • D 槽通常是 資料碟 / 大容量碟
  • 若 C 槽滿了 = 有系統風險
  • 自動 fallback 避免卡關

磁碟剩餘空間檢查(避開 WMIC )

for /f %%s in ('powershell -NoProfile -Command "[math]::round(((Get-PSDrive %TARGET_DRIVE:~0,1%).Free / 1GB), 2)"') do set "FREE_GB=%%s"

  • PowerShell 取代 WMIC(新系統相容性更好)
  • 即時顯示剩餘 GB,避免轉一半容量不足

五、DVD 自動偵測:免手動指定光碟機

Get-Volume | Where-Object {
    $_.DriveType -eq 'CD-ROM' -and $_.Size -gt 0
}

這是 PowerShell 的用法

  • 不用固定磁碟代號如 (E:,F:)
  • 若無光碟片會提示放入

六、光碟標籤讀取:自動命名

(Get-Volume -DriveLetter X).FileSystemLabel

  • 直接取光碟 Label
  • 作為輸出檔名前綴

七、MakeMKV 分析與完整提取

"%MKVCON%" mkv disc:0 all "%TMP%" --minlength=60 --noscan

參數說明

參數說明
disc:0第一個光碟裝置
all所有標題
–minlength=60過濾片頭雜訊
–noscan加速執行

用 MakeMKV 將 DVD 所有音軌( 標題) 輸出成 MKV 檔案,過濾短於 60 秒的雜訊(–minlength=60),加速不掃描(–noscan)。

八、FFprobe + FFmpeg:智慧命名

ffprobe -show_entries format_tags=title

  • 嘗試讀取 MKV 內部 Title
  • 有就用,沒有才 fallback

檔名邏輯設計

  1. 有內建 Title → 直接當曲名
  2. 沒有 → 光碟標籤 + 曲序

參考範例:

01 Opening.wav
02 Live Concert.wav

九、DVD To WAVE 轉檔設定解析

ffmpeg -vn -acodec pcm_s16le -ar 44100

  • -vn:不要影像
  • pcm_s16le:CD 等級
  • 44100 Hz:音樂光碟標準

設定相容所有播放器、編輯軟體。

十、清除與完工

rd /s /q "%TMP%"
start "" "%WAV%"

  • 清除多餘
  • 自動開啟成品資料夾

常見問題與排除 (Troubleshooting)

Q:為什麼執行後一直顯示「沒偵測到光碟」?
A:部分 Windows 系統會因為權限問題限制存取,請嘗試對著 .bat 檔案按右鍵,選擇「以系統管理員身分執行」。

Q:D 槽空間不夠會怎樣?
A:腳本雖然有顯示剩餘空間,但沒有強制停止,請確保空間至少有 10GB 以上,否則轉檔過程會報錯中斷。

結語:讓經典轉換,方便我們在不同的設備上播放,這就是 DIY 的樂趣

小編叮嚀: 轉檔工具僅限個人收藏使用,請尊重版權,切勿將轉出檔案進行網路傳播或商業行為,請以系統管理員執行。

參考資料

Windows Package Manager (winget ):Windows 10/11 內建的套件管理工具。

最後完整逐一分析代碼

🧱第一段:批次檔基礎設定(防亂碼+變數控制)

@echo off

🔹 關閉指令回顯
→ 只顯示 echo 出來的文字,畫面乾淨


chcp 65001 >nul

🔹 將 CMD 字碼頁切成 UTF-8

  • 65001 = UTF-8
  • >nul = 不顯示切換成功訊息

✅ 關鍵用途:

  • 中文 DVD 標籤
  • 中文資料夾
  • 中文檔名不亂碼

setlocal enabledelayedexpansion

🔹 啟用 延遲變數展開

用途:

for 迴圈裡能正確更新變數


Title DVD To WAVE 智能曲目識別轉檔系統

🔹 設定 CMD 視窗標題

🧰第二段:工具存在檢查(FFmpeg / MakeMKV)

🔍FFmpeg 檢查

ffmpeg -version >nul 2>&1 || (
    winget install --id Gyan.FFmpeg -e --accept-source-agreements
)

逐一解釋:

  • ffmpeg -version
    👉 試跑指令,看有沒有 FFmpeg
  • >nul 2>&1
    👉 標準輸出 + 錯誤輸出全部丟掉 (只看成功或失敗)
  • ||
    👉 如果前一行失敗才執行
  • winget install ...
    👉 沒 FFmpeg → 自動安裝

🔍MakeMKV 路徑設定

set "MKVCON=C:\Program Files (x86)\MakeMKV\makemkvcon64.exe"

🔹 設定 MakeMKV CLI 工具路徑

  • makemkvcon64.exe = 真正能自動化的核心

if not exist "%MKVCON%" (
    start https://www.makemkv.com/download/
    echo 請先安裝 MakeMKV
    pause
    exit /b
)

用途:

  • 若沒安裝 →
    • 打開下載頁
    • 顯示提示
    • 停住

✅ 避免後面整串錯誤

💿第三段:自動偵測 DVD 光碟機

set "DVD_DRIVE="

🔹 先清空變數,避免殘留


for /f "tokens=*" %%i in ('
  powershell -NoProfile -Command ^
  "Get-Volume | Where-Object {$_.DriveType -eq 'CD-ROM' -and $_.FileSystemLabel} | Select -ExpandProperty DriveLetter"
') do (
    set "DVD_DRIVE=%%i:"
)

PowerShell 做的事:

Get-Volume

→ 取得所有磁碟

Where-Object {$_.DriveType -eq 'CD-ROM'}

→ 只要光碟機

-and $_.FileSystemLabel

→ 必須有光碟插入

Select -ExpandProperty DriveLetter

批次檔會做:

for /f %%i in ('powershell ...') do set DVD_DRIVE=%%i:

➡ 最後結果:

DVD_DRIVE=D:

不寫死 C/D/E 槽

if not defined DVD_DRIVE (
    echo 請插入 DVD 光碟
    pause
    exit /b
)

🔹 防呆檢查
→ 沒光碟就不繼續

📁第四段:資料夾與標籤設定

for %%i in ("%DVD_DRIVE%\") do set "DISC_LABEL=%%~ni"

🔹 取得光碟標籤名稱

DISC_LABEL = MY_CONCERT_DVD

set "BASE_DIR=%~dp0"
set "OUT_WAV=%BASE_DIR%WAV\%DISC_LABEL%"
set "TMP_MKV=%BASE_DIR%TEMP_MKV"
  • %~dp0 = 批次檔所在資料夾
  • 輸出結構:

WAV\
 └─ DVD_LABEL\
TEMP_MKV\

mkdir "%OUT_WAV%" 2>nul
mkdir "%TMP_MKV%" 2>nul

🔹 建立資料夾

  • 2>nul = 已存在就不動作

🎬第五段:MakeMKV 提取 DVD

"%MKVCON%" mkv disc:0 all "%TMP_MKV%" --minlength=60 --noscan

參數逐一解釋

參數意義
mkv輸出為 MKV
disc:0第一台 DVD
all所有 title
%TMP_MKV%輸出資料夾
--minlength=60忽略 60 秒以下(去垃圾)
--noscan不掃描,加快速度

✅ 這一步 只負責「提取 DVD」

🎧第六段:FFmpeg 轉 WAVE(音訊核心)

for %%F in ("%TMP_MKV%\*.mkv") do (

🔹 逐一處理每個 title


ffprobe -v error -show_entries format_tags=title ^
-of default=noprint_wrappers=1:nokey=1 "%%F" > title.txt

🔹 嘗試抓內嵌曲目標題

  • ffprobe = 讀 metadata
  • format_tags=title = 標題
  • nokey=1 = 只要值

set /p TRACK_NAME=<title.txt

🔹 讀出標題到變數


if not defined TRACK_NAME (
    set "TRACK_NAME=Track_%%~nF"
)

🔹 沒標題 → 用檔名


ffmpeg -i "%%F" -vn -acodec pcm_s16le -ar 44100 "%OUT_WAV%\!TRACK_NAME!.wav"

FFmpeg 參數完整說明

參數意義
-i輸入檔
-vn不要影像
pcm_s16leCD 等級
-ar 4410044.1kHz
.wav最終輸出

🧹第七段:清理與結束

del /q "%TMP_MKV%\*.*"
rmdir "%TMP_MKV%"

🔹 清除暫存 MKV
👉 只留下 WAVE


echo 轉檔完成!
pause

附錄:如何使用 FFmpeg 指令由 MP4 檔案提取音樂,並轉成適合燒錄成高音質音樂光碟 (Audio CD) 的 WAV 檔

要用 FFmpeg 從 MP4 檔案提取音樂,並轉成適合燒錄成高音質音樂光碟(Audio CD)的 WAV 檔,必須符合 Red Book 標準 (音樂 CD 的官方規格)

  • 採樣率:44.1 kHz(44100 Hz)
  • 位元深度:16-bit(signed 16-bit PCM)
  • 聲道:立體聲(2 聲道)

這樣生成的 WAV 檔是無損的 CD 品質,可以直接用燒錄軟體 (如 ImgBurn、CDBrunXP Nero、Windows Media Player 或 macOS 的內建工具)燒成標準音樂 CD,在任何 CD 播放器上播放。

推薦指令(最佳品質,符合 CD 規格)

ffmpeg -i CCP.mp4 -vn -acodec pcm_s16le -ar 44100 -ac 2 CCP.wav

  • -i input.mp4:輸入 MP4 檔案 (如CCP.mp4)。
  • -vn:忽略視頻,只處理音頻
  • -acodec pcm_s16le:使用 signed 16-bit little-endian PCM(正是 CD 使用的格式)。
  • -ar 44100:強制採樣率為 44.1 kHz(如果原始音頻已是 44.1 kHz,就不會有品質損失;如果是 48 kHz 等其他,常見於影片,FFmpeg 會用高品質重採樣轉換)。
  • -ac 2:立體聲(2 聲道)。
  • output.wav:輸出檔名 (如CCP.wav)。

注意事項

先檢查原始音頻資訊 (推薦

ffmpeg -i input.mp4

看輸出中的 Audio 部分,例如:

  • 如果已是 44100 Hz, stereo, s16 或類似,就完美無損。
  • 如果是 48000 Hz,轉成 44100 時會有極輕微的重採樣,但 FFmpeg 的預設轉換器品質很高,幾乎聽不出差別。

批量處理同目錄下多個 MP4 檔案轉成 44100 WAV 檔(2025-12-31 實測成功)

Get-ChildItem *.mp4 | ForEach-Object { ffmpeg -i “$_” -vn -acodec pcm_s16le -ar 44100 -ac 2 “$($_.BaseName).wav” }

小結

這條指令的意思就是: 「找出目前資料夾所有 MP4 檔案,然後對每一個 MP4 檔都用 FFmpeg 提取音頻,轉成 CD 規格的高音質 WAV,並用原檔名 (去掉 .mp4 換成 .wav ) 存檔。」

非常實用的一鍵批量轉檔指令!只要先用 cd 切換到放 MP4 的資料夾,再貼上這條指令執行就好。

附錄

TechX.idv 主要內容分類表

分類內容特色範例主題
技術教學提供各種 IT 與程式相關的操作指南Windows Server 設定、PHP/WordPress 升級、Telegram Bot 建立
影音 DIY分享影音設備、音樂檔擷取與轉檔技巧DVD 光碟音軌擷取、WAVE 檔轉換、音響設備測試
音樂人交流聚焦音樂創作與設備心得,打造「同學會」氛圍USHER Dancer Mini-X 喇叭介紹、錄音實測分享
站長備忘錄個人筆記與技術心得,偏向日誌性質名片盒設計、工具使用心得
網站管理提供網站建置與維護的最佳實務WordPress 效能優化、安全性提升
軟硬體整合探討數位科技如何結合音樂與創作軟硬體整合操作介面、創新使用體驗
社群分享以「資訊.音樂人同學會」為核心,鼓勵知識交流教學文章、操作範例、社群互動

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *