🐥

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"

視点の変更

yawpitchで切り出す方向を変更できます。

# 正面(デフォルト)
-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