mcpField
F
ffmpeg-kinetic-captions

ffmpeg-kinetic-captions

github.com/josiahsiegelクリエイティブ・メディア59154 回インストール19 週間前に更新
リポジトリ

ffmpeg-kinetic-captions について

FFmpegとASS字幕で動くキャプションを作るクリエイター向けのリファレンススキルです。単語のハイライト、ポップ、揺れ、文字の表示例をまとめています。

主な機能

  1. 01ASS字幕アニメーションの例
  2. 02単語ごとのカラオケハイライト
  3. 03バウンスと拡大縮小効果
  4. 04揺れとテキスト表示効果
  5. 05タイミングとプラットフォームの参考情報

活用シーン

  1. 01短尺動画に単語強調キャプションを付ける
  2. 02ポップや揺れで重要語を強調する
  3. 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}Word1000ms段階的なハイライト
カラオケ+拡大{\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

プラットフォーム別の単語拡大タイミング

プラットフォーム拡大時間縮小時間最大スケールアニメーションスタイル
TikTok100-150ms100-150ms115-120%高速でメリハリのある動き
YouTube Shorts150-200ms150-200ms110-115%滑らかで読みやすい
Instagram Reels120-180ms120-180ms115-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
スタッガー遅延付き単語ポップ

単語が時間を重ねながら順番に表示されます。

単語開始終了前の単語からの遅延
単語10.00s0.50s-
単語20.25s0.75s250ms
単語30.50s1.00s250ms
単語40.75s1.25s250ms
エラスティック単語ポップ(複数回のバウンス)
; 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-35-8バウンスが弱い → バウンスが強い
周波数8-10 rad/s15-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-72px8px6px読みやすい
76-84px12px10px目立つ
88-96px16px14px劇的
100+px20px18pxインパクト重視

ルール:読みやすさを保つため、シェイク振幅はフォントサイズの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文字あたりのms1秒あたりの文字数印象
速い30-40ms25-33活気がある
標準50-70ms14-20心地よい
遅い80-120ms8-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:ベストプラクティスとトラブルシューティング

キネティックキャプションのベストプラクティス

  1. アニメーションを多用しない:すべての単語に最大限のエフェクトを付ける必要はありません
  2. 重要な単語を強調する:重要な単語には、より大きなスケールや長めの表示時間を使います
  3. テンポを合わせる:速い話し方には速いアニメーションを、ゆっくりした話し方には滑らかなアニメーションを使います
  4. プラットフォームに合わせて統一する:プラットフォームに適したスタイルを使います
  5. 読みやすさをテストする:アニメーションによって内容が理解しにくくならないようにします

強調の階層

単語の種類アニメーションスケール表示時間
フィラー語(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)

参照元

このスキルは、以下の調査を参考に強化されました:


関連スキル

  • ffmpeg-karaoke-animated-text - カラオケの基礎
  • viral-video-animated-captions - CapCut スタイルのキャプション
  • ffmpeg-animation-timing-reference - タイミングの計算式
  • ffmpeg-captions-subtitles - 字幕の基礎
  • viral-video-platform-specs - プラットフォームの要件

コメント