バッチファイルで動画変換を自動化(Avisynth, x264, ffmpeg, neroAacEnc, mp4box)

ソフトウェア
スポンサーリンク

はじめに

先日このブログで、「Avisynthスクリプトを生成するバッチファイル」を書いてみたんですが、それを発展させて、動画をドラッグ&ドロップするだけで「H264+AAC」に変換できるバッチファイルを書いてみました。

必要なソフト

動画変換には以下のソフトを使用しているので、まずは全て入手してセットしてください。具体的には、

  1. Avisynth :インストール
  2. FFIndex : Avisynth のプラグインフォルダへ格納
  3. x264/FFmpeg/neroAacEnc/mp4box : パス(PATH)が通っているフォルダーに格納

してください。「PATH が通っている」が分からない方は、「pathを通す 環境変数」という内容で、Googleで検索して調べてみてください。

ソフト概要
Avisynth映像をデコードし、他の動画編集ソフトに映像データを渡すソフトウェア。
FFIndexAvisynth の入力プラグイン。Avisynth で入力可能なファイル形式を増やすために使用。
x264h264 エンコーダー
FFmpeg高機能なデコーダー兼エンコーダー。
今回はAvisynthから動画を受け取って、音声部を中間ファイル(Wav)に変換するために使用。
neroAacEncAAC エンコーダー
mp4boxコンテナ操作ツール。今回は 映像(h264) と音声(AAC)を多重化するために使用。

スクリプト

早速ですがバッチファイルの中身です!

これを全てコピーしてメモ帳に貼り付け、拡張子を [.bat] に変えて保存してください。拡張子が[.bat]になってさえいれば、ファイル名は何でも大丈夫です!

なおここでは x264 のオプションを必要最低限なものにしておりますが、お好きなように変更いただいて大丈夫です。

REM [video] > [H.264+AAC].mp4
REM You should set FPS.
REM FPS example => 23.976024, 24, 25, 29.970030, 30

@ECHO OFF
SET FPS=
SET /P FPS="Please enter FPS => "
@ECHO ON

SET InFile=%~dpnx1
SET OutFile=%~dpn1.mp4

@ECHO OFF

ECHO FFIndex("%InFile%") > "%InFile%.avs"
ECHO AudioDubEX(FFVideoSource("%InFile%"),FFAudioSource("%InFile%")) >> "%InFile%.avs"
ECHO ConvertToYV12() >> "%InFile%.avs"
ECHO return last >> "%InFile%.avs"

x264.exe --preset veryslow --crf 20 -o "%InFile%.avs.264" "%InFile%.avs"

@ECHO ON

ffmpeg.exe -vn -i "%InFile%" "%InFile%.wav"
neroAacEnc.exe -q 0.50 -if "%InFile%.wav" -of "%InFile%.wav.mp4"
mp4box.exe -add "%InFile%.avs.264:fps=%FPS%:par=1:1" -add "%InFile%.wav.mp4" -new "%OutFile%"

DEL "%InFile%.avs"
DEL "%InFile%.avs.264"
DEL "%InFile%.wav"
DEL "%InFile%.wav.mp4"
DEL "%InFile%.ffindex"


PAUSE

使い方

先程作成したバッチファイルファイルと、動画ファイルが同じフォルダに置いています。(別に一緒のフォルダに置く必要は無いのですが、ここでは分かりやすいように同じフォルダに置いています。)

Explorer

バッチファイルに変換したい動画ファイルを、ドラッグ&ドロップします。

Explorer

そうしますと、以下のような黒いウィンドウが自動的に開きます。

コマンドプロンプト

実はこの状態で、キーボードで文字を入力できるようになっていますので、動画のフレームレート(FPS)を入力します。以下の画像の緑で囲った部分のように入力出来たら、キーボードの Enter キーを押して、FPS を確定させます。

なお黒いウィンドウの3行目には、主に使用されるFPSを例として書いていますが、これ以外の数値でも問題無く記入できますので、安心してください。

コマンドプロンプト

そうしますと動画変換が開始され、以下の画像のように、動画変換で使用される作業ファイル(中間ファイル)が生成されます。このファイルは動画変換が終わるまでは必要なファイルになるため、捨てたり名前を変えたりしないでください。

Explorer

なお、黒いウィンドウに表示されている沢山の文字列のうち、下記画像の緑の部分は、動画変換の進捗を示しています。下の例だと「全体の37.8%終わりました」って事を示しています。気長に待ちましょう!

