マルチメディア編集

HandBrake を CLI で実行しよう!

どうも、CLI使えるならCLI使って自動化したいあむです!
数件しか投稿していませんが、記事の閲覧数の割合が「HandBrake で VFR の動画を CFR に変換する方法」が90%以上という驚異の数字が出たので、今回は HandBrake を使いやすくする小技を投稿してみます。

実はHandBrakeはHandBrakeCLIというCLIで実行するための実行ファイルがあります。
こいつを使えば煩わしいGUIを見ることもなく変換することが可能というわけです。

今回は若干プログラム的なお話なので、「プログラムとか全くわからん」って人は見てもわからないと思います。

HandBrakeCLI をダウンロード

HandBrakeCLIはHandBrakeをダウンロードしても同梱されていません
個別にダウンロードする必要があります。

こちらの公式ダウンロードページからダウンロードできます。
HandBrakeが入ってるディレクトリにでもぶち込んでおきましょう。

HandBrakeCLI を使ってみよう!

使い方

  1. cmdを起動します。
  2. 以下のコマンドを実行します。
cd <handbrakecliが入ってるディレクトリ>
HandbrakeCLI -i <入力ファイル> -o <出力ファイル>

以上。

これだけだと変換するだけなので、こちらのwikiを見ながらオプションを組み合わせて、自分の欲しい形にして変換してみましょう。

個人的によく使うオプション

ちなみに私がよく使うオプションは以下。

HandbrakeCLI -i <INPUT> -o <OUTPUT> -f mp4 -q 0 -e ffmpeg4 -r 60 --cfr

解説。

オプション 説明
-i 入力ファイル名。
-o 出力ファイル名。
-f mp4 フォーマット。
ここではmp4出力に設定。
-q 0 クォリティ。
ここでは最大クォリティに設定。
-e ffmpeg4 エンコーダー。
ここではffmpeg4(デフォルト)に設定。
-r 60 FPS。
ここでは60fpsに設定。
–cfr フレームレート。
ここではCFR(固定)に設定。

バッチ化

コード

特定のディレクトリに入れたVFR動画をワンクリックでCFRに変換するプログラムが欲しかったので、雑にバッチ化してみました。
inputディレクトリに入れたVFR動画(複数入れてもOK)を60fpsのCFR動画に変換し、outputというディレクトリに出力するバッチです。

@echo off
rem 文字コード
chcp 932 >NUL 2>&1
rem おまじない
setlocal enabledelayedexpansion
title VFRをCFRに変換

rem HandBrake path
set HANDBRAKE="<HandBrakeCLIのフルパス>"
rem 入力ディレクトリ
set INPUT_DIR="input"
rem 出力先ディレクトリ
set OUTPUT_DIR="output"
rem 変換後のフレームレート
set FPS="60"

:Head
rem 入力ディレクトリ存在チェック
if Not Exist %INPUT_DIR% (
    echo %INPUT_DIR%ディレクトリが存在しません。
    goto Error
)

rem 出力先ディレクトリ作成
mkdir %OUTPUT_DIR% >NUL 2>&1

rem ファイル一覧取得
for /f "delims=" %%i in ('dir /b %INPUT_DIR%\*mp4') do (
    set INPUT=%INPUT_DIR%\%%i
    set OUTPUT=%OUTPUT_DIR%\%%i
    echo %%iをCFRに変換中。
    %HANDBRAKE% -i "!INPUT!" -o "!OUTPUT!" -f mp4 -q 0 -e ffmpeg4 -r %FPS% --cfr >NUL 2>&1
)

echo 変換完了!
pause
exit 0

:Error
echo プログラム終了
pause
exit 1

使い方

  1. 9行目の set HANDBRAKE= の部分を書き換える
  2. バッチと同じ場所に input というディレクトリを掘る
  3. 変換したい動画ファイルをinputディレクトリにぶち込む
  4. バッチ実行
    必要に応じて15行目のFPSも変更してください。

バグってたら勝手に修正してください。

総括

やっぱりCLIだよね!

てか、batって本当に書きづらい…。キライ。