iT邦幫忙

0

avi,flv,3gp,m4v,mkv,ts 格式 divx 編碼影片批量轉成 mp4

我有一個目錄底下有幾個子目錄,其中又有 avi,flv,3gp,m4v,mkv,ts 格式 divx 編碼影片
我想要批量轉成 mp4,並且轉完之後自動刪除原影片

請問有推薦的工具嗎,感恩!

看更多先前的討論...收起先前的討論...
PPTaiwan iT邦新手 4 級 ‧ 2021-04-08 12:44:24 檢舉
FormatFactoryPortable 影音格式化工廠
ccutmis iT邦高手 4 級 ‧ 2021-04-08 12:55:53 檢舉
python+ffmpeg 自己寫
要做影音轉換要先有一個觀念就是絕大部分的影片及音訊的編碼轉換都會有失真(loss),所以你的那麼多各式各樣格式的影片檔案要一口氣全轉成mp4就表示你的那麼多檔案極可能都蒙受失真損失,畢竟你還要求將原檔刪除,那就是永遠損失。

另外,你想要轉成mp4的理由是什麼?是因為不想要是DivX編碼的影片還是只是一時興起覺得mp4比較酷?

還有,影音轉換通常是高運算高耗時的過程,當然果你的電腦等級夠厲害的話應該還能接受。

你要求要批量處理我想到的是前面ccutmis提到的ffmpeg工具。最簡便的方式就是使用Windows內建的批次檔搭配ffmpeg命令列(command line)工具。很明顯我是假設你是用Windows。這樣你就只要安裝ffmpeg就夠了 https://www.ffmpeg.org/
格式工廠

用 ffmpeg 來轉,但建議寫個批次檔或python來跑

1 個回答

1
過時軟碟片
iT邦新手 5 級 ‧ 2021-04-09 21:19:34

這樣吧,假設你只是覺得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

祝好運!

我要發表回答

立即登入回答