ffmpegでいけた
おぼえがき。
- ffmpegを落としてきてパス通す → https://www.ffmpeg.org/
- ↓のバッチファイルを作成
- 作ったバッチにWebMファイルとWebAファイルをD&D → WebMのファイル名.mp4が生まれる
webm2mp4.bat
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
chcp 65001
cls
SET tmpMovieSrc="%1"
SET tmpAudioSrc="%2"
IF "%tmpMovieSrc%"=="" (
GOTO :missingArgs
)
IF "%tmpAudioSrc%"=="" (
GOTO :missingArgs
)
IF not "%3"=="" (
GOTO :missingKinds
)
IF "%~x1"==".webm" (
SET movieSource="%1"
SET fileName=%~n1
) ELSE IF "%~x1"==".weba" (
SET audioSource="%1"
) ELSE (
GOTO :missingKinds
)
IF "%~x2"==".webm" (
SET movieSource="%2"
SET fileName=%~n1
) ELSE IF "%~x2"==".weba" (
SET audioSource="%2"
) ELSE (
GOTO :missingKinds
)
IF %movieSource%=="" ( GOTO :missingKinds )
IF %audioSource%=="" ( GOTO :missingKinds )
SET outputPath="%~dp0%fileName%.mp4"
SET /P ANSWER="変換を実行します。よろしいですか (Y/N)?"
IF /i {%ANSWER%}=={y} (GOTO :yes)
IF /i {%ANSWER%}=={yes} (GOTO :yes)
EXIT
:yes
SET CONTINUEANSWER=n
IF EXIST %outputPath% (
SET /P CONTINUEANSWER="すでにファイルが存在します。上書きしてよろしいですか (Y/N)?"
IF /i {!CONTINUEANSWER!}=={y} (GOTO :continueYes )
IF /i {!CONTINUEANSWER!}=={yes} (GOTO :continueYes )
EXIT
)
:continueYes
IF EXIST %outputPath% ( del %outputPath% )
ffmpeg -i %movieSource% -i %audioSource% -c:v h264_nvenc -c:a aac -map 0:v -map 1:a %outputPath%
echo 完了しました!
pause>nul
EXIT
:missingArgs
echo 動画ファイルと音声ファイルをまとめてドラッグアンドドロップしてください
pause>nul
EXIT /b 1
:missingKinds
echo .webmと.webaファイルをひとつずつドラッグアンドドロップしてください
pause>nul
EXIT /b 1
ダサいコードは見ないふりで。
キモはこの部分。
ffmpeg -i %movieSource% -i %audioSource% -c:v h264_nvenc -c:a aac -map 0:v -map 1:a %outputPath%
引数 | 意味 |
---|---|
-i %movieSource% | インプットに movieSource(WebM) を指定 |
-i %audioSource% | インプットに audioSource(WebA) を指定 |
-c:v h264_nvenc | 変換後動画フォーマットに h264_nvenc を指定 (グラボ使えないなら h264 にかえる) |
-c:a aac | 変換後音声フォーマットに aac を指定 |
-map 0:v | 0番目のインプット(WebM)の映像ストリーム 全てを変換後の映像ソースに割り当て |
-map 1:a | 1番目のインプット(WebA)の音声ストリーム 全てを変換後の音声ソースに割り当て |
%outputPath% | 出力先を指定 |