本文へスキップ

AIのPOV動画が第三者視点になってしまう理由

一人称のカメラ位置を明確にし、誤解を招く参照画像を修正して、接写や第三者視点に変わるAIのPOV動画を直す方法を解説します。

執筆
Lydia
公開
読了時間
約 18 分
更新
夕暮れのレストランのテーブル越しに座る紺色のブレザーを着た成人男性を一人称で見た場面。手前には観察者の前腕とコーヒーカップがあります。

一人称のショットを指定したのに、相手が観察者の肩越しに映ったり、カメラが相手の顔に近づいたりすることがあります。まず、開始フレームと動きの説明に、矛盾するカメラの指示がないか確認してください。接写、目線が合うこと、「POV」というラベルだけでは視点は決まりません。ハイアングルはカメラの高さを指定し、一人称はカメラが誰の目を表すかを指定します。

この目線の高さでの設定では、開始フレームを観察者の位置から作ります。観察者の頭と胴体は画面外に置いてください。手や前腕は下端から入っても構いませんが、一人称を成立させるために必須ではありません。相手がすることと、カメラがすることを分けて記述します。

以下では、Seedance 2.5 image-to-videoでレストランのテーブルに座る場面を設定し、実際に見られる失敗の直し方、手の動作、移動するPOV、ショットのつなぎ方を説明します。描かれている人物はすべて架空の成人です。図はカメラ位置の説明であり、生成動画ではありません。

視聴者が座る席から最初のフレームを作る

参照画像は、座っている観察者の目を通して撮った写真のように見える必要があります。小さなテーブルの向かいには、紺色のブレザーと襟を開けた白いシャツを着た成人男性が座り、目はおおむねレンズと同じ高さにあります。手前のテーブルの縁が画面下部を横切り、観察者の前腕が下の両隅から入ります。観察者の後頭部、肩のシルエット、別の撮影者は映しません。

次の説明を画像ツールで使うか、使用許可のある写真で同じ場面を用意してください。

Photographic first-person view from a seated adult observer at a restaurant table beside a large window at dusk. A fictional adult man in a navy blazer over an open-collared white shirt sits directly across the small table at conversational distance, hands loosely clasped. Camera at the seated observer's eye height. His face and upper torso are unobstructed. Only the observer's relaxed forearms in dark sleeves enter from the lower corners, resting near the near table edge beside a white coffee cup. A candle in a glass holder and a small vase of flowers stand between them. Warm lamp light against a blue-hour city view through the window. The observer's head, face, shoulders and torso are outside the frame. One continuous room, no mirrors, no over-the-shoulder composition.

端にある肩は無害な細部ではありません。カメラが観察者の後ろにあるかもしれないとモデルに伝えます。切り取った後も座った位置からの自然な視界が残るなら、肩を除いてください。切り取り後に横から、または上からの角度が残るなら、フレームを作り直します。アニメーションがカメラを適切な位置に移してくれるわけではありません。

前景に観察者の前腕がある一人称のレストラン風景と、観察者の後頭部が映る外部視点の比較。

図:手前の前腕は一人称の構図を補強できますが、頭と肩が見えると外部視点になります。

Seedream 5.0 Flashの掲載料金は1枚あたり約$0.029なので、フレームを5回か6回作り直しても、無駄な動画を1本作るより安く済みます。editタスクでは、余計な肩や大きすぎる手など、単独の欠点を場面全体の再構築なしで直せます。Seedance 2.5 image-to-videoにアップロードする前に、入力制限を確認してください。各辺は300~6000ピクセル、最大10 MB、形式はJPG、PNG、WEBP、GIFです。出力は静止画の形に従うので、先に納品用の比率に切り取ります。架空の人物か、使用許可のある人物を使ってください。実在する識別可能な顔の写真は、Seedanceの入力チェックで拒否されることがあります。

小さな動作をひとつ指定して試作する

Seedance 2.5 image-to-video Playgroundで承認済みのフレームをアップロードし、480pで5秒を選び、音声をオフにして動きのプロンプトを貼り付けます。最初のテイクでは終了画像を空にします。出力は静止画の形に従います。視点は画像と言葉で決まり、POVの切り替えスイッチで決まるものではありません。

このプロンプトをコピーしてください。

One continuous five-second first-person shot from the seated observer's eyes. The adult man across the table looks toward the observer, gives one small smile and tilts his head slightly. The observer remains seated and still. Keep the camera position, eye height and framing unchanged. The man's hands stay on his side of the table. The observer's forearms remain low in the foreground. Stable warm lamp light. One take, no cut, no orbit, no zoom, no external view, no dialogue.

