低画質動画も拡大しなければ鑑賞にたえなくもない(ffmpeg な話)、の別解

別解と改まっていうほどのネタでもないけれど。

要するに「引き伸ばし」がみっともない映像になってしまうことを避けたいだけなのだ、てのが発端。なんだけど、これで overlay をやったもんで、思いついてしまったので、ついでに、てだけのネタ。

「目いっぱい引き伸ばすとみっともない見れたものではない映像になるが、少し引き伸ばしを控えめにするだけでマシになる」みたいな動画があるとする。1920×1080 にしたいとしてだな、元映像をそこまで目いっぱい引き伸ばしたくはないので、pad で埋める、てのが前回の案。けど、「めいっぱい引き伸ばしてぼかした上に少し小さいのを overlay」するといい感じじゃないかしら、てわけね:

引数に入力ファイルと 1920 から減算する値をとるシェルスクリプト
 1 #! /bin/sh
 2 reduce_size="${2:-0}"
 3 
 4 ffmpeg -y -i "$1" -i "$1" \
 5     -filter_complex "
 6 [0:v]scale=1920:1080,boxblur=luma_radius=16:luma_power=4[0v];
 7 [1:v]scale=1920 - ${reduce_size}:-1[1v];
 8 [0v][1v]overlay=(W - w) / 2:(H - h) / 2[v];
 9 [0a][1a]amix[a]" \
10     -map '[v]' -map '[a]' -ac 2 \
11     "`basename \"$1\" .mp4`"-out.mp4

amix はたぶんやらんでも期待通りのものになるんじゃないかという気はする。

たとえば結果はこんな感じ:


2018-07-05追記:
自分で気づいてる節もあったけれど、無論こちらが素直:

引数に入力ファイルと 1920 から減算する値をとるシェルスクリプト
 1 #! /bin/sh
 2 reduce_size="${2:-0}"
 3 
 4 ffmpeg -y -i "$1" -i "$1" \
 5     -filter_complex "
 6 [0:v]scale=1920:1080,boxblur=luma_radius=16:luma_power=4[0v];
 7 [1:v]scale=1920 - ${reduce_size}:-1[1v];
 8 [0v][1v]overlay=(W - w) / 2:(H - h) / 2[v]" \
 9     -map '[v]' -map '0:a' \
10     "`basename \"$1\" .mp4`"-out.mp4