【完成版】FFmpeg+Windowsバッチで、複数の動画を一括エンコードする

スポンサーリンク
スポンサーリンク

どうも、じゃぶじゃぶ(@jbjbgame)です。

前回、FFmpegとWindowsバッチを組み合わせて、動画の一括エンコードバッチのプロトタイプを作成しました。

【暫定版】FFmpegとWindowsバッチを使って、複数の動画を一括エンコードするプログラミングを作成する
どうも、じゃぶじゃぶ(@jbjbgame)です。前回、FFmpegの豊富な出力オプションを試して、動画の圧縮率を調べてみました。今回は、本来やりたかった複数動画の一括エンコードをするために、Windowsバッチでプログラムを組みたい...

今回は作成したバッチに改良を加えて、FFmpegのオプションを指定可能にした完成版のバッチを作りたい思います。

 

スポンサーリンク

完成版バッチの作成

指定可能オプション

指定可能なオプションとして、画像圧縮に必要なものに絞って以下の5つにしました。

オプション概要
-i [ファイル名]圧縮するファイル名を指定– i C:\sample\input.mp4
-b:v [ビットレート数(kbps)]映像のビットレート数を指定-b:v 1200k
-r [フレームレート数(fps)]動画のフレームレートを指定-r 120
-s [サイズ(横ピクセルx縦ピクセル)]
※縦と横の間はx(小文字エックス)
動画のサイズを指定-s 1980×1080
-vcodec [コーディック]コーディックの指定-vcodec libx264
または
-vcodec libx265

さらに、圧縮対象の画像の種類(拡張子)も選択できるようにして、MP4形式以外の動画も圧縮できるようにいしたいと思います。

オプションの指定方法としては、対話式を使ってバッチ実行時にオプションを1つずつ指定する感じにします。

 

ソースコード

造っていたら止まらなくなってしまい、前回よりもどんどんソースが大きくなってしまいました。
( ;^ー^)>

かなり自己満足なものになっていますが、最終的な完成版は以下の感じになりました。

ffmpeg-batch-encoding2.bat

 

 

バッチの使い方

基本的なバッチの作成方法や基本動作は前回の暫定版と同じなので、以下の記事を参考にしてください。

【暫定版】FFmpegとWindowsバッチを使って、複数の動画を一括エンコードするプログラミングを作成する
どうも、じゃぶじゃぶ(@jbjbgame)です。前回、FFmpegの豊富な出力オプションを試して、動画の圧縮率を調べてみました。今回は、本来やりたかった複数動画の一括エンコードをするために、Windowsバッチでプログラムを組みたい...

 

今回作成したバッチファイルを「D:\ffmpeg\bat」に配置し、圧縮対象の動画も同じファルダ内に配置して動作させてみます。

 

オプションを指定して実行

機能の違いとして、バッチをダブルクリックして実行した後に各種オプションを指定するところがあります。オプションは一つずつ順番に指定する仕様です。

作業フォルダを指定

圧縮する動画が配置してある作業フォルダを入力してください。上図のように「D:\ffmpeg」と入力してEnterキーを押すと、「D:\ffmpeg」内にある動画ファイルが圧縮対象になります。

何も指定しないでEnterキーを押すと、デフォルト値が対象になります。

コーディックの指定

コーディックを指定します。「libx264」か「libx265」のみ指定可能です。プログラム的には「libx26」が含まれていないと入力エラーにある仕様にしていますが、、、。

何も指定しないでEnterキーを押すと、デフォルト値が対象になります。

ビットレートの指定

ビットレートを指定します。入力値はkbps単位で指定してください。「k」という文字が無いと入力エラーになる仕組みにしています。

何も指定しないでEnterキーを押すと、デフォルト値が対象になります。

フレームレートの指定

フレームレートを指定します。入力値は数字で入力するようにしてください。

何も指定しないでEnterキーを押すと、デフォルト値が対象になります。

サイズの指定

動画サイズを指定します。入力形式は[横ピクセル]x[縦ピクセル]です。入力値に「x」がないと入力エラーになります。

何も指定しないでEnterキーを押すと、デフォルト値が対象になります。

圧縮する動画形式の指定

圧縮対象の動画形式を指定します。仕様の詳細としては、入力した文字(mp4など)の拡張子のファイルを検索するつくりになっています。

 

 

デフォルト値の設定

バッチファイルをテキストエディタで開いてみてください。15~28行目に各オプションのデフォルト値を設定できます。空欄にして、且つバッチ実行時にオプションを何も指定しないと、出力オプション無しでffmpegを実行します。

 

 

使用例

1.出力オプション無し

バッチファイルのデフォルト設定

実行時のパラメータ

FFmpegのコマンド

バッチファイルの設定をすべてブランク(空白)に設定した上で、バッチ実行時のパラメーターも何も指定しないと、出力オプション無しでFFmepgを実行するつくりになっています。

 

2.デフォルト設定あり

バッチファイルのデフォルト設定

実行時のパラメータ

FFmpegのコマンド

バッチファイルのデフォルト設定を以下のように設定しています。

  • 圧縮する対象があるフォルダ⇒D:\sample\ffmpeg
  • コーディック⇒libx264
  • ビットレート⇒640k
  • フレームレート⇒120
  • サイズ⇒1280×720
  • 圧縮率を指定⇒無し
  • 圧縮対象の拡張子⇒mp4

バッチ実行にパラメーターを何も指定しいないので、バッチファイルに書かれた設定が適用されてFFmpegを実行しています。

 

3.実行時にパラメーターを指定

バッチファイルのデフォルト設定

実行時のパラメータ

FFmpegのコマンド

バッチファイルの設定は例2と同じ設定になっていますが、バッチ実行にパラメータを指定することでそのパラメータが適用されてFFmpegが実行されています。

 

つまり、仕様をまとめると

  • 実行時のパラメータが優先して適用される
  • 実行パラメータが無い場合はバッチファイルのデフォルト設定が適用される
  • 実行パラメータとバッチファイルの設定の両方が無い場合は出力オプション無しで実行

上記のような動きをします。

 

※注意!

今回制作したバッチは入力値をもとに、最終的にFFmpegのコマンドを作成して実行しているだけなので、予期せぬところでスペースが入るとエラーになります

例えばファイル名にスペースが入るパターンです。

 ・動画ファイル01.mp4 (動画ファイルと01の間にスペースがある)

このファイル名でバッチを実行すると、

 ・ffmpeg -i D:\sample\ffmpeg動画ファイル01.mp4 動画ファイル01-mini-yyyymmdd.mp4 

上記のようなコマンドになり「D:\sample\ffmpeg動画ファイル」というファイル名で動画を探しに行ってしまい、結果対象ファイルが存在しないためエラーで終了します。

 

 

 

まとめ

今回、やっと動画一括エンコードバッチを完成させることができました。

何回かに分けて投稿してきたffmpegシリーズも、今回で一旦終了です。

Windowsバッチを始めて触りましたが、仕様が全く分からない状態から初めて、いまでは大分使いこなせるところまで理解することができました!

今後も必要に応じて、面白そうなバッチのアイディアが思いついたら、積極的にWindowsバッチを使っていきたいと思います。

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