Seedance 2.5 image-to-videoの掲載料金は480pで1秒あたり$0.1234なので、5秒の試作は$0.617です。720pでは1秒あたり$0.2773、同じクリップで$1.3865、1080pでは1秒あたり$0.6823($3.4115)です。音声の有無で料金は変わりません。音付きの最終出力ではgenerate_audioをオンにして、"Sound: quiet restaurant ambience, cutlery, low voices; no music or captions."を加えてください。480pで構図と動きを安く確認し、フレームと文言が固まってから720pや1080pにすれば、解像度が増します。カメラ位置が変わるわけではありません。実際のタスクには新しい見積もりを取得してください。

"camera circles him"、"cinematic reveal"、"pull back to show the couple"、"over his shoulder"は避けてください。いずれも別の視点を要求します。カメラを固定したまま人物がカップに目を落とすことはできます。その視線の動きをカメラ移動として書くと、後で解決しなければならない矛盾が生まれます。

レストランの3場面で、基準の視界、構図を固定した頭と視線の変化、カメラを移動して男性を横顔で捉えた視界を比較。

図:人物の視線の変化とカメラ移動では、異なるショットになります。

POVの言い換えを増やすより、見えている問題を直す

結果に現れるもの考えられる指示や参照画像の矛盾試す修正
観察者の頭や背中が映る元画像や、引いて見せる reveal 系の表現が外部カメラを示している目の位置からの画像に置き換え、reveal 系の表現や肩越しの指示を除く
テーブルを上から見ている参照画像のカメラが高すぎる座った目線の高さで作り直し、男性の目をレンズの高さに近づける
カメラが顔へ近づく接写や前進の表現が、動かない観察者と矛盾しているその指示を除き、テーブルの縁と窓枠を固定した構図の基準にする
目線は合わなくなるが構図は固定されている人物が変えたのは視線であり、視点ではない観察者を見るタイミングを指定し、意図した視線が軸から外れただけで再生成しない
別の人物の手が入る両者に曖昧な"you reach"の指示を与えている"the man across the table"と"the observer's right hand"を区別し、最初は一方の人物の手だけを動かす
カップが顔を隠す小道具の開始位置が高い、または動作で視線の先に上がるカップはテーブル上に置き、レンズに向けて持ち上げず少し滑らせる
電話、カメラ、観察者の反射が現れる"Selfie"、"vlog"、鏡の表現、またはフレーム内の反射面その言葉を除き、人物の後ろのガラスや鏡を避け、画面にカメラや電話が映らないと指定する
観察者の手が最初の1秒後に消える相手が手を放した、または手の届かない位置へ動いたプロンプトで接触を続ける("keeps hold of the observer's hand")か、手が消えた後のカットを計画する

別のシードを試す前に、矛盾する入力を変えてください。変えなければ、次のリクエストでも同じ空間的な曖昧さが繰り返されます。

座った目線のレストラン風景と、高いカメラから同じ男性とテーブルを見下ろす風景の比較。

図:目線の高さによって、視聴者、顔、テーブル面の関係が変わります。

観察者の手に動作を与える

観察者の手が動くと、POVショットにその場にいる感覚が生まれます。視点と同じルールです。最初のフレームで状況を作り、プロンプトは次の動きだけに使います。観察者がカップを持つなら、下端から入る前腕と、その手に持ったカップをフレームに配置し、ゆっくりした動きをひとつ指定してください。

From the seated observer's fixed eye position, the observer's right hand lifts the white coffee cup a few centimeters and sets it back on the saucer. The man across the table watches, then smiles. One continuous shot, unchanged camera height and distance, no cuts.

受け渡しでは、誰が何をするかを明確にする必要があります。双方が連動する受け渡しより空間的に説明しやすい、相手側の動作から始めます。この場合は別の開始フレームが必要です。下の図のように、カップは相手側のテーブル上、相手の手の近くに置きます。アニメーションの前に承認済みフレームを編集するか作り直し、カップを移動してください。その後、次のプロンプトを使います。

From the seated observer's fixed eye position, the adult man across the table uses his right hand to slide the white cup a short distance toward the observer, then releases it. The cup stays on the tabletop throughout. The observer's hands remain resting at the near edge and do not touch the cup. The man briefly glances at the cup, then back toward the observer. One continuous shot, unchanged camera height and distance, no cuts.

