ffmpeg
FFmpegを使用した動画・音声の処理を行います。フォーマット変換、リサイズ、圧縮、音声抽出、Remotion向けアセットの準備などに活用できます。GIFからMP4への変換、動画のリサイズ、音声抽出、ファイル圧縮など、あらゆるメディア変換タスクで自動的に呼び出されます。
description の原文を見る
Video and audio processing with FFmpeg. Use for format conversion, resizing, compression, audio extraction, and preparing assets for Remotion. Triggers include converting GIF to MP4, resizing video, extracting audio, compressing files, or any media transformation task.
SKILL.md 本文
ビデオプロダクション向けFFmpeg
FFmpegはビデオ・オーディオ処理に必須のツールです。このスキルはRemotionビデオプロジェクト向けの一般的な操作をカバーしています。
クイックリファレンス
GIFからMP4へ(Remotion対応)
ffmpeg -i input.gif -movflags faststart -pix_fmt yuv420p \
-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" output.mp4
フラグの意味:
-movflags faststart- メタデータを先頭に移動してWebストリーミングに対応-pix_fmt yuv420p- ほとんどのプレイヤーとの互換性を確保scale=trunc(...)- 偶数の解像度に統一(ほとんどのコーデックで必須)
ビデオのリサイズ
# 1920x1080にリサイズ(アスペクト比を維持、黒帯を追加)
ffmpeg -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" output.mp4
# 1920x1080にリサイズ(トリミングして埋める)
ffmpeg -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=increase,crop=1920:1080" output.mp4
# 幅を指定して自動高さ計算
ffmpeg -i input.mp4 -vf "scale=1280:-2" output.mp4
ビデオの圧縮
# 良好な品質で小さいファイル(CRF 23がデフォルト、数値が低いほど高品質)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
# Webプレビュー向けの高度な圧縮
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset fast -c:a aac -b:a 96k output.mp4
# ファイルサイズを指定(例:60秒ビデオで約10MB = 約1.3Mbps)
ffmpeg -i input.mp4 -c:v libx264 -b:v 1300k -c:a aac -b:a 128k output.mp4
音声の抽出
# MP3に抽出
ffmpeg -i input.mp4 -vn -acodec libmp3lame -q:a 2 output.mp3
# AACに抽出
ffmpeg -i input.mp4 -vn -acodec aac -b:a 192k output.m4a
# WAV形式で抽出(無圧縮)
ffmpeg -i input.mp4 -vn output.wav
オーディオフォーマットの変換
# M4AからMP3へ(ElevenLabsボイスサンプル向け)
ffmpeg -i input.m4a -codec:a libmp3lame -qscale:a 2 output.mp3
# WAVからMP3へ
ffmpeg -i input.wav -codec:a libmp3lame -b:a 192k output.mp3
# ボリュームを調整
ffmpeg -i input.mp3 -filter:a "volume=1.5" output.mp3
ビデオのトリム・カット
# タイムスタンプから期間指定でカット(推奨 - 安定している)
ffmpeg -i input.mp4 -ss 00:00:30 -t 00:00:15 -c:v libx264 -c:a aac output.mp4
# タイムスタンプ間でカット
ffmpeg -i input.mp4 -ss 00:00:30 -to 00:00:45 -c:v libx264 -c:a aac output.mp4
# ストリームコピー(高速だがカット箇所でフレームが失われる可能性)
# ソースにキーフレームが頻繁に存在する場合のみ使用
ffmpeg -i input.mp4 -ss 00:00:30 -t 00:00:15 -c copy output.mp4
注意: トリミングは再エンコーディングを推奨します。ストリームコピー(-c copy)は、シークポイントがキーフレームと整合しないと、静かにビデオをドロップすることがあります。
再生速度の変更
# 2倍速(ビデオとオーディオ)
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4
# 0.5倍速(スローモーション)
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" output.mp4
# ビデオのみ(音声なし)
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" -an output.mp4
ビデオの連結
# ファイルリストを作成
echo "file 'clip1.mp4'" > list.txt
echo "file 'clip2.mp4'" >> list.txt
echo "file 'clip3.mp4'" >> list.txt
# 連結(同じコーデック・解像度)
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
# 連結して再エンコード(異なるソース)
ffmpeg -f concat -safe 0 -i list.txt -c:v libx264 -c:a aac output.mp4
フェードイン・フェードアウト
# 最初の1秒でフェードイン、最後の1秒でフェードアウト(30fps動画)
ffmpeg -i input.mp4 -vf "fade=t=in:st=0:d=1,fade=t=out:st=9:d=1" -c:a copy output.mp4
# オーディオフェード
ffmpeg -i input.mp4 -af "afade=t=in:st=0:d=1,afade=t=out:st=9:d=1" -c:v copy output.mp4
ビデオ情報の取得
# 長さ、解像度、コーデック情報
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
# 詳細情報
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
Remotion固有のパターン
Remotion向けビデオ速度調整
FFmpegとRemotionのplaybackRateの使い分け:
| シナリオ | FFmpegを使用 | Remotionを使用 |
|---|---|---|
| 一定速度(1.5倍、2倍) | どちらでも可 | ✅ シンプル |
| 極端な速度(4倍以上または0.25倍以下) | ✅ より安定 | 問題が生じる可能性 |
| 可変速度(時間とともに加速) | ✅ 前処理 | 複雑な回避方法が必要 |
| 完璧なオーディオ同期が必要 | ✅ 保証済み | 通常は問題ない |
| デモがボイスオーバータイミングに合わせる必要 | ✅ 事前計算 | 実行時調整 |
Remotion制限: playbackRateは定数でなければなりません。playbackRate={interpolate(frame, [0, 100], [1, 5])}のような動的補間はRemotionがフレームを独立して評価するため、正しく機能しません。
# デモの速度を上げてシーンに合わせる(例:60秒デモを20秒に = 3倍速)
ffmpeg -i demo-raw.mp4 \
-filter_complex "[0:v]setpts=0.333*PTS[v];[0:a]atempo=3.0[a]" \
-map "[v]" -map "[a]" \
public/demos/demo-fast.mp4
# 強調用スローモーション(0.5倍速)
ffmpeg -i action.mp4 \
-filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]" \
-map "[v]" -map "[a]" \
public/demos/action-slow.mp4
# 音声なしで速度を上げる(スクリーン録画で一般的)
ffmpeg -i demo.mp4 -filter:v "setpts=0.5*PTS" -an public/demos/demo-2x.mp4
# タイムラプス効果(10倍速、音声削除)
ffmpeg -i long-demo.mp4 -filter:v "setpts=0.1*PTS" -an public/demos/timelapse.mp4
速度係数の計算:
- ビデオのX秒をシーンのY秒に収めるには:
speed = X / Y - setptsの乗数 =
1 / speed(例:3倍速 = setpts=0.333*PTS) - atempo値 =
speed(例:3倍速 = atempo=3.0)
極端な速度(2倍以上の音声): atemoフィルタをチェーン(各フィルタは0.5~2.0の範囲に制限):
# 4倍速オーディオ
-filter_complex "[0:a]atempo=2.0,atempo=2.0[a]"
# 8倍速オーディオ
-filter_complex "[0:a]atempo=2.0,atempo=2.0,atempo=2.0[a]"
デモ録画をRemotion용に準備
# 標準1080p、30fps、Remotion対応
ffmpeg -i raw-recording.mp4 \
-vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,fps=30" \
-c:v libx264 -crf 18 -preset slow \
-c:a aac -b:a 192k \
-movflags faststart \
public/demos/demo.mp4
スクリーン録画をRemotionアセットに
# iPhone/iPad録画から(通常60fps、解像度は不定)
ffmpeg -i iphone-recording.mov \
-vf "scale=1920:-2,fps=30" \
-c:v libx264 -crf 20 \
-an \
public/demos/mobile-demo.mp4
GIFの一括変換
for f in assets/*.gif; do
ffmpeg -i "$f" -movflags faststart -pix_fmt yuv420p \
-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" \
"public/demos/$(basename "$f" .gif).mp4"
done
よくある問題
「高さが2で割り切れない」
スケールフィルタを追加:-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2"
ビデオがブラウザで再生されない
以下を使用:-movflags faststart -pix_fmt yuv420p -c:v libx264
速度変更後に音声がズレている
filter_complexをatemoで使用:-filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]"
ファイルが大きすぎる
CRFを増やす(23→28)または解像度を下げる
品質ガイドライン
| 用途 | CRF | Preset | 備考 |
|---|---|---|---|
| アーカイブ・マスター | 18 | slow | 最高品質、ファイルは大 |
| 本番 | 20-22 | medium | バランスが良い |
| Web・プレビュー | 23-25 | fast | ファイルサイズが小 |
| ドラフト・高速 | 28以上 | veryfast | エンコード高速 |
プラットフォーム別出力最適化
Remotionがビデオをレンダリングした後(通常out/video.mp4)、FFmpegを使用して各配布プラットフォーム向けに最適化します。
ワークフロー統合
Remotionレンダリング(マスター) FFmpeg最適化 プラットフォームアップロード
↓ ↓ ↓
out/video.mp4 ────────→ out/video-youtube.mp4 ───→ YouTube
────────→ out/video-twitter.mp4 ───→ Twitter/X
────────→ out/video-linkedin.mp4 ───→ LinkedIn
────────→ out/video-web.mp4 ───→ ウェブサイト埋め込み
YouTube(推奨設定)
YouTubeはすべてを再エンコードするため、高品質をアップロード:
# YouTube最適化(1080p)
ffmpeg -i out/video.mp4 \
-c:v libx264 -preset slow -crf 18 \
-profile:v high -level 4.0 \
-bf 2 -g 30 \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
out/video-youtube.mp4
# YouTubeショート(縦向き1080x1920)
ffmpeg -i out/video.mp4 \
-vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2" \
-c:v libx264 -crf 18 -c:a aac -b:a 192k \
out/video-shorts.mp4
Twitter/X
Twitterは厳密な制限があります:最大140秒、512MB、1920x1200:
# Twitter最適化(15MB以下でアップロード高速)
ffmpeg -i out/video.mp4 \
-c:v libx264 -preset medium -crf 24 \
-profile:v main -level 3.1 \
-vf "scale='min(1280,iw)':'min(720,ih)':force_original_aspect_ratio=decrease" \
-c:a aac -b:a 128k -ar 44100 \
-movflags +faststart \
-fs 15M \
out/video-twitter.mp4
# ファイルサイズと長さを確認
ffprobe -v error -show_entries format=duration,size -of csv=p=0 out/video-twitter.mp4
LinkedInはAAC音声のMP4を推奨、最大10分:
# LinkedIn最適化
ffmpeg -i out/video.mp4 \
-c:v libx264 -preset medium -crf 22 \
-profile:v main \
-vf "scale='min(1920,iw)':'min(1080,ih)':force_original_aspect_ratio=decrease" \
-c:a aac -b:a 192k -ar 48000 \
-movflags +faststart \
out/video-linkedin.mp4
ウェブサイト・埋め込み(高速読み込み向けに最適化)
# Web最適化MP4(ファイルサイズ小、プログレッシブ読み込み)
ffmpeg -i out/video.mp4 \
-c:v libx264 -preset medium -crf 26 \
-profile:v baseline -level 3.0 \
-vf "scale=1280:720" \
-c:a aac -b:a 128k \
-movflags +faststart \
out/video-web.mp4
# WebM代替形式(圧縮率が良い、ブラウザ対応が広い)
ffmpeg -i out/video.mp4 \
-c:v libvpx-vp9 -crf 30 -b:v 0 \
-vf "scale=1280:720" \
-c:a libopus -b:a 128k \
-deadline good \
out/video-web.webm
GIF(プレビュー・サムネイル用)
# 高品質GIF(最初の5秒)
ffmpeg -i out/video.mp4 -t 5 \
-vf "fps=15,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \
out/preview.gif
# ファイルサイズが小さいGIF
ffmpeg -i out/video.mp4 -t 3 \
-vf "fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \
out/preview-small.gif
プラットフォーム要件クイックリファレンス
| プラットフォーム | 最大解像度 | 最大サイズ | 最大長 | オーディオ |
|---|---|---|---|---|
| YouTube | 8K | 256GB | 12時間 | AAC 48kHz |
| Twitter/X | 1920x1200 | 512MB | 140秒 | AAC 44.1kHz |
| 4096x2304 | 5GB | 10分 | AAC 48kHz | |
| Instagramフィード | 1080x1350 | 4GB | 60秒 | AAC 48kHz |
| Instagramリール | 1080x1920 | 4GB | 90秒 | AAC 48kHz |
| TikTok | 1080x1920 | 287MB | 10分 | AAC |
すべてのプラットフォーム向け一括エクスポート
#!/bin/bash
# 保存方法:export-all-platforms.sh
INPUT="out/video.mp4"
# YouTube(高品質)
ffmpeg -i "$INPUT" -c:v libx264 -preset slow -crf 18 \
-c:a aac -b:a 192k -movflags +faststart \
out/video-youtube.mp4
# Twitter(圧縮済み)
ffmpeg -i "$INPUT" -c:v libx264 -crf 24 \
-vf "scale='min(1280,iw)':'-2'" \
-c:a aac -b:a 128k -movflags +faststart \
out/video-twitter.mp4
# LinkedIn
ffmpeg -i "$INPUT" -c:v libx264 -crf 22 \
-c:a aac -b:a 192k -movflags +faststart \
out/video-linkedin.mp4
# Web埋め込み(小)
ffmpeg -i "$INPUT" -c:v libx264 -crf 26 \
-vf "scale=1280:720" \
-c:a aac -b:a 128k -movflags +faststart \
out/video-web.mp4
echo "エクスポート完了:"
ls -lh out/video-*.mp4
エラーハンドリング
ビデオ処理時の一般的なエラーと対処方法:
# FFmpegが成功したかを確認
ffmpeg -i input.mp4 -c:v libx264 output.mp4 && echo "成功" || echo "失敗:入力ファイルを確認"
# 出力ファイルが再生可能かを検証
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of csv=p=0 output.mp4
# 詳細なエラー情報を取得
ffmpeg -v error -i input.mp4 -f null - 2>&1 | head -20
よくあるエラーの対処
| エラー | 原因 | 対処 |
|---|---|---|
| 「ファイルが見つからない」 | 入力パスが間違っている | パスを確認、スペースを含む場合はクォーテーション |
| 「無効なデータ」 | 入力が破損している | ソースを再ダウンロード、または再録画 |
| 「高さが2で割り切れない」 | 奇数の解像度 | truncを使用したスケールフィルタを追加 |
| 「エンコーダが見つからない」 | コーデックが不足している | 完全なコーデック付きFFmpegをインストール |
| 出力が0バイト | 静かなエラー | ffmpegの完全な出力を確認 |
フィードバック・貢献
このスキルに改善の余地がある場合、または情報が不足している場合:
- コマンドが不足? 必要だった処理について説明してください
- エラーを見つけた? 何が間違っているか教えてください
- 貢献したい? 以下のお手伝いができます:
- このスキルを改善で更新
- github.com/digitalsamba/claude-code-video-toolkitにPRを作成
「improve this skill」と言うだけで、.claude/skills/ffmpeg/SKILL.mdの更新方法をガイドします。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- digitalsamba
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/digitalsamba/claude-code-video-toolkit / ライセンス: MIT
関連スキル
seo-maps
ローカルSEO向けのマップインテリジェンス機能です。ジオグリッドのランク追跡、APIを通じたGBPプロフィール監査、Google・Tripadvisor・Trustpilotなど複数プラットフォームのレビュー分析、Google・Bing・Apple・OSM間のNAP(名前・住所・電話番号)検証、競合他社の半径マッピング、APIデータからのLocalBusinessスキーマ生成が可能です。3段階の機能レベルで対応でき、無料版(Overpass + Geoapify)、DataForSEO(フル機能)、DataForSEO + Google(最大カバレッジ)から選択できます。「maps」「geo-grid」「rank tracking」「GBP audit」「review velocity」「competitor radius」「maps analysis」「local rank tracking」「Share of Local Voice」「SoLV」などのキーワードで利用できます。
seo-content-brief
セクションごとの文字数、競合スコアリング、キーワード密度ガイダンス、ページタイプテンプレートを含む競争力のあるSEOコンテンツブリーフを生成します。新規ページのブリーフと既存ページの改善ブリーフの両方に対応しています。ユーザーが「コンテンツブリーフ」「ブリーフを作成」「コンテンツアウトライン」「ブログブリーフ」「サービスページブリーフ」「ブリーフ〜」「ライティングブリーフ」「コンテンツプラン」「アウトライン〜」などと言った場合に使用します。
rakuten-seo
楽天市場の商品名・キャッチコピーをSEO最適化するスキル。「楽天SEO」「商品名最適化」「楽天の商品名」「キャッチコピー」「楽天のタイトル」「商品名を直して」「楽天検索対策」など、楽天市場の商品名やキャッチコピーの作成・改善・チェックに関するリクエストで必ずこのスキルを使う。既存の商品名の改善も、ゼロからの作成も対応。あらゆるジャンル(食品・ファッション・化粧品・家電・サプリ・インテリア・ベビー・ペット・業務用など)に対応。 【ALSEL独自スキル】株式会社ALSEL が、19年・5,000社超の EC 支援で得たノウハウをもとに開発したオリジナルスキルです。
amazon-seo-jp
Amazon.co.jp商品ページのSEO分析・最適化・自動採点スキル v2.0。 COSMO/Rufus/A10アルゴリズムに基づく採点。セラーセントラル出品レポート(.xlsm)を入力すると、 商品タイトル・箇条書き・検索キーワード・商品説明文を100点満点で採点し、 4項目すべての改善案を日本語で出力する。 トリガー: 「Amazon SEO」「商品ページ採点」「Amazon最適化」 「リスティング改善」「Amazon商品名」「箇条書き改善」 「COSMO対応」「Rufus最適化」「Amazon タイトル」 【ALSEL独自スキル】株式会社ALSEL が、19年・5,000社超の EC 支援で得たノウハウをもとに開発したオリジナルスキルです。
rakuten-bulk-control-csv
楽天RMSの一括登録/一括除外/一括更新用CSV(コントロールカラム,商品管理番号 の2列フォーマット)を作成するスキル。商品DL CSV・商品管理画面のコピペ・Excel・PDFなどから商品管理番号を抽出し、Shift-JIS+LF改行で出力する。「一括除外リスト作って」「楽天の除外CSV」「コントロールカラムnで」「2800円以下の商品をdで」「在庫0の商品を一括削除」「商品管理番号抜いてshift-jsで」「このフォーマットで」など、楽天RMSの商品一括処理用CSVを作るタスクで必ずこのスキルを使う。コントロールカラム値(n=新規/d=削除/u=更新)と抽出条件(全件・価格・在庫・販売状態など)をユーザー指示に応じて柔軟に切り替える。 【ALSEL独自スキル】株式会社ALSEL が、19年・5,000社超の EC 支援で得たノウハウをもとに開発したオリジナルスキルです。
amazon-a-plus-content-brief
Amazon A+コンテンツの構成・モジュール選定・画像指示・比較表・FAQを設計するスキル。「A+コンテンツ作って」「Aプラス構成」「ブランドストーリー」「比較表つきA+」「A+モジュール選定」「Amazonのページに画像入れたい」「A+のヘッダー画像」「A+コンテンツマネージャー」など、Amazon A+コンテンツの企画・設計・改善のリクエストで必ずこのスキルを使う。ベーシック17モジュール/Premium追加機能/画像サイズ規定/文字数目安/審査リジェクト要因を踏まえて、デザイナーに渡せるブリーフ形式で出力。あらゆるジャンル(家電・コスメ・食品・アパレル・日用品・ベビー・ペット等)に対応。※ブランドストア(マルチページ)の設計は別スキル `amazon-brand-store-planner`、タイトル・bullet改善は `amazon-title-bullet-rewriter-jp`、メイン画像のチェックは `amazon-main-image-checker`。 【ALSEL独自スキル】株式会社ALSEL が、19年・5,000社超の EC 支援で得たノウハウをもとに開発したオリジナルスキルです。