🐥
360度動画・写真から歪みのないサムネイル画像を作成する方法
Insta360などで撮影した360度コンテンツ(equirectangular形式)から、自然な見た目のサムネイル画像を作成する方法を紹介します。
課題:そのままリサイズすると歪む
360度動画や写真はequirectangular(正距円筒図法)形式で保存されています。この形式は球体を平面に展開したもので、特に上下の端に近いほど横方向に引き伸ばされています。
そのまま単純にリサイズしてサムネイルを作成すると、歪んだ不自然な画像になってしまいます。
# 単純なリサイズ(歪んだサムネイルになる)
ffmpeg -i 360video.mp4 -ss 00:00:05 -vframes 1 -vf "scale=640:-1" thumb.jpg
解決策:v360フィルターでflat projectionに変換
ffmpegのv360フィルターを使用して、equirectangular形式からflat(rectilinear/透視投影)形式に変換することで、人間の目で見たような自然な画像を切り出せます。
使用ツール
ffmpeg を使用します。macOSの場合、Homebrewでインストールできます。
brew install ffmpeg
v360フィルターが含まれているか確認:
ffmpeg -filters 2>/dev/null | grep v360
# 出力: .SC v360 V->V Convert 360 projection of video.
基本コマンド
動画からサムネイル作成
ffmpeg -i 360video.mp4 -ss 00:00:05 -vframes 1 \
-vf "v360=e:flat:h_fov=120:v_fov=90:yaw=0:pitch=0,scale=640:-1" \
thumbnail.jpg -y
写真からサムネイル作成
ffmpeg -i 360photo.jpg \
-vf "v360=e:flat:h_fov=120:v_fov=90:yaw=0:pitch=0,scale=640:-1" \
thumbnail.jpg -y
v360フィルターのパラメータ解説
| パラメータ | 説明 |
|---|---|
e |
入力形式:equirectangular |
flat |
出力形式:flat(透視投影) |
h_fov=120 |
水平視野角(度) |
v_fov=90 |
垂直視野角(度) |
yaw=0 |
水平方向の回転(-180〜180) |
pitch=0 |
垂直方向の回転(-90〜90) |
視野角の調整
用途に応じて視野角を調整できます。
# 広角(120° x 90°)- 広い範囲を表示
-vf "v360=e:flat:h_fov=120:v_fov=90"
# 標準(90° x 60°)- 自然な見た目
-vf "v360=e:flat:h_fov=90:v_fov=60"
# 望遠風(60° x 45°)- 狭い範囲をクローズアップ
-vf "v360=e:flat:h_fov=60:v_fov=45"
視点の変更
yawとpitchで切り出す方向を変更できます。
# 正面(デフォルト)
-vf "v360=e:flat:h_fov=120:v_fov=90:yaw=0:pitch=0"
# 右90度
-vf "v360=e:flat:h_fov=120:v_fov=90:yaw=90:pitch=0"
# 後ろ
-vf "v360=e:flat:h_fov=120:v_fov=90:yaw=180:pitch=0"
# 上向き
-vf "v360=e:flat:h_fov=120:v_fov=90:yaw=0:pitch=45"
# 下向き
-vf "v360=e:flat:h_fov=120:v_fov=90:yaw=0:pitch=-45"
複数ファイルの一括処理
動画ファイル用スクリプト
#!/bin/bash
INPUT_DIR="/path/to/videos"
OUTPUT_DIR="/path/to/thumbnails"
mkdir -p "$OUTPUT_DIR"
for f in "$INPUT_DIR"/*.mp4; do
filename=$(basename "$f" .mp4)
ffmpeg -i "$f" -ss 00:00:05 -vframes 1 \
-vf "v360=e:flat:h_fov=120:v_fov=90:yaw=0:pitch=0,scale=640:-1" \
"$OUTPUT_DIR/${filename}_thumb.jpg" -y
echo "作成: ${filename}_thumb.jpg"
done
echo "完了"
画像ファイル用スクリプト
#!/bin/bash
INPUT_DIR="/path/to/photos"
OUTPUT_DIR="/path/to/thumbnails"
mkdir -p "$OUTPUT_DIR"
for f in "$INPUT_DIR"/*.jpg; do
filename=$(basename "$f" .jpg)
ffmpeg -i "$f" \
-vf "v360=e:flat:h_fov=120:v_fov=90:yaw=0:pitch=0,scale=640:-1" \
"$OUTPUT_DIR/${filename}_thumb.jpg" -y
echo "作成: ${filename}_thumb.jpg"
done
echo "完了"
4方向のサムネイルを作成
360度コンテンツの全体像を把握するため、4方向のサムネイルを作成するスクリプトです。
#!/bin/bash
INPUT="$1"
OUTPUT_DIR="$2"
BASENAME=$(basename "$INPUT" | sed 's/\.[^.]*$//')
mkdir -p "$OUTPUT_DIR"
# 正面
ffmpeg -i "$INPUT" -ss 00:00:05 -vframes 1 \
-vf "v360=e:flat:h_fov=90:v_fov=60:yaw=0:pitch=0,scale=480:-1" \
"$OUTPUT_DIR/${BASENAME}_front.jpg" -y
# 右
ffmpeg -i "$INPUT" -ss 00:00:05 -vframes 1 \
-vf "v360=e:flat:h_fov=90:v_fov=60:yaw=90:pitch=0,scale=480:-1" \
"$OUTPUT_DIR/${BASENAME}_right.jpg" -y
# 後ろ
ffmpeg -i "$INPUT" -ss 00:00:05 -vframes 1 \
-vf "v360=e:flat:h_fov=90:v_fov=60:yaw=180:pitch=0,scale=480:-1" \
"$OUTPUT_DIR/${BASENAME}_back.jpg" -y
# 左
ffmpeg -i "$INPUT" -ss 00:00:05 -vframes 1 \
-vf "v360=e:flat:h_fov=90:v_fov=60:yaw=-90:pitch=0,scale=480:-1" \
"$OUTPUT_DIR/${BASENAME}_left.jpg" -y
echo "4方向のサムネイルを作成しました"
使用例:
./create_4dir_thumbs.sh video.mp4 ./thumbnails
まとめ
- 360度コンテンツはequirectangular形式で保存されており、そのままリサイズすると歪む
- ffmpegの
v360フィルターでflat(透視投影)に変換することで自然なサムネイルが作成できる -
h_fov/v_fovで視野角、yaw/pitchで視点方向を調整可能
Discussion