2016年12月25日日曜日

ffmpeg.exe のH.265を手軽に使うDOSバッチの「ffmpeg5sEnc.bat」の作成

 以前、勢いに任せて「ffmpeg.exeを手っ取り早く簡単手軽に使うためのファイル同期風フロントエンドVBスクリプト【Ffmpesync ver.1】 」を作ったのですが、それから二年以上経過しました。
 今年の半ばから保存用のAviutlによるメインエンコーダーをH.264からH.265に切り替え、画質はほぼ同等でファイルサイズと処理時間のどちらも減少させることに成功しています。
 先日久々にFfmpesync を動かす機会がありまして、「そーいやこれもH.265にする必要あるかな~ぃゃもう二年前と動画の運用方法変わってるからぶっちゃけココまでの必要ないんだよな。でも手軽に大きな動画ファイルをH.265で小さくしたいな」 と言う欲求が生まれまして仕事休みにチマチマと作ってみました。
 想定は「おっきな録画ファイルを気軽に手っ取り早くスマホで見れるようにそれなり画質で小さくしたい時に使用」と言ったところでしょうか。 とは言え処理時間はCPU i7-6700kでもx0.5~x2速と結構かかります。
 大量のファイルを連続で変換したい場合は「call ffmpeg5sEnc.bat "エンコード元ファイル名"」 など記述した一覧バッチを実行してやればOK。
 ffmpeg5sEnc.batは程々画質の圧縮率優先で画質28解像度1280x720の固定としてるので、高画質高解像度にするなら中のパラメータを変えてみてください。でわでわ~ノシ

@echo off
rem 2016/12/23 ffmpeg5sEnc.bat
rem   H.265エンコードサポートバッチファイル
rem   エンコード済みファイルは指定パスにファイル名.mkvで出力
rem
rem 実行環境
rem   http://ffmpeg.org/download.html より
rem     ffmpegのwindows-buildを入手して当バッチと同じ場所に展開しておく。
rem
rem IN
rem   ファイル名
rem Ex.
rem   call ffmpeg5sEnc.bat "エンコード元ファイル名"
rem                     ※"で囲うのはファイル名切れ防止"
rem
rem 内部記述
rem  BATFILE 実行パス ※原則変更しないでください
rem  INPFILE 入力ファイル名 ※原則変更しないでください
rem  FFMPEXE FFMPEG.EXE フルパス ※原則変更しないでください
rem
rem  FFMP265 H.265 エンコードパラメータ
rem            ex.動画品質の変更 -crf 28 >>>  -crf 24
rem            ex.縦横サイズ変更 -s 1280x720 >>> -s 1920x1080
rem  OUTFILE 出力ファイル名
rem            ex.出力先の変更  "C:\!work\%~nx1.mkv"  >>> "C:\Users\username\Videos\%~nx1.mkv"
rem
rem 注意
rem  ファイルにANSI以外の文字や画像が入ってる場合は動かない可能性があります。
rem  該当文字や画像を削除または変更して再実行してみてください、。
rem
rem おまけ
rem  -crf 28 画質ちょい落ちるけどファイルサイズ小
rem  -crf 24 画質イイけどファイルサイズ増
rem  -s 1280x720 より 1920x1080 はファイルサイズ増
rem
rem  一括処理実行リストファイル作成時使用のリストファイル取得コマンド例
rem ex. dir d:\@yb\*2560*.mp4 /o-s /b > mp4.bat

rem ****ffmpeg h.265パラメータ****
SET BATFILE=%~dp0
SET INPFILE="%~f1"
SET FFMPEXE=%BATFILE%ffmpeg -i
SET FFMP265=-c:v libx265 -preset medium -crf 28 -s 1280x720 -c:a aac -b:a 128k
SET OUTFILE="C:\!work\%~nx1.mkv"

rem ****ffmpeg h.265エンコード実行****
%FFMPEXE% %INPFILE% %FFMP265% %OUTFILE%

2016年12月20日火曜日

SVP4 Pro 高解像度(1kより大きい)動画ファイル再生エラー回避のための条件付き「SVP無効化」

 1k(1920x1080)解像度より大きな動画をMPC-HCで再生する機会がありまして気が付きました。入手元はお察しくださいな感じですが、ともかくゲツした動画ファイルの解像度が2560x1440とか4k(3840x2160)だとSVP4 Proがエラーで処理が止まってしまうんですよね。
 4kだと再生直後にエラー。2560x1440だとしばらくは再生するもエラー。最終的にはMPC-HCが吹っ飛びますorz
一見すると、MPC-HCのエラーに見えるんですが、原因元がSVP4 Proのエラーなんですよね。その割にはSVP4 Proは落ちないんですがw
 これの回避方法はないか色々試行錯誤(中略)したのですが、先日ようやく気が付きました。
 SVP4 Proに「プロファイル適用条件の設定」なる項目があるのに。

 1k(1920x1080)解像度より大きな解像度を条件フラグとして、大きな解像度でも問題ないプロファイルを作ってしまえば問題なしになるんじゃ、、、、あ。もしかしてコレできんじゃね?と思ってやってみたらできちゃいましたorz
不本意だああああああーーーーーーー!けど、しゃーねーかっ。メンドイのイヤだし。

 さて「プロファイル適用条件の設定」は色々な条件指定が選択できるんですが、ここでは再生動画の縦×横のピクセル数がしきい値(1920x1080)より大きければ「一時的にSVPを無効にする」の有効化を設定します。


 手順としては
 ①使用するプロファイルを選択して、しきい値となる解像度の動画ファイルの適用条件を設定。
  ここでは1k(1920x1080)を使用している。
  1.「プロファイル適用条件の設定」を開き、「ソースフレーム領域」を選択。
    ⇒ 入力項目に2,074 (Mpix)。 ※1920x1080の切り上げ。再生中なら入っている。
  2.「≦」 (Less than) にする。これで解像度が1k(1920x1080)以下なら適用となる。

 ②しきい値(1920x1080)より大きい場合の「一時的にSVPを無効にする」プロファイルを作成。
  1.「新規プロファイルの作成」を押して適当に名前を付ける。 ex.NULL
  2.「フレームレート変換を実行する」の選択を外す。
  3.【STOP】を選択。
  4.「プロファイル適用条件の設定」を開き、「ソースフレーム領域」を選択。
  5.入力項目に2,074(Mpix) と入力する。※①-1.の値をコピー
  6.「≧」 (Greater than) にする。これで解像度が1k(1920x1080)より大きければ適用となる。

 以上で再生動画の解像度がしきい値(1920x1080)より大きな場合は「一時的にSVPを無効」となります。

 俺的には不本意。 4k動画とかも問題なく処理してくれたらこんな設定しなくていいのにっ!