小編叮嚀: 轉檔工具僅限個人收藏使用,請尊重版權,切勿將轉出檔案進行網路傳播或商業行為,請以系統管理員執行。
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 轉換工具的理念:
- 環境檢查:沒有 FFmpeg / MakeMKV?自動處理
- 智慧路徑偵測:D 槽優先,沒有就退回 C 槽使用者目錄
- DVD 裝置與標籤自動偵測:免手動指定光碟機
- 解密與提取:MakeMKV 負責分析,FFmpeg 負責轉換
- 智慧命名 + 清理:成品整齊、暫存不殘留
二、前置設定: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
檔名邏輯設計
- 有內建 Title → 直接當曲名
- 沒有 → 光碟標籤 + 曲序
參考範例:
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= 讀 metadataformat_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_s16le | CD 等級 |
-ar 44100 | 44.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 效能優化、安全性提升 |
| 軟硬體整合 | 探討數位科技如何結合音樂與創作 | 軟硬體整合操作介面、創新使用體驗 |
| 社群分享 | 以「資訊.音樂人同學會」為核心,鼓勵知識交流 | 教學文章、操作範例、社群互動 |