コマンドプロンプト

動画変換が完了すると、先程は2つしかなかったフォルダに、拡張子 [.mp4] な3つ目のファイルが生成されているのが分かります。これで変換完了です。なお、先程幾つか生成されていた中間ファイルは、動画変換が完了した時点で、自動的に削除されます。

Explorer

全て完了すると、以下の画面で停止します。以下画像の緑の部分の通り、何でもいいのでキーボードを入力すると、黒い画面は自動的に閉じて消えます。

コマンドプロンプト

以上です。お疲れ様でした!

解説

REM [video] > [H.264+AAC].mp4
REM You should set FPS.
REM FPS example => 23.976024, 24, 25, 29.970030, 30

REM コマンドは、バッチファイル中でコメント書く際に使用します。つまり REM の右側は、バッチファイルの動作に関与しない備考として処理されます。

@ECHO OFF
@ECHO ON

「@ECHO OFF」 にすると、バッチファイルで書いた処理が、コマンドプロンプト(黒い窓)で表示されないようになります。再表示するには 「@ECHO ON」とします。

このコマンドは表示する/しないだけで動作には影響しないので、お好みで良いと思います。

SET /P FPS="Please enter FPS => "

SET コマンドは、コマンドプロンプトで変数を扱い場合に使用します。「SEP /P 文字列」とすると、バッチファイル実行の都度、バッチファイルの実行者に入力させることが出来るようになります。

SET InFile=%~dpnx1
SET OutFile=%~dpn1.mp4

「%~dpnx1」はファイルをドラッグ&ドロップした際に作動し、ドロップしたファイルのフルパス(ドライブレター、ファイルパス、ファイル名、拡張子)を展開します。これを SET コマンドを組み合わせる事により、 InFile/OutFile という変数に、ファイルのフルパスをセットできます。

ECHO FFIndex("%InFile%") > "%InFile%.avs"
ECHO AudioDubEX(FFVideoSource("%InFile%"),FFAudioSource("%InFile%")) >> "%InFile%.avs"
ECHO ConvertToYV12() >> "%InFile%.avs"
ECHO return last >> "%InFile%.avs"

Avisynth スクリプトを生成するコマンドです。このブログで以前解説したので、ここでは省略します!

もし動画に Avisynth でフィルターを掛けたい方は、ここでフィルターを追加してもらうと良いと思います!

x264.exe --preset veryslow --crf 20 -o "%InFile%.avs.264" "%InFile%.avs"

映像部を h264 へ変換する部分です。変換オプションはお好みで追加してもらってOKです!

ffmpeg.exe -vn -i "%InFile%" "%InFile%.wav"

動画から音声のみを抽出し、WAVファイル(中間)ファイルへ変換します

neroAacEnc.exe -q 0.50 -if "%InFile%.wav" -of "%InFile%.wav.mp4"

音声部を AAC へ変換する部分です。変換オプションはお好みで追加してもらってOKです!

またお好みで、neroAacEnc 以外のエンコーダーを使用してもらっても良いと思います。

mp4box.exe -add "%InFile%.avs.264:fps=%FPS%:par=1:1" -add "%InFile%.wav.mp4" -new "%OutFile%"

h264ファイルとAACファイルを多重化(ミックス)します。なお、一番初めに手入力したフレームレート(FPS)の情報は、ここで使用します!

DEL "%InFile%.avs"
DEL "%InFile%.avs.264"
DEL "%InFile%.wav"
DEL "%InFile%.wav.mp4"
DEL "%InFile%.ffindex"

中間ファイルとして生成したファイルを削除します。これでゴミデータは削除されて、変換前と返還後の MP4 ファイルだけが残ります。

PAUSE

処理を一時停止します。また、何かのキーを押すと、停止状態は解除されます。

無くても良いのですが、これがあると最後に処理が止まって、変換ログ等々が確認できるため入れてます。変換ログをみない方は、無くても良いと思います。

所感

以上が「バッチファイルで動画変換を自動化する」方法でした!

最近では優秀な動画編集ソフトがありますが、それらは簡単に使えるようはなっていても、自由度が無かったりする場合があります。その点、自分でバッチファイルを書いてしまえば、自分の好きなソフト、好きな設定に自由にできちゃいます!

コマンドプロンプトが少しでもわかる方なら、上記を雛形に改造できると思います。もしよければ参考にしてもらえると幸いです!

コメント

タイトルとURLをコピーしました