どうも、CLI使えるならCLI使って自動化したいあむです!
数件しか投稿していませんが、記事の閲覧数の割合が「HandBrake で VFR の動画を CFR に変換する方法」が90%以上という驚異の数字が出たので、今回は HandBrake を使いやすくする小技を投稿してみます。
実はHandBrakeはHandBrakeCLIというCLIで実行するための実行ファイルがあります。
こいつを使えば煩わしいGUIを見ることもなく変換することが可能というわけです。
今回は若干プログラム的なお話なので、「プログラムとか全くわからん」って人は見てもわからないと思います。
HandBrakeCLI をダウンロード
HandBrakeCLIはHandBrakeをダウンロードしても同梱されていません。
個別にダウンロードする必要があります。
こちらの公式ダウンロードページからダウンロードできます。
HandBrakeが入ってるディレクトリにでもぶち込んでおきましょう。
HandBrakeCLI を使ってみよう!
使い方
- cmdを起動します。
- 以下のコマンドを実行します。
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
使い方
- 9行目の set HANDBRAKE= の部分を書き換える
- バッチと同じ場所に input というディレクトリを掘る
- 変換したい動画ファイルをinputディレクトリにぶち込む
- バッチ実行
必要に応じて15行目のFPSも変更してください。
バグってたら勝手に修正してください。
総括
やっぱりCLIだよね!
てか、batって本当に書きづらい…。キライ。