サムネイル作成の手数を減らしたい。ChatGPTに相談だ。
AI動画をYouTube へpublishの際、サムネイル画像を作っている。
毎回ffmpegで1枚切り出してるので、大した工数ではないのだけれど、
せっかくなら元の動画から、エフェクトの使用前と使用後を1枚の画像にして、サムネイル画像化したいなと。
ざっくりとしたイメージは、テレビ画面での小窓。ワイプ。PinP。
食レポ映像の右上とかにちょいちょいスタジオの人が映るアレ。
ということで、ChatGPTに相談してみた。
ChatGPTへの質問内容
ffmpegやimgconvert を使って、極力手数を減らして次のことがしたい。
目的は、Effectの使用前使用後が1枚の画像にサムネイル化。
・mp4 の先頭フレームと、mp4の最後から15frame前を取得して、1枚の画像に合成して出力する。
・サムネイル化に際して先頭フレームは、縮小して左肩に配置。縮小サイズは元のサイズの1/6程度。
・ファイル名は、元になったmp4ファイル名を基準として、-edit.jpgを付与したもの。 例:XXXXX.mp4 からXXXX-edit.jpg とか
ChatGPTからの回答
できます。FFmpegだけでやるのが一番手数が少ないです。
ImageMagick(convertやmagick)を使う必要もありません。
例えば動画が30fpsなら、
先頭フレーム
最後から15フレーム前(=0.5秒前)
を取得して、先頭フレームを左上に1/6サイズで重ねた画像を作れます。
ffmpeg -i XXXXX.mp4 \
-filter_complex "
[0:v]trim=start_frame=0:end_frame=1,scale=iw/6:ih/6[first];
[0:v]trim=end_frame=-15:start_frame=-16[last];
[last][first]overlay=20:20
" \
-frames:v 1 XXXXX-edit.jpgただし、trimの負のフレーム指定はFFmpegでは使えないケースがあります。
30fps固定なら、こちらの方がシンプルです。
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Usage: $(basename "$0") movie.mp4"
exit 1
fi
INPUT="$1"
OUTPUT="${INPUT%.*}-edit.jpg"
TMP1="/tmp/before-$$.jpg"
TMP2="/tmp/after-$$.jpg"
# 先頭フレーム
ffmpeg -loglevel error -y \
-i "$INPUT" \
-frames:v 1 \
"$TMP1"
# 最後から0.5秒(30fpsなら約15フレーム前)
ffmpeg -loglevel error -y \
-sseof -0.5 \
-i "$INPUT" \
-frames:v 1 \
"$TMP2"
# 合成
ffmpeg -loglevel error -y \
-i "$TMP2" \
-i "$TMP1" \
-filter_complex "[1:v]scale=iw/6:ih/6[small];[0:v][small]overlay=20:20" \
"$OUTPUT"
rm -f "$TMP1" "$TMP2"
echo "Created $OUTPUT"実行方法
chmod +x before-after.sh./before-after.sh XXXXX.mp4すると
XXXXX-edit.jpgができます。
結果

元動画 AI生成動画YouTube
最後までお読みいただき、ありがとうございました。
AIは、こちらが期待した答えだけではなく、ときには想像を超える表現を返してくれます。そんな「思ってもみなかったものとの出会い」を、これからもYouTubeで記録していきます。
興味を持っていただけたら、ぜひYouTubeチャンネル登録して、一緒にAIとの戯れを楽しんでいただけたら嬉しいです。
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップは活動費に使わせていただきます! 