看不到有什麼人推廣,所以決定寫這篇文章。
本文僅介紹如何使用 CLI 軟體
以下以 FFmpeg 為例...
------------------------------------------------
執行 命令提示字元
開始 > 所有程式 > 附屬應用程式 > 命令提示字元
(或) 開始 > 搜尋程式及檔案 > cmd.exe

------------------------------------------------
執行 CLI 軟體
命令: <程式> [參數]
不設定任何參數

按 Enter 執行後,FFmpeg會列印出版本訊息
※ 程式附檔名 (.exe) 可以不用打
------------------------------------------------
路徑
在 CMD 內寫路徑/檔名要是有空格或特殊符號(ex. &)必須在兩側加上引號
例如
"E:\My Videos\The Movie.mkv"
"E:\My Videos\"
"My Videos\The Movie.mkv"
"The Movie.mkv"
用 ffmpeg 讀取 E:\Videos\input.mkv 取得 information
"C:\ffmpeg\ffmpeg.exe" -i "E:\Videos\input.mkv"按 Enter 執行後,ffmpeg 會輸出每個 tracks 的訊息

用 ffmpeg 轉檔
ffmpeg -i <輸入檔> <輸出檔>
轉換 mkv 至 mp4
"C:\ffmpeg\ffmpeg.exe" -i "E:\Videos\input.mkv" "E:\Videos\output.mp4"
------------------------------------------------
設定 工作目錄
命令: cd /d [分割區:][路徑]
如果將 工作目錄 設為 "C:\dir",則 相對路徑為...
program.exe = C:\dir\program.exe
tools = C:\dir\tools
tools\program.exe = C:\dir\tools\program.exe
程式路徑: C:\ffmpeg\ffmpeg.exe
影片路徑: E:\Videos\input.mkv
ex. 1. 設工作目錄為輸入檔所在路徑
cd /d "E:\Videos"
"C:\ffmpeg\ffmpeg.exe" -i "input.mkv"
ex. 2. 設工作目錄為程式所在路徑
cd /d "C:\ffmpeg"
"ffmpeg.exe" -i "E:\Videos\input.mkv"
如果要指定非工作目錄下的路徑\檔案 直接寫絕對路徑(完整路徑)即可
分割區:\路徑\檔名.副檔名
------------------------------------------------
設定系統變數 PATH
使用 echo %path% 可以列印出 系統變數 PATH 的內容

當被呼叫的程式是只有寫檔名時
會從系統變數PATH、工作目錄內搜尋
將路徑加入 系統變數PATH
※ 將路徑加入系統變數PATH 不需要帶引號
path=C:\mediatools\ffmpeg;%path%
將 ffmpeg 所在路徑 加入 系統變數後可以直接 以 "ffmpeg" 或 "ffmpeg.exe" 呼叫它
如果需要加入多個 路徑至 系統變數PATH
path=C:\mediatools\ffmpeg;%path%
path=C:\mediatools\qaac\x86;%path%
------------------------------------------------
快速設定
將以下內容儲存為 *.cmd 檔
執行它可以啟動命令提示字元並設 PATH 變數
無須每次都打一次
@echo off
path=C:\mediatools\ffmpeg;%path%
path=C:\mediatools\qaac\x86;%path%
cmd.exe
------------------------------------------------
bat 自動處理
使用 FFmpeg 將 MKV 內的音訊抽出並解碼為 PCM (WAV)
再給 qaac 編碼輸出 AAC (M4A)
path=C:\mediatools\ffmpeg;%path%
path=C:\mediatools\qaac\x86;%path%
cd/d "E:\Videos"
set PCMAudio=%TEMP%\tempaudio.wav
ffmpeg -i "input.mkv" -vn -async 1 -f wav "%PCMAudio%"
qaac -q 2 --tvbr 100 --ignorelength "%PCMAudio%" -o "output.m4a"
del "%PCMAudio%"
%TEMP% 為系統暫存資料夾路徑
del 為 CMD 刪除檔案命令
上面的命令可以儲存為 *.bat 檔
執行此BAT檔自動處裡
首列加上 @echo off
可以關掉列印命令,排版比較整齊
末列加上 pause 可以防止執行完畢後自動關閉 CMD 視窗,檢查 Log
------------------------------------------------
修飾元
修飾元 描述
%~1 展開 %1 並移除任何包圍的雙引號 ("")。
%~f1 將 %1 擴充為完整的路徑名稱。
%~d1 將 %1 擴充為磁碟機代號。
%~p1 將 %1 擴充為路徑。
%~n1 將 %1 擴充為檔名。
%~x1 將 %1 擴充為副檔名。
%~s1 展開的路徑只包含短檔名。
%~a1 將 %1 擴充為檔案屬性。
%~t1 將 %1 擴充為檔案的日期和時間。
%~z1 將 %1 擴充為檔案大小。
test.bat:
@echo off & cd/d "%~dp0"
echo %%1: %1
echo %%2: %2
echo %%~1: %~1
echo %%~dp1: %~dp1
echo %%~n1: %~n1
echo %%~x1: %~x1
echo %%~nx1: %~nx1
pause
命令
path=[test.bat所在目錄];path或
cd /d ["test.bat所在目錄"]
然後執行 test.bat
call test.bat "E:\video\movie.mkv" "E:\video\anime.mkv"或是拖曳那兩個影片檔 "以 test.bat 開啟"
結果:
%1: "E:\video\movie.mkv"
%2: "E:\video\anime.mkv"
%~1: E:\video\movie.mkv
%~dp1: E:\video\
%~n1: movie
%~x1: .mkv
%~nx1: movie.mkv
請按任意鍵繼續 . . .
※ %~n1%~x1 可以寫成 %~nx1
實例:
AudioToFLAC.bat:
@echo off
path=C:\mediatools\ffmpeg;%path%
ffmpeg -i "%~1" -vn -c:a flac "%~dpn1.flac"
pause
將音訊檔拖曳一給 AudioToFLAC.bat "以 AudioToFLAC.bat 開啟"
即可以重新編碼為 FLAC 格式
改成以下這樣,則可以同時拖曳多個檔案給 AudioToFLAC.bat
@echo off & cd/d "%~dp0"
path=C:\mediatools\ffmpeg;%path%
:Loop
if "%~1"=="" goto :End_
ffmpeg -i "%~1" -vn -c:a flac "%~dpn1.flac"
shift /1 &goto :Loop
:End_
pause
shift /1
會將 %2 轉移到 %1,將 %3 轉移到 %2,以此類推。並且不會影響到 %0 。
shift /2
會將 %3 轉移到 %2,將 %4 轉移到 %3,以此類推。並且不會影響到 %0 及 %1 。
------------------------------------------------
FOR迴圈
如果要處裡多個檔案可以使用FOR迴圈
for /r "輸入目錄" %%i in (*.mkv) do (
ffmpeg -i "%%~i" "輸出目錄\%%~ni.mp4"
)
------------------------------------------------
註解
註解目的是為給人看的,並不影響程式功能
rem [內容]
或
:: [內容]
例如
@echo off
:: 不顯示命令
path=C:\ffmpeg;%path%
:: 將 "C:\ffmpeg" 加入系統變數 PATH
cd/d "D:MyMusic"
:: 將 "D:MyMusic" 設定為工作目錄
ffmpeg -i music01.wav -vn -c:a flac music01.flac
:: 將 music01.wav 轉為 FLAC 格式
pause
:: 暫停,按任一鍵繼續
------------------------------------------------
副程式
我們可以把重複的命令列寫成副程式,以簡化 bat
:<標籤名>
:: ========
:: 命令
:: ========
goto :eof
呼叫方式
call :<標籤名> [參數]
例如:
@echo off
path=C:\ffmpeg;%path%
cd/d "D:MyMusic"
ffmpeg -i music01.wav -vn -c:a flac music01.flac
ffmpeg -i music01.wav -vn -c:a mp3 music01.mp3
ffmpeg -i music02.wav -vn -c:a flac music02.flac
ffmpeg -i music01.wav -vn -c:a mp3 music02.mp3
ffmpeg -i music03.wav -vn -c:a flac music03.flac
ffmpeg -i music01.wav -vn -c:a mp3 music03.mp3
ffmpeg -i music04.wav -vn -c:a flac music04.flac
ffmpeg -i music01.wav -vn -c:a mp3 music04.mp3
ffmpeg -i music05.wav -vn -c:a flac music05.flac
ffmpeg -i music05.wav -vn -c:a mp3 music05.mp3
pause
改寫成這樣
@echo off
path=C:\ffmpeg;%path%
cd/d "D:MyMusic"
call :AudioToFLAC music01.wav music01
call :AudioToFLAC music02.wav music02
call :AudioToFLAC music03.wav music03
call :AudioToFLAC music04.wav music04
call :AudioToFLAC music05.wav music05
pause
exit
:: exit 為離開 bat
:AudioToFLAC
ffmpeg -i "%~1" -vn -c:a flac "%~dp1\%~2.flac"
ffmpeg -i "%~1" -vn -c:a mp3 "%~dp1\%~2.mp3"
goto :eof
:: 回到 call
或是這樣
@echo off
path=C:\ffmpeg;%path%
cd/d "D:MyMusic"
call :AudioToFLAC "music01.wav" "music02.wav" "music03.wav" "music04.wav" "music05.wav"
:End_
pause
exit
:AudioToFLAC
:loop
if "%~1"=="" goto :eof
ffmpeg -i "%~1" -vn -c:a flac "%~dpn1.flac"
ffmpeg -i "%~1" -vn -c:a mp3 "%~dpn1.mp3""
shift /1 &goto :loop
------------------------------------------------
bat 命令分行
如果命命太常不方便閱讀
可以使用 '^' 來分割一行命令為多行
例如:
ffmpeg -i 1.avi -i 2.avi -i 3.avi -i 4.avi -filter_complex "nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=320:y=240" -c:v libx264 output.mkv
以上命令可以寫為以下這樣:
ffmpeg
-i 1.avi -i 2.avi -i 3.avi -i 4.avi ^
-filter_complex ^" ^
nullsrc=size=640x480 [base];
[0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft]; ^
[1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright]; ^
[2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; ^
[3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; ^
[base][upperleft] overlay=shortest=1 [tmp1]; ^
[tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; ^
[tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; ^
[tmp3][lowerright] overlay=shortest=1:x=320:y=240 ^
^" ^
-c:v libx264 output.mkv
※ 為了避免問題,雙引號 ' " ' 必須這樣寫 ' ^" ' 。
------------------------------------------------
(教學&範例)x264入門
(教學&範例)FFmpeg入門
(教學&範例)qaac入門
cmd / bat 入門
http://ckk007.pixnet.net/blog/post/42731004