サムネイル作成の手数を減らしたい。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との戯れを楽しんでいただけたら嬉しいです。


いいなと思ったら応援しよう!

1640taro よろしければ応援お願いします! いただいたチップは活動費に使わせていただきます!