🐙

ffmpegでaspect比を維持しつつ、縮小サイズの動画を書き出す

2021/12/30に公開

なんか毎回忘れるのでメモ

$ ffmpeg -i tmp.mp4 -vf 'scale=320:-1' tmp_small.mp4

これでうまくいくこともあるのだけど、
動画の縦の大きさが2で割り切れない場合に、下記のようなメッセージでうまく行かない。

[libx264 @ 0x14000ee00] height not divisible by 2 (320x257)

端数を丸め込むとうまくいく.
(ow=original_width, a=aspect_ratio, 2で割って戻して、奇数を偶数化する)

$ ffmpeg -i tmp.mov -vf 'scale=320:(ow/a/2)*2' tmp_small.mp4

毎回覚えるのがだるいのでコマンド化した.

#!/bin/sh

set -xe

if [ $# -eq 0 ]; then
  echo "usage: <input_mp4>"
  exit 1
fi

f1=$1
f2=${f1%.*}_small.mp4
ffmpeg -i $f1 -vf 'scale=320:trunc(ow/a/2)*2' $f2

動作動画とかを容量小さめで貼るのに便利でほぼ毎日使う...!

Discussion