最初の試行では、観察者にカップをつかませないでください。新しい手が入って接触し、相手が放す間にカップを引き受ける必要があるためです。物語に受け渡しが必要なら、カップが止まった後の第2の動作として、両者の手がすでに正しく映ったフレームから設定します。

成人男性がカップに触れ、観察者へ滑らせ、手を放す3枚の説明画像。観察者の手は接触していません。

図:触れる、滑らせる、放す動作は向かいの男性が行い、観察者の手は離れたままです。

カメラを動かす必要がある場合

一人称のショットでも、観察者自身の移動ならカメラを動かせます。Seedance 2.5 Spicy image-to-videoページの公開例が参考になります。開始フレームでは女性が観察者の手を握り、プロンプトは視聴者の手を包むように握って引っ張り、"breaking into a run and towing the camera after her"と指定しています。手持ちの一人称カメラの動きです。

夜市で女性が視聴者の手を取り、先に走ってカメラを引っ張ります。視聴者の手が見えるのは冒頭だけです。無音のクリップ。

カメラは人の目線ほどの高さで手持ちの揺れを伴って進み、女性は笑いながらレンズを振り返ります。周回や空撮はありません。観察者の手は冒頭にしか映らず、握り続ける例ではありません。その接触が重要なら、手を握り続けるよう指定し、クリップ全体で確認します。

歩くPOVでは、進む道が明確なフレームを用意し、その道に沿った前進を指定します。動きの指示と音の指示は分けてください。

One continuous first-person shot at standing eye height. The observer walks forward along the lit corridor at an easy pace; the camera advances at walking speed with a slight handheld sway and keeps the corridor centered. No one enters the frame from behind and the observer's body stays out of the frame. Sound: footsteps on tile and faint room tone.

歩くプロンプトにカメラ固定の文を加えないでください。両者は矛盾します。歩行は別のカメラ設定であり、座った接写を強化したものではありません。同じテイクで周回、人物の後退、手の接触を同時に要求するのは避けます。

立って挨拶する場面では設定全体を変えます。戸口に立った成人の目線にカメラを置き、別の成人を室内の2歩先に配置し、手前に椅子や座った人の前腕を入れません。相手がドアを少し開けて笑い、観察者は静止するよう指定します。座ったレストラン画像に"standing doorway POV"を加えて使い回すと、モデルに両立しない2つの空間を解かせることになります。

最後のフレームから次の動作へつなぐ

静止したショットができたら、短いテイクでシーケンスを作ります。それぞれが正しいカメラ位置のフレームから始まるため、構造的に視点を引き継げます。

  • Seedance 2.5ではreturn_last_frameをtrueにすると、応答にクリップの最終フレームが別画像として含まれます。次のimage_urlに使ってください。
  • すでにあるクリップでは、最後のフレームを自分で書き出します:ffmpeg -sseof -0.2 -i input.mp4 -update 1 -q:v 2 last-frame.png。
  • 狙った場所で終えるには、第2の静止画をlast_image_urlとして、必ずimage_urlと一緒に送り、2枚の間の移行を説明します。異なる構図が終わりの画面を歪めることがあるため、両方を同じアスペクト比にしてください。Seedance 2.5 Spicyも同じ組み合わせを受け付けます。両端に同じ静止画を指定して元の構図への復帰を求めることもできますが、完全一致を前提とせず、生成された終了部分を確認します。

長いほど安全というわけではありません。モデルページ自体も、延長する前に5秒で動きを確認することを勧めています。フレーム主導のショットが長くなるほど体の形やセットの装飾が変わりやすく、30秒の1テイクより、短いテイクを複数つないだほうが安定するためです。

クリップを確認してから、トリミングか再生成を行う

最初の4秒は一人称を保ち、最後の1秒で引いてしまうなら、視点が変わる前に切ります。不要な肩がずっと端にある場合、中央の場面がまだ観察者の位置から見えるときに限り、切り取りが役立ちます。切り取りでは、存在しない目の位置からの視界を再構築したり、テーブルの遠近を直したりできません。

短い視点の変化を隠してしまうプレーヤーのサムネイルではなく、ダウンロードした元ファイルを確認してください。このコマンドは5秒のクリップから、等間隔の確認用画像を4枚抽出します。

bash
ffmpeg -i input.mp4 \
  -vf "fps=4/5,scale=480:-2,tile=2x2" \
  -frames:v 1 pov-review.jpg

コンタクトシートで構図の変化を探し、その後クリップ全体を再生して、動きと手の接触を判断します。短い欠点はサンプルの間に入ることがあります。使えない終わりを除くには、次のコマンドで最初の4秒だけを書き出します。音声トラックがある場合は残します。

