ffmpeg-kinetic-captions について
FFmpegとASS字幕で動くキャプションを作るクリエイター向けのリファレンススキルです。単語のハイライト、ポップ、揺れ、文字の表示例をまとめています。
主な機能
- 01ASS字幕アニメーションの例
- 02単語ごとのカラオケハイライト
- 03バウンスと拡大縮小効果
- 04揺れとテキスト表示効果
- 05タイミングとプラットフォームの参考情報
活用シーン
- 01短尺動画に単語強調キャプションを付ける
- 02ポップや揺れで重要語を強調する
- 03文字単位または単語単位の表示を作る
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ josiahsiegel/ claude-plugin-marketplace --skill ffmpeg-kinetic-captionsインストール後、Claude Code で/ffmpeg-kinetic-captionsを入力して読み込まれたか確認します。
同梱ファイルreferences/complete-generator.md
詳細
重要なガイドライン
Windows のファイルパス要件
必須:Windows ではファイルパスに必ずバックスラッシュを使用してください
Windows で Edit または Write ツールを使用する場合、ファイルパスにはスラッシュ(/)ではなく、必ずバックスラッシュ(\)を使用してください。
ドキュメント作成のガイドライン
ユーザーから明示的に依頼されない限り、新しいドキュメントファイルを作成しないでください。
キネティック字幕マスターガイド(2025-2026)
クイックリファレンス - キネティックエフェクト
| エフェクト | ASS コード | 持続時間 | 使用例 |
|---|---|---|---|
| 単語の拡大 | {\fscx80\fscy80\t(0,200,\fscx120\fscy120)\t(200,400,\fscx100\fscy100)} | 400ms | カラオケのハイライト |
| ポップバウンス | {\fscx50\fscy50\t(0,100,\fscx115\fscy115)\t(100,200,\fscx100\fscy100)} | 200ms | 単語の表示 |
| エラスティック | {\fscx40\fscy40\t(0,100,\fscx130\fscy130)\t(100,200,\fscx90\fscy90)\t(200,350,\fscx100\fscy100)} | 350ms | 高エネルギー |
| スプリングバウンス | {\move(540,1100,540,960,0,300)\t(0,150,\fscx110\fscy110)\t(150,300,\fscx100\fscy100)} | 300ms | 下からの登場 |
| シェイク | {\t(0,50,\pos(545,960))\t(50,100,\pos(535,960))\t(100,150,\pos(540,960))} | 150ms | インパクトの強調 |
| カラオケフィル | {\kf100}Word | 1000ms | 段階的なハイライト |
| カラオケ+拡大 | {\k80\t(0,200,\fscx115\fscy115)\t(200,400,\fscx100\fscy100)} | 800ms | ハイライト+拡大 |
キネティック字幕が重要な理由
- **ソーシャル動画の85%**は音声なしで視聴されます
- 単語単位のアニメーションは視聴者の定着率を25~40%高めます
- 拡大/バウンス効果は「今、この単語が重要」ということを伝えます
- カラオケ風のハイライトは音声に合わせて視聴者のタイミングを導きます
- キネティックタイポグラフィはTikTok/Shorts/Reelsで標準的に期待されています
セクション1:単語拡大エフェクト付きカラオケ
単語拡大ハイライトは、最も要望の多いキネティックエフェクトです。ハイライト中に単語が拡大し、その後、通常のサイズに戻ります。
基本的な単語拡大カラオケ
[Script Info]
ScriptType: v4.00+
PlayResX: 1080
PlayResY: 1920
WrapStyle: 0
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: KaraokeGrow,Arial Black,80,&H00FFFFFF,&H0000FFFF,&H00000000,&H40000000,1,0,0,0,100,100,0,0,1,5,0,2,10,10,280,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
; Word grows when karaoke highlight reaches it
Dialogue: 0,0:00:01.00,0:00:05.00,KaraokeGrow,,0,0,0,,{\k80\t(0,200,\fscx115\fscy115)\t(200,400,\fscx100\fscy100)}This {\k60\t(0,150,\fscx115\fscy115)\t(150,300,\fscx100\fscy100)}is {\k100\t(0,250,\fscx120\fscy120)\t(250,500,\fscx100\fscy100)}AMAZING
アニメーションタグを理解する
{\k80\t(0,200,\fscx115\fscy115)\t(200,400,\fscx100\fscy100)}Word
Breaking it down:
- \k80 = Karaoke duration (80 centiseconds = 0.8 seconds)
- \t(0,200,...) = Animation from 0-200ms
- \fscx115\fscy115 = Scale to 115% (grow)
- \t(200,400,...) = Animation from 200-400ms
- \fscx100\fscy100 = Scale back to 100% (shrink)
重要:時間の単位は異なります!
| タグ | 単位 | 0.5秒の場合 |
|---|---|---|
\k | センチ秒 | \k50 |
\t() | ミリ秒 | \t(0,500,...) |
高度な単語拡大パターン
パターン1:拡大+色の変更
ハイライト時に単語が拡大し、色も変わります。
[V4+ Styles]
Style: GrowColor,Arial Black,80,&H00FFFFFF,&H0000FFFF,&H00000000,&H40000000,1,0,0,0,100,100,0,0,1,5,0,2,10,10,280,1
; White Yellow highlight
[Events]
; Karaoke fill (kf) + grow + color transition
Dialogue: 0,0:00:00.00,0:00:03.00,GrowColor,,0,0,0,,{\kf60\t(0,200,\fscx115\fscy115\c&H00FFFF&)\t(200,400,\fscx100\fscy100)}Check {\kf80\t(0,200,\fscx115\fscy115\c&H00FFFF&)\t(200,400,\fscx100\fscy100)}this {\kf100\t(0,250,\fscx120\fscy120\c&H00FFFF&)\t(250,500,\fscx100\fscy100)}out
パターン2:拡大+バウンス(オーバーシュート)
よりダイナミックな印象にするための、スプリング物理によるオーバーシュートです。
; Grows to 120%, bounces back to 95%, settles at 100%
Dialogue: 0,0:00:00.00,0:00:03.00,Style,,0,0,0,,{\k80\t(0,120,\fscx120\fscy120)\t(120,220,\fscx95\fscy95)\t(220,350,\fscx100\fscy100)}Bouncy
パターン3:拡大+アウトラインの脈動
ハイライト中にアウトラインが拡大します。
; Border/outline grows with text
Dialogue: 0,0:00:00.00,0:00:02.00,Style,,0,0,0,,{\k100\t(0,200,\fscx115\fscy115\bord8)\t(200,400,\fscx100\fscy100\bord5)}IMPACT
プラットフォーム別の単語拡大タイミング
| プラットフォーム | 拡大時間 | 縮小時間 | 最大スケール | アニメーションスタイル |
|---|---|---|---|---|
| TikTok | 100-150ms | 100-150ms | 115-120% | 高速でメリハリのある動き |
| YouTube Shorts | 150-200ms | 150-200ms | 110-115% | 滑らかで読みやすい |
| Instagram Reels | 120-180ms | 120-180ms | 115-120% | スタイリッシュでトレンド感のある動き |
TikTok 向けに最適化(高速)
; Quick 200ms total animation
{\k60\t(0,100,\fscx115\fscy115)\t(100,200,\fscx100\fscy100)}Fast
YouTube Shorts 向けに最適化(滑らか)
; Smooth 350ms total animation
{\k80\t(0,175,\fscx112\fscy112)\t(175,350,\fscx100\fscy100)}Smooth
セクション2:CapCut スタイルの単語ポップエフェクト
単語ポップエフェクトは、各単語をバウンスさせながら表示するもので、CapCut によって広まりました。
基本的な単語ポップ
[V4+ Styles]
Style: WordPop,Arial Black,84,&H00FFFFFF,&H0000FFFF,&H00000000,&H40000000,1,0,0,0,100,100,0,0,1,6,0,2,10,10,280,1
[Events]
; Each word starts at 50% scale, pops to 115%, settles at 100%
Dialogue: 0,0:00:00.00,0:00:00.50,WordPop,,0,0,0,,{\fscx50\fscy50\t(0,100,\fscx115\fscy115)\t(100,200,\fscx100\fscy100)}This
Dialogue: 0,0:00:00.30,0:00:00.80,WordPop,,0,0,0,,{\fscx50\fscy50\t(0,100,\fscx115\fscy115)\t(100,200,\fscx100\fscy100)}is
Dialogue: 0,0:00:00.50,0:00:01.20,WordPop,,0,0,0,,{\c&H0000FFFF&\fscx50\fscy50\t(0,100,\fscx120\fscy120)\t(100,250,\fscx100\fscy100)}VIRAL
スタッガー遅延付き単語ポップ
単語が時間を重ねながら順番に表示されます。
| 単語 | 開始 | 終了 | 前の単語からの遅延 |
|---|---|---|---|
| 単語1 | 0.00s | 0.50s | - |
| 単語2 | 0.25s | 0.75s | 250ms |
| 単語3 | 0.50s | 1.00s | 250ms |
| 単語4 | 0.75s | 1.25s | 250ms |
エラスティック単語ポップ(複数回のバウンス)
; More dramatic with multiple oscillations
; 40% → 130% → 90% → 105% → 100%
Dialogue: 0,0:00:00.00,0:00:01.00,Style,,0,0,0,,{\fscx40\fscy40\t(0,100,\fscx130\fscy130)\t(100,200,\fscx90\fscy90)\t(200,350,\fscx105\fscy105)\t(350,500,\fscx100\fscy100)}ELASTIC
動きを伴う単語ポップ
下からポップイン
; Word moves up while popping
Dialogue: 0,0:00:00.00,0:00:01.00,Style,,0,0,0,,{\move(540,1100,540,960,0,200)\fscx50\fscy50\t(0,100,\fscx115\fscy115)\t(100,200,\fscx100\fscy100)}BounceUp
横からポップイン
; Word slides in from right while popping
Dialogue: 0,0:00:00.00,0:00:01.00,Style,,0,0,0,,{\move(1200,960,540,960,0,250)\fscx50\fscy50\t(0,120,\fscx110\fscy110)\t(120,250,\fscx100\fscy100)}SlideIn
回転を伴うポップ
; Word rotates while appearing
Dialogue: 0,0:00:00.00,0:00:01.00,Style,,0,0,0,,{\frz-15\fscx50\fscy50\t(0,150,\frz0\fscx115\fscy115)\t(150,300,\fscx100\fscy100)}Twist
セクション3:スプリング物理アニメーション
スプリング物理の数式を使った、自然なバウンスです。
スプリングパラメーターガイド
| パラメーター | 低い値 | 高い値 | 効果 |
|---|---|---|---|
| 減衰 | 2-3 | 5-8 | バウンスが弱い → バウンスが強い |
| 周波数 | 8-10 rad/s | 15-20 rad/s | 遅い振動 → 速い振動 |
| 振幅 | 5-10% | 15-25% | 控えめ → 大胆 |
減衰比の解釈
- ζ < 0.5:非常に弾みが強く、複数回振動します
- ζ = 0.5-0.8:弾みのバランスが取れ、1~2回振動します
- ζ = 1.0:臨界減衰(オーバーシュートなし)
- ζ > 1.0:過減衰(動きが鈍くなります)
ASSでのスプリングバウンス
低減衰(弾みが強い)
; Multiple oscillations: 120% → 90% → 105% → 98% → 100%
{\fscx80\fscy80\t(0,100,\fscx120\fscy120)\t(100,200,\fscx90\fscy90)\t(200,300,\fscx105\fscy105)\t(300,400,\fscx98\fscy98)\t(400,500,\fscx100\fscy100)}Bouncy
中減衰(バランス型)
; Single overshoot: 115% → 95% → 100%
{\fscx80\fscy80\t(0,120,\fscx115\fscy115)\t(120,250,\fscx95\fscy95)\t(250,400,\fscx100\fscy100)}Balanced
高減衰(すばやく停止)
; Minimal overshoot: 110% → 100%
{\fscx80\fscy80\t(0,150,\fscx110\fscy110)\t(150,300,\fscx100\fscy100)}Quick
位置スプリング(垂直バウンス)
; Word bounces to final position
; Starts 100px below, overshoots 20px above, settles
{\pos(540,1060)\t(0,150,\pos(540,940))\t(150,250,\pos(540,980))\t(250,350,\pos(540,960))}Position Bounce
Section 4:シェイクと揺れのエフェクト
制御されたシェイクアニメーションで衝撃を強調します。
水平方向のシェイク
; Shake left-right (±5px) then settle
{\pos(540,960)\t(0,50,\pos(545,960))\t(50,100,\pos(535,960))\t(100,150,\pos(542,960))\t(150,200,\pos(538,960))\t(200,250,\pos(540,960))}SHAKE
減衰するインパクトシェイク
; Strong shake that decays: 10px → 6px → 3px → 0px
{\pos(540,960)\t(0,50,\pos(550,960))\t(50,100,\pos(530,960))\t(100,160,\pos(546,960))\t(160,220,\pos(534,960))\t(220,280,\pos(543,960))\t(280,350,\pos(540,960))}IMPACT
シェイク+スケールの組み合わせ
; Word shakes AND scales for maximum impact
{\fscx100\fscy100\pos(540,960)\t(0,50,\fscx120\fscy120\pos(545,960))\t(50,100,\fscx115\fscy115\pos(535,960))\t(100,200,\fscx100\fscy100\pos(540,960))}BOOM
シェイク振幅のガイドライン
| フォントサイズ | 最大水平振幅 | 最大垂直振幅 | 備考 |
|---|---|---|---|
| 64-72px | 8px | 6px | 読みやすい |
| 76-84px | 12px | 10px | 目立つ |
| 88-96px | 16px | 14px | 劇的 |
| 100+px | 20px | 18px | インパクト重視 |
ルール:読みやすさを保つため、シェイク振幅はフォントサイズの15%未満にします。
Section 5:タイプライターとリビールエフェクト
文字を1文字ずつ表示します。
文字のリビール(タイプライター)
各文字が順番に表示されます。
; Manual character timing (50ms per character)
Dialogue: 0,0:00:00.00,0:00:00.05,Style,,0,0,0,,H
Dialogue: 0,0:00:00.05,0:00:00.10,Style,,0,0,0,,He
Dialogue: 0,0:00:00.10,0:00:00.15,Style,,0,0,0,,Hel
Dialogue: 0,0:00:00.15,0:00:00.20,Style,,0,0,0,,Hell
Dialogue: 0,0:00:00.20,0:00:01.00,Style,,0,0,0,,Hello
タイプライター速度の目安
| 速度 | 1文字あたりのms | 1秒あたりの文字数 | 印象 |
|---|---|---|---|
| 速い | 30-40ms | 25-33 | 活気がある |
| 標準 | 50-70ms | 14-20 | 心地よい |
| 遅い | 80-120ms | 8-12 | 劇的 |
単語ごとのリビール
文字ごとのリビールよりも冗長さを抑えられます。
Dialogue: 0,0:00:00.00,0:00:00.30,Style,,0,0,0,,{\fad(100,0)}This
Dialogue: 0,0:00:00.30,0:00:00.60,Style,,0,0,0,,{\fad(100,0)}is
Dialogue: 0,0:00:00.60,0:00:00.90,Style,,0,0,0,,{\fad(100,0)}word
Dialogue: 0,0:00:00.90,0:00:01.20,Style,,0,0,0,,{\fad(100,0)}by
Dialogue: 0,0:00:01.20,0:00:02.00,Style,,0,0,0,,{\fad(100,0)}word
ポップ付きリビール
タイプライターのタイミングとポップアニメーションを組み合わせます。
; Word appears AND pops
Dialogue: 0,0:00:00.00,0:00:00.50,Style,,0,0,0,,{\fscx50\fscy50\t(0,100,\fscx110\fscy110)\t(100,200,\fscx100\fscy100)}This
Dialogue: 0,0:00:00.25,0:00:00.75,Style,,0,0,0,,{\fscx50\fscy50\t(0,100,\fscx110\fscy110)\t(100,200,\fscx100\fscy100)}is
Dialogue: 0,0:00:00.50,0:00:01.00,Style,,0,0,0,,{\fscx50\fscy50\t(0,100,\fscx110\fscy110)\t(100,200,\fscx100\fscy100)}great
Section 6:色の切り替えとマルチカラーのカラオケ
段階的な色の塗りつぶし(カラオケ)
[V4+ Styles]
; Primary = unfilled color, Secondary = filled color
Style: ColorKaraoke,Arial Black,80,&H00FFFFFF,&H0000FFFF,&H00000000,&H40000000,1,0,0,0,100,100,0,0,1,5,0,2,10,10,280,1
; White Yellow
[Events]
; \kf creates smooth left-to-right color fill
Dialogue: 0,0:00:00.00,0:00:03.00,ColorKaraoke,,0,0,0,,{\kf80}This {\kf60}fills {\kf100}smoothly
マルチカラーのグラデーションカラオケ
単語が複数の色に変化します。
; Yellow → Orange → Red progression
[V4+ Styles]
Style: GradientK,Impact,80,&H0000FFFF,&H000000FF,&H00000000,&H00000000,1,0,0,0,100,100,0,0,1,5,0,2,10,10,280,1
[Events]
; Use \t to add intermediate color during karaoke fill
Dialogue: 0,0:00:00.00,0:00:02.00,GradientK,,0,0,0,,{\kf80\t(0,400,\2c&H0000A5FF&)}Word1 {\kf100\t(0,500,\2c&H0000A5FF&)}Word2
; Orange midpoint
ハイライト時のカラーフラッシュ
; Word flashes bright color then returns
Dialogue: 0,0:00:00.00,0:00:02.00,Style,,0,0,0,,{\k80\c&HFFFFFF&\t(0,100,\c&H00FFFF&)\t(100,400,\c&HFFFFFF&)}Flash
Section 7:プラットフォーム別のキャプションスタイル
TikTokのバズスタイル
[V4+ Styles]
Style: TikTokViral,Arial Black,88,&H00FFFFFF,&H0000FFFF,&H00000000,&H40000000,1,0,0,0,100,100,0,0,1,6,0,2,10,10,320,1
[Events]
; Fast pop, high energy
Dialogue: 0,0:00:00.00,0:00:00.40,TikTokViral,,0,0,0,,{\fscx50\fscy50\t(0,80,\fscx118\fscy118)\t(80,160,\fscx100\fscy100)}THIS
Dialogue: 0,0:00:00.20,0:00:00.60,TikTokViral,,0,0,0,,{\fscx50\fscy50\t(0,80,\fscx118\fscy118)\t(80,160,\fscx100\fscy100)}IS
Dialogue: 0,0:00:00.40,0:00:01.00,TikTokViral,,0,0,0,,{\c&H00FFFF&\fscx50\fscy50\t(0,100,\fscx125\fscy125)\t(100,200,\fscx100\fscy100)}VIRAL
TikTokのパラメーター:
- フォントサイズ:84-96px
- アニメーション:合計160-200ms
- ポップのスケール:115-125%
- 単語間の遅延:150-250ms
- 画面上の単語数は最大3~5語
YouTube Shortsのプロフェッショナルスタイル
[V4+ Styles]
Style: ShortsPro,Montserrat,76,&H00FFFFFF,&H00FFFFFF,&H00333333,&H80000000,1,0,0,0,100,100,0,0,1,4,2,2,10,10,300,1
[Events]
; Smoother, more professional
Dialogue: 0,0:00:00.00,0:00:00.60,ShortsPro,,0,0,0,,{\fscx80\fscy80\t(0,150,\fscx108\fscy108)\t(150,300,\fscx100\fscy100)}This
Dialogue: 0,0:00:00.30,0:00:00.90,ShortsPro,,0,0,0,,{\fscx80\fscy80\t(0,150,\fscx108\fscy108)\t(150,300,\fscx100\fscy100)}is
Dialogue: 0,0:00:00.60,0:00:01.40,ShortsPro,,0,0,0,,{\fscx80\fscy80\t(0,180,\fscx112\fscy112)\t(180,350,\fscx100\fscy100)}professional
YouTube Shortsのパラメーター:
- フォントサイズ:72-84px
- アニメーション:合計250-400ms
- ポップのスケール:108-115%
- 単語間の遅延:250-350ms
- 画面上の単語数は最大4~6語
Instagram Reelsのトレンドスタイル
[V4+ Styles]
Style: ReelsTrend,Impact,82,&H00FFFFFF,&H00FF00FF,&H00000000,&H00000000,1,0,0,0,100,100,2,0,1,5,0,2,10,10,280,1
[Events]
; Stylish with slight rotation
Dialogue: 0,0:00:00.00,0:00:00.50,ReelsTrend,,0,0,0,,{\frz-5\fscx50\fscy50\t(0,120,\frz0\fscx115\fscy115)\t(120,250,\fscx100\fscy100)}Trendy
Dialogue: 0,0:00:00.25,0:00:00.75,ReelsTrend,,0,0,0,,{\frz5\fscx50\fscy50\t(0,120,\frz0\fscx115\fscy115)\t(120,250,\fscx100\fscy100)}Caption
Dialogue: 0,0:00:00.50,0:00:01.20,ReelsTrend,,0,0,0,,{\c&H00FF00FF&\fscx50\fscy50\t(0,150,\fscx120\fscy120)\t(150,300,\fscx100\fscy100)}Style
Section 8:キネティックキャプション生成用Pythonスクリプト
単語レベルの文字起こしからアニメーション付きASS字幕ファイルを生成する、完全なPython製キネティックキャプションジェネレーター(上記のワードグロウ、ワードポップ、スプリングバウンス、シェイク、リビール、カラオケのパターンをすべて組み合わせたもの)は、references/complete-generator.mdにあります。エフェクトごとのフィルターグラフを手作業で作成するのではなく、すぐに実行できるスクリプトが必要な場合は、このリファレンスを読み込んでください。
パルス/呼吸エフェクト
# Text pulses 72 ± 8 pixels at ~1.5 Hz
ffmpeg -i input.mp4 \
-vf "drawtext=text='SUBSCRIBE':fontsize='72+8*sin(t*9.42)':fontcolor=yellow:x=(w-tw)/2:y=h-150:borderw=3:bordercolor=black" \
output.mp4
# 9.42 rad/s = 1.5 Hz (1.5 * 2π = 9.42)
バウンスするテキストの表示
# Text bounces from below (spring physics)
ffmpeg -i input.mp4 \
-vf "drawtext=text='BOUNCE':fontsize=80:fontcolor=white:x=(w-tw)/2:y='(h-th)/2-30*exp(-t*3)*sin(t*15)':borderw=3:bordercolor=black:enable='gte(t,1)'" \
output.mp4
スケールポップ(フォントサイズのアニメーション)
# Text pops from small to normal
ffmpeg -i input.mp4 \
-vf "drawtext=text='POP':fontsize='if(lt(t,0.3),40+40*t/0.3,80)':fontcolor=white:x=(w-tw)/2:y=(h-th)/2:enable='gte(t,0.5)'" \
output.mp4
インパクト時のシェイク
# Text shakes with decaying amplitude
ffmpeg -i input.mp4 \
-vf "drawtext=text='IMPACT':fontsize=100:fontcolor=white:x='(w-tw)/2+15*exp(-t*4)*sin(t*50)':y='(h-th)/2+10*exp(-t*4)*cos(t*47)':enable='gte(t,2)'" \
output.mp4
単語を順番に表示
# Multiple drawtext filters for word-by-word reveal
ffmpeg -f lavfi -i "color=c=black:s=1080x1920:d=5" \
-vf "\
drawtext=text='THIS':fontsize=80:fontcolor=white:x=(w-tw)/2:y=h/2-80:alpha='if(lt(t,0.5),t*2,1)':enable='gte(t,0.5)',\
drawtext=text='IS':fontsize=80:fontcolor=white:x=(w-tw)/2:y=h/2:alpha='if(lt(t-1,0.5),(t-1)*2,1)':enable='gte(t,1)',\
drawtext=text='KINETIC':fontsize=80:fontcolor=yellow:x=(w-tw)/2:y=h/2+80:alpha='if(lt(t-1.5,0.5),(t-1.5)*2,1)':enable='gte(t,1.5)'" \
kinetic_reveal.mp4
Section 10:ベストプラクティスとトラブルシューティング
キネティックキャプションのベストプラクティス
- アニメーションを多用しない:すべての単語に最大限のエフェクトを付ける必要はありません
- 重要な単語を強調する:重要な単語には、より大きなスケールや長めの表示時間を使います
- テンポを合わせる:速い話し方には速いアニメーションを、ゆっくりした話し方には滑らかなアニメーションを使います
- プラットフォームに合わせて統一する:プラットフォームに適したスタイルを使います
- 読みやすさをテストする:アニメーションによって内容が理解しにくくならないようにします
強調の階層
| 単語の種類 | アニメーション | スケール | 表示時間 |
|---|---|---|---|
| フィラー語(a、the、is) | 最小限のポップ | 105-110% | 150-200ms |
| 通常の単語 | 標準のポップ | 110-115% | 200-250ms |
| 重要な単語 | 強調したポップ | 115-120% | 250-350ms |
| 強調する単語 | エラスティック/シェイク | 120-130% | 300-400ms |
よくある問題と解決策
タイミングのずれ
問題:アニメーションが音声のタイミングと一致しません 解決策:文単位ではなく、Whisperの単語レベルのタイムスタンプを使います
ジッターのあるアニメーション
問題:テキストがカクついて見えます 解決策:アニメーションの時間がフレーム時間の倍数になるようにします
- 30fps:33ms、67ms、100ms、133ms などを使用します
- 60fps:17ms、33ms、50ms、67ms などを使用します
テキストが煩雑すぎる
問題:アニメーションがコンテンツの妨げになります 解決策:拡大率を抑え(115% → 108%)、エフェクトをシンプルにします
モバイルでの視認性が低い
問題:スマートフォンでテキストが読みにくくなります 解決策:
- フォントサイズを大きくします(1080x1920の場合、最低80px)
- アウトライン/枠線を太くします(4-6px)
- セーフマージンを確保します(端から50px)
参照元
このスキルは、以下の調査を参考に強化されました:
- ASS Override Tags - Aegisub
- FFmpeg Drawtext Animation
- KFX-GUI Karaoke Template Builder
- CapCut Kinetic Typography Guide
- Kinetic Typography Complete Guide 2026
- OpusClip Text Animation Packs
- Spring Physics for UI Animations
- Easing Functions Reference
関連スキル
ffmpeg-karaoke-animated-text- カラオケの基礎viral-video-animated-captions- CapCut スタイルのキャプションffmpeg-animation-timing-reference- タイミングの計算式ffmpeg-captions-subtitles- 字幕の基礎viral-video-platform-specs- プラットフォームの要件