4:3形式のmkvおよびmp4ビデオファイルの大規模なコレクションがあります。最大のサイズを、より管理しやすい640x480サイズに変更しようとしています。これは、ディスクスペースを節約することも、ラップトップ画面で視聴しやすくすること、および再生に使用するプロセッササイクルを少なくすることも目的の1つです。
しかし、私はそれらのサイズを変更する効率的な手段を見つけていません。MediaInfoによって報告された元のファイルに使用されているエンコーディングに厳密に準拠しようとしています(MediaInfoによって報告された変数を標準のプリセットとは異なる場所で再現するためにx264optsオプションを使用)。2パスビデオエンコーディングに基づきます。
しかし、これにより、以下に示すように、ffmpegの非常に複雑なコマンドが残ります。私は何を見落としていますか?ffmpegで使用できるもっと簡単なコマンドラインはありますか。それでも、入力ファイルで使用されているエンコーディングを再現するという公正な仕事をしますか?
:: Resize Image to 640x480 (e.g. 960x720 x 2/3)
:: Input File (WITH .ext)
SET input=video_960x720_320kbps.mkv
:: Resize from 960x720 to 640x480 (i.e. 960x720 x 2/3)
:: Resize Picture to 2/3rd
SET multiply=2
SET divide=3
:: Location of FFMPEG (64-bit)
SET ffmpeg="C:\Program Files\FFmpeg\ffmpeg.exe" -hide_banner -threads 1
:: *** MATCH INPUT FILE'S SETTINGS : Input file analysed by MediaInfo ***
:: ** Command Line : 2 Pass Encoding : 320 kbps x 2/3 + Headroom = 240 kbps : Input = MKV **
:: Video - Advanced Video Codec (AVC), High@L5 - Constant Bitrate, Framerate defaults to Input file's framerate
:: Overwrite a Profile with the x264-params option
SET x264opts="ref=16:deblock=1,1,2:me_range=32:trellis=0:bframes=5:open_gop=0:min-keyint=300:keyint_min=23:bitrate=240:qpmin=12:qpmax=60:qpstep=10:threads=1"
SET mapping=-i "%input%" -itsoffset 0 -i "%input%" -map 0:v -map 1:a -copyts
SET options=-preset veryslow -profile:v high -level 5 -x264-params %x264opts% -pix_fmt yuv420p
SET command=%ffmpeg% %mapping% -c:v libx264 %options% -vf "scale=iw*%multiply%/%divide%:-1" -c:a copy -sn -map_metadata 0
%command% -y -pass 1 -flags global_header -f matroska nul && %command% -pass 2 -flags global_header -movflags faststart "output_640x480_240kbps.mkv"