bash
ffmpeg -i input.mp4 -t 4 -map 0:v:0 -map 0:a? \
  -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a aac pov-trimmed.mp4

フィルターの説明はFFmpegにあります。

場面にリバースアングルが必要なら、別のショットへの意図的なカットにします。観察者の後ろからのショットは物語に有効でも、第三者視点です。一人称の部分は空間的に一貫させ、その後、新しい視点の独立したショットに切り替えてください。ショット設計ガイドでは、短い場面でこうしたカットを配置する方法を説明しています。

ショットに合った方法を選ぶ

  • 承認済みのフレームがある: 上記のSeedance 2.5 image-to-videoを使います。作った開始構図を基準にできるので、クリップがそれを保つか確認します。
  • 文章しかない: text-to-videoは一人称の説明を受け付けますが、カメラ位置はモデルが決めるため、開始構図の制御は弱くなります。出来事より先にカメラの位置("the camera is a person seated at a table")を書きます。
  • 同じ人物が複数のPOVショットに出る: 静止画を使ったreference-to-videoか、人物の一貫性を保つワークフローを使います。
  • 固定した目の位置がずれ続ける: 一部のモデルには実際のカメラ固定入力があります。固定カメラのガイドでは、そのモデルと、入力がないモデルでの固定の書き方を紹介しています。
  • 成人向けの一人称場面: Seedance 2.5 Spicyは検閲なしのLoRA調整版で、一人称視点を用途に挙げています。同じフレーム先行の考え方を使い、aspect_ratioとreturn_last_frameの入力はありません。掲載料金は480pで1秒あたり$0.216、720pで$0.432、1080pで$1.08です。検閲なしの動画プロンプトガイドには一人称プロンプトがあり、検閲なしの画像から動画ガイドでは静止画の準備を説明しています。

承認済みのPOVショットをアプリで使う

環境にSPICY_API_KEYを設定し、SPICY_IMAGE_URIには開始画像のアクセス可能なURLか、アップロード済みのspicy:// URIを設定します。このPython 3の例は、料金を確認した後に新しいショットを1件送信します。

python
import json
import os
import urllib.request
import uuid

base = "https://api.spicyapi.ai/api/v1"
headers = {"Authorization": "Bearer " + os.environ["SPICY_API_KEY"],
           "Content-Type": "application/json", "User-Agent": "SpicyAPI-Blog/1.0"}
settings = {
    "duration_seconds": 5,
    "resolution": "480p",
    "generate_audio": False
}
settings["prompt"] = 'One continuous fixed-camera first-person shot from a seated observer. The man across the table gives one small smile. Keep the camera height, framing, room and clothing unchanged.'
settings["image_url"] = os.environ["SPICY_IMAGE_URI"]
payload = {"model": "bytedance/seedance-2.5/image-to-video", "input": settings}

def post(path, body):
    request = urllib.request.Request(base + path, json.dumps(body).encode(), headers)
    with urllib.request.urlopen(request, timeout=60) as response:
        result = json.load(response)
    if result.get("code") != 200:
        raise RuntimeError(result)
    return result["data"]

quote = post("/jobs/quote", payload)
if input(f"Maximum charge ${quote['maxCharge']}. Type yes to generate: ") != "yes":
    raise SystemExit("Stopped before generation")
headers["Idempotency-Key"] = str(uuid.uuid4())
print("Request key:", headers["Idempotency-Key"], flush=True)
task = post("/jobs/createTask", {**payload, "quoteId": quote["quoteId"],
                              "expectedCost": quote["estimatedCost"]})
print("Task ID:", task["taskId"])

表示されたリクエストキーは、そのリクエストの復旧用に保管してください。新しいショットには新しいキーを使います。Task APIドキュメントで結果の受け取りと復旧を説明しています。

繰り返しショットを作る場合は、承認済み入力ファイルをAgentに使わせます。CLI:spicyapi tasks create --model bytedance/seedance-2.5/image-to-video --input-file input.json --wait。MCP:そのモデルと入力でspicyapi_task_createを呼ぶよう依頼します。Skill:“Use the spicyapi Skill to generate this approved shot and return the result.”と依頼します。CLIとMCPは作成前に料金を表示します。Agent連携ドキュメントを参照してください。

他の言語 English · 한국어 · Deutsch · Français · Español · Português (Brasil) · Русский · Italiano · Polski

実際に試してみる

支払いは実行した分だけ。プランもサブスクリプションもありません。

使用モデル:MiniMax H3 · ByteDance Seedance 2.0 Fast