動画を Twitter 向けに変換する zsh 関数

Twitter に投稿できる動画の要件は以下のようだ。

  • フレームレートは60fps以下
  • 解像度は32×32から1280x1024の間
  • ファイルサイズは512MBを超えない
  • 時間は0.5秒から140秒の間
  • アスペクト比は1:3から3:1の間
  • ピクセルアスペクト比は必ず1:1
  • YUV420だけサポート
  • AAC-LCだけ、HE-AAC、HEv2-AACはサポートしない
  • 音声チャンネルはモノラルかステレオだけ、5.1チャンネルやそれ以上は不可
  • クローズGOPであること
  • プログレッシブ方式だけでインターレース方式は不可

このうち制限を知らずによく引っかかるのがフレームレート、YUV フォーマット、音声形式なのでそれらを補正するコマンドを用意する (FFmpeg はインストールされているものとする)。また、音声を削除もついでに行うコマンドも用意しておく。

# Twitter 向けに動画を変換する
function video-for-twitter() {
	help() {
		echo 'video-for-twitter'
		echo 'Usage: video-for-twitter input output'
	}
	if [ "$2" = "" ]; then
		help
		return
	fi
	ffmpeg \
		-i $1 \
		-c:v libx264 \
		-c:a aac \
		-vf fps=30 \
		-vf format=yuv420p \
		$2
}

# Twitter 向けに動画を変換する(音声なし)
function video-for-twitter-no-audio() {
	help() {
		echo 'video-for-twitter-no-audio'
		echo 'Usage: video-for-twitter-no-audio input output'
	}
	if [ "$2" = "" ]; then
		help
		return
	fi
	ffmpeg \
		-i $1 \
		-c:v libx264 \
		-an \
		-vf fps=30 \
		-vf format=yuv420p \
		$2
}