SQDT 2019/11/28 20:43

FFmpegで動画をWebMに一括変換

(制作者向けの記事です 👾)

ツクールMVで背景透過動画を使うため、Live2Dから書き出していただいた大量のQuicktime(.mov)動画をWebMに一括変換しました。
その方法が案外複雑だったので、メモも兼ねて解説してみます。

使用ソフトはFFmpeg、作業環境はWindows10 Home 64bitです。

FFmpegとは

FFmpegとは動画・音声を扱うフリーソフトです。幅広いフォーマットに対応しており、再生からエンコードまでほぼ何でもできます。
CLIといって、いわゆる黒い画面で操作するソフトです。
黒い画面が苦手な方もいると思いますが、この記事ではバッチファイル(黒い画面のコマンドを自動で実行してくれるファイル)も紹介しますのでご安心ください。

ダウンロード

FFmpeg BuildsからWindows用のFFmpegをダウンロードします。
Download Buildというボタンからダウンロードできます。
ダウンロードして展開したら、binというフォルダの中のffmpeg.exeを適当なフォルダ(C:\ffmpeg とか)に移動させます。
残りのファイルは不要です。

基本的な使い方

(バッチを使えばいいという方は飛ばしてください)

まずコマンドプロンプトを起動します。スタートボタンを押してcmdと入力すれば出てくると思います。
起動したら cd (ffmpeg.exeを置いたフォルダ名) と入力して、ffmpeg.exeを置いたフォルダに移動します。 C:\ffmpegに置いたなら cd C:\ffmpeg です。

ここで ffmpeg と入力して ffmpeg version... で始まる英語がずらずらと出てくれば設置に成功してます。

では、早速動画を変換してみましょう。
ffmpeg.exeと同じ場所に動画(仮にAyumu.movとします)を置いて次のように入力すると変換できます。

ffmpeg -i "Ayumu.mov" -c:v libvpx-vp9 -lossless 1 "Ayumu.webm"

  • "Ayumu.mov" は変換元のファイル名です
  • "Ayumu.webm" は変換後のファイル名です。 自由に変更できます
  • -lossless 1 はロスレス(品質を低下させない)指定です

成功すればエンコードが始まり、同じフォルダに Ayumu.webm が作られます。

ロスレスでなくちゃんと圧縮したい場合、2パスという2回エンコードする方法が推奨されています。2パスは次のようなコマンドで行います。

ffmpeg -i "Ayumu.mov" -c:v libvpx-vp9 -b:v 2M -pass 1 -an -f webm NUL && ^
ffmpeg -i "Ayumu.mov" -c:v libvpx-vp9 -b:v 2M -pass 2 -c:a libopus "Ayumu.webm"

今回使った45MBのQuicktime動画の場合、ロスレスで約1/4、上の設定の2パスで約1/40(!)に圧縮されました。

一括変換

(バッチを使えばいいという方は飛ばしてください)

いよいよ目的の一括変換です。
FORというループ機能を使って、同じフォルダの拡張子が.movの動画全てをWebMに変換します。
コマンドプロンプトで次のコマンドを実行してください。

FOR /F "delims=" %i IN ('dir /B /S *.mov') DO ( ffmpeg -y -hide_banner -i "%i" -c:v libvpx-vp9 -lossless 1 "%~dpni.webm" )

  • .mov以外のファイルを変換するには、.mov の部分を .mp4 など他の拡張子に変更してください
  • -lossless 1 の部分を -b:v 2M などに変更すればロスレス以外で圧縮できます

※ 2パスで一括変換するにはバッチを使う必要がありそうです

バッチ

バッチファイルを作れば、バッチをダブルクリックするだけで一括変換できちゃいます。便利。

以下はffmpeg.exeと同じフォルダにある全ての拡張子が.movの動画をWebMに2パスで変換するバッチです。
メモ帳にコピペして、拡張子を.batにしてffmpeg.exeと同じフォルダに保存してください。ファイル名は何でも大丈夫です。

@echo off

set current_dir=%~dp0

FOR /F "delims=" %%i IN ('dir /B /S *.mov') DO (
    "%current_dir%ffmpeg" -y -hide_banner -i "%%i" -c:v libvpx-vp9 -b:v 2M -pass 1 -an -f webm NUL
    "%current_dir%ffmpeg" -y -hide_banner -i "%%i" -c:v libvpx-vp9 -b:v 2M -pass 2 -c:a libopus "%%~dpni.webm"
)

@pause


さらにこちらは複数動画をドラッグ・アンド・ドロップで一括変換できるバッチです。
同じく.batにしてffmpeg.exeと同じフォルダに置いてください。

@echo off

set current_dir=%~dp0

FOR %%A IN (%*) DO (
	FOR /F "delims=" %%B IN ("%%~aA") DO (
		IF "%%B"=="d" (
			FOR %%C IN ("%%~A\*.mov") DO (
				"%current_dir%ffmpeg" -y -hide_banner -i "%%C" -c:v libvpx-vp9 -b:v 0 -crf 30 -pass 1 -an -f webm NUL
				"%current_dir%ffmpeg" -y -hide_banner -i "%%C" -c:v libvpx-vp9 -b:v 0 -crf 30 -pass 2 -c:a libopus "%%~dpnC.webm"
			)
		) ELSE IF "%%~xA"==".mov" (
			"%current_dir%ffmpeg" -y -hide_banner -i "%%A" -c:v libvpx-vp9 -b:v 0 -crf 30 -pass 1 -an -f webm NUL
			"%current_dir%ffmpeg" -y -hide_banner -i "%%A" -c:v libvpx-vp9 -b:v 0 -crf 30 -pass 2 -c:a libopus "%%~dpnA.webm"
		)
	)
)
@pause

バッチファイルのショートカットを作れば、ショートカットに動画をドラッグ・アンド・ドロップしても変換できます。

デスクトップなどに置いたショートカットから変換できるようになるのでとても便利です。
WebMは元の動画と同じ場所に作られます。

長々と偉そうに書きましたが実は私もバッチファイルを作ったのは初めてなので、もしツッコミどころなどあれば指摘してください 🙇‍♂️

おわりに

黒い画面がおそろしげなFFmpegですが、うまく使えば面倒な動画変換があっという間に終わります。
差分のせいで1キャラだけでえらい数になっていたボス動画も、お茶飲んでる間に変換が終わりました 🍵

エッチに動くゲームがこれで少しでも増えればさいわいです🙂

最後に、変換した背景透過動画をツクールMVで表示するにはトリアコンタン様の動画のピクチャ表示プラグインをお勧めします。
サキュバスアカデミアでは最初Live2Dのモデルを直接描画しようと四苦八苦してたのですが、これのおかげであっさり解決しました。感謝。

参考リンク

FFmpeg and VP9 Encoding Guide
How do you convert an entire directory with ffmpeg?
How to batch convert/multiplex any files with ffmpeg

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事を検索