我有一個目錄底下有幾個子目錄,其中又有 avi,flv,3gp,m4v,mkv,ts 格式 divx 編碼影片
我想要批量轉成 mp4,並且轉完之後自動刪除原影片
請問有推薦的工具嗎,感恩!
這樣吧,假設你只是覺得mp4比較酷,那麼這邊提出一個安全的做法,就是將原來的檔案的所有streams直接複製到mp4檔,這樣轉換很快因為只是複製沒有轉碼。
你可以先到 https://www.ffmpeg.org/download.html#build-windows 下載 ffmpeg。假設你把下載的壓縮檔解壓到 D:\bin。
又假設你的「我有一個目錄」是 D:\ALotOfVideos
那麼底下這個批次檔會達到你要的效果,但沒有刪掉原檔。如果你真的要刪掉原檔,那麼請在執行前先把批次檔內的變數 CM4_DELETE_SRC 設成大寫 YES。
@ECHO OFF
SET CM4_ENTRY_DIR=D:\ALotOfVideos
SET CM4_FFMPEG=D:\bin\ffmpeg-N-101898-gd393c45051-win64-gpl-shared\bin\ffmpeg.exe
SET CM4_DELETE_SRC=NO
SET CM4_CURRENT_SRC=...
FOR /R "%CM4_ENTRY_DIR%" %%s IN (*.avi *.flv *.3gp *.m4v *.mkv *.ts) DO (
SET CM4_CURRENT_SRC=%%s
ECHO + "%%s" --^> "%%~ds%%~ps%%~ns.mp4"
IF EXIST "%%s" (
IF NOT EXIST "%%~ds%%~ps%%~ns.mp4" (
"%CM4_FFMPEG%" -hide_banner -i "%%s" -codec copy "%%~ds%%~ps%%~ns.mp4"
IF ERRORLEVEL 1 (
GOTO Error
) ELSE (
ECHO + Done "%%s"
IF "%CM4_DELETE_SRC%"=="YES" (
ECHO + Deleting "%%s"
DEL "%%s"
IF ERRORLEVEL 1 (
ECHO + Failed to delete "%%s"
)
)
)
) ELSE (
ECHO + Target "%%~ds%%~ps%%~ns.mp4" already exist
)
) ELSE (
ECHO + Source "%%s" doesn't exist
)
)
GOTO End
:Error
ECHO + Failed "%CM4_CURRENT_SRC%"
GOTO End
:End
ECHO This batch file was done. You can scroll back to review the messages or hit any key to continue.
pause
如果你是真的不喜歡 DivX 編碼的影片的話那麼你可能是期望轉成 H.264 或 H.265,這個批次檔大致上沒有改變,你要改的是 "%CM4_FFMPEG%" 那一行,至少要拿掉 -codec copy 參數,但請一定要設定調整 codec 的參數,不然如果用預設的參數去轉碼可能結果會讓你很驚訝。你可以參考https://www.ffmpeg.org/faq.html#Which-are-good-parameters-for-encoding-high-quality-MPEG_002d4_003f 。
祝好運!