J'ai une grande collection de fichiers vidéo mkv et mp4 au format 4:3. J'essaie de redimensionner le plus grand d'entre eux à une taille plus gérable de 640x480. C'est en partie pour économiser de l'espace disque, mais aussi pour les rendre plus faciles à regarder sur un écran d'ordinateur portable, et pour consommer moins de cycles de processeur pour les lire.
Mais je n'ai pas trouvé de moyen efficace pour les redimensionner. J'ai essayé de respecter scrupuleusement l'encodage utilisé pour le fichier original, tel qu'il est signalé par MediaInfo (en utilisant l'option x264opts pour reproduire les variables signalées par MediaInfo, lorsqu'elles diffèrent d'un préréglage standard). Basé sur un encodage vidéo à deux passages.
Mais cela me laisse avec une commande très complexe pour ffmpeg, montrée ci-dessous. Qu'est-ce que je néglige ? Existe-t-il une ligne de commande plus simple que je puisse utiliser avec ffmpeg et qui permette de reproduire correctement l'encodage utilisé dans le fichier d'entrée ?
:: 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"