🚀 VibeStudio
VibeStudioは、AIアシスタント向けに設計された高性能なヘッドレスビデオ編集サーバーです。Model Context Protocol (MCP) とFFmpegをベースに、Bashで完全に構築されており、ランタイム依存関係が一切なく、高度なFFmpeg機能を提供します。
💡 重要な注意
音量をオンにしてください!
https://github.com/user-attachments/assets/7fe093ff-0abf-43af-b2fa-34a64ebe1fe8
VibeStudioは、ビデオ、オーディオなどの強力なメディア編集ツールを軽量なローカルシェルコマンドとして公開しています。これにより、信頼性が高く、高速で、トレーサブルなツールベースのワークフローを必要とするAIエージェントに最適です。
🚀 クイックスタート
VibeStudioは、AIアシスタントに最適化されたビデオ編集サーバーです。以下の手順で簡単にセットアップできます。
✨ 主な機能
ビデオ操作
- 形式変換:ビデオ形式(MP4、AVI、MKV、MOVなど)間の変換
- ビデオトリミング:フレーム精度でビデオの特定部分を抽出
- ビデオ結合:複数のビデオをシームレスに連結
- ビデオリサイズ:任意のプラットフォームに合わせてビデオのサイズを変更
- 字幕追加:字幕を直接ビデオに焼き込む
- フレーム抽出:ビデオフレームを高品質な画像としてエクスポート
- 画像からビデオ作成:画像シーケンスからビデオを作成
- ビデオフィルター:プロフェッショナルなフィルター(ブラー、シャープネス、回転、色補正)を適用
- サムネイル生成:自動的にプレビュー画像を作成
オーディオ操作
- オーディオ抽出:任意の形式のビデオからオーディオトラックを抽出
- 形式変換:オーディオ形式(MP3、AAC、WAV、FLAC、OGG)間の変換
- オーディオトリミング:オーディオファイルを正確にカット
- 音量正規化:再生時の音量レベルを一定にする
分析ツール
- メディア情報取得:任意のメディアファイルの詳細なメタデータを取得
📦 インストール
前提条件
- Bashシェル(バージョン4.0以上)
- jq(JSON処理用)
brew install jq
sudo apt-get install jq
sudo yum install jq
- FFmpeg(一般的なコーデック付き)
brew install ffmpeg
sudo apt-get install ffmpeg
sudo yum install ffmpeg
インストール手順
- リポジトリをクローン
git clone https://github.com/wizenheimer/vibestudio.git
cd vibestudio
- スクリプトを実行可能にする
chmod +x ffmpegserver.sh mcpserver_core.sh
💻 使用例
基本的な使用法
例1:ビデオの変換とリサイズ
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "convert_video", "arguments": {"input_file": "movie.avi", "output_file": "movie_temp.mp4"}}, "id": 1}' | ./ffmpegserver.sh
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "resize_video", "arguments": {"input_file": "movie_temp.mp4", "output_file": "movie_720p.mp4", "width": 1280, "height": 720}}, "id": 2}' | ./ffmpegserver.sh
例2:オーディオの抽出と正規化
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "extract_audio", "arguments": {"input_file": "video.mp4", "output_file": "audio_raw.mp3"}}, "id": 1}' | ./ffmpegserver.sh
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "normalize_audio", "arguments": {"input_file": "audio_raw.mp3", "output_file": "audio_normalized.mp3"}}, "id": 2}' | ./ffmpegserver.sh
例3:ビデオからGIFを作成
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "extract_frames", "arguments": {"input_file": "video.mp4", "output_pattern": "frame_%04d.png", "fps": "10", "start_time": "00:00:05", "duration": "00:00:03"}}, "id": 1}' | ./ffmpegserver.sh
📚 ドキュメント
利用可能なツール
get_media_info
メディアファイルの詳細情報を取得します。
{
"input_file": "path/to/media.mp4"
}
convert_video
ビデオを異なる形式またはコーデックに変換します。
{
"input_file": "input.avi",
"output_file": "output.mp4",
"codec": "h264"
}
extract_audio
ビデオからオーディオトラックを抽出します。
{
"input_file": "video.mp4",
"output_file": "audio.mp3",
"audio_format": "mp3"
}
trim_media
ビデオまたはオーディオを指定された期間でトリミングします。
{
"input_file": "input.mp4",
"output_file": "output.mp4",
"start_time": "00:01:30",
"duration": "00:00:30"
}
merge_videos
複数のビデオを連結します。
{
"input_files": ["video1.mp4", "video2.mp4", "video3.mp4"],
"output_file": "merged.mp4"
}
add_subtitles
ビデオに字幕を焼き込みます。
{
"input_file": "video.mp4",
"subtitle_file": "subtitles.srt",
"output_file": "video_with_subs.mp4"
}
resize_video
ビデオのサイズを変更します。
{
"input_file": "input.mp4",
"output_file": "output.mp4",
"width": 1280,
"height": 720
}
extract_frames
ビデオのフレームを画像として抽出します。
{
"input_file": "video.mp4",
"output_pattern": "frame_%04d.png",
"fps": "1",
"start_time": "00:00:10",
"duration": "00:00:05"
}
create_video_from_images
画像シーケンスからビデオを作成します。
{
"input_pattern": "frame_%04d.png",
"output_file": "video.mp4",
"fps": "30",
"duration": "10"
}
apply_video_filter
FFmpegフィルターを適用します。
{
"input_file": "input.mp4",
"output_file": "output.mp4",
"filter": "hflip,blur=5"
}
generate_thumbnail
ビデオからサムネイルを作成します。
{
"input_file": "video.mp4",
"output_file": "thumbnail.jpg",
"time": "00:00:05"
}
convert_audio
オーディオ形式を変換します。
{
"input_file": "input.wav",
"output_file": "output.mp3",
"audio_format": "mp3",
"bitrate": "320k"
}
normalize_audio
オーディオの音量を正規化します。
{
"input_file": "input.mp3",
"output_file": "normalized.mp3"
}
VS Codeでの使用方法
- VS Codeのsettings.jsonを更新
{
"mcp": {
"servers": {
"vibestudio": {
"type": "stdio",
"command": "/absolute/path/to/vibestudio-mcp/ffmpegserver.sh",
"args": [],
"env": {}
}
}
}
}
- GitHub Copilot Chatで使用
/mcp vibestudio get_media_info {"input_file": "video.mp4"}
/mcp vibestudio convert_video {"input_file": "input.avi", "output_file": "output.mp4"}
一般的なビデオフィルター
apply_video_filterツールで使用できる便利なフィルターは以下の通りです。
- ブラー:
"blur=10"(値: 0 - 100)
- シャープネス:
"unsharp=5:5:1.0"
- 水平反転:
"hflip"
- 垂直反転:
"vflip"
- 90°回転:
"transpose=1"
- 180°回転:
"transpose=2,transpose=2"
- グレースケール:
"colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3"
- 明るさ:
"eq=brightness=0.1"(-1.0から1.0)
- コントラスト:
"eq=contrast=1.5"(0.0から2.0)
- フェードイン:
"fade=in:0:30"(30フレームでフェードイン)
- 2倍速:
"setpts=0.5*PTS"
- 2倍低速:
"setpts=2.0*PTS"
🔧 技術詳細
トラブルシューティング
一般的な問題と解決策
- "mcpserver_core.sh: No such file or directory"
- 解決策:MCP Bash SDKリポジトリからmcpserver_core.shをダウンロードします。
- 実行:
curl -O https://raw.githubusercontent.com/wizenheimer/vibestudio/main/mcpserver_core.sh
- "jq: command not found"
- 解決策:パッケージマネージャーを使用してjqをインストールします。
- macOS:
brew install jq
- Linux:
sudo apt-get install jq
- "ffmpeg: command not found"
- 解決策:FFmpegをインストールします。
- macOS:
brew install ffmpeg
- Linux:
sudo apt-get install ffmpeg
- Permission denied errors
- 解決策:スクリプトを実行可能にします。
- 実行:
chmod +x ffmpegserver.sh mcpserver_core.sh
- JSON parsing errors
- ログを確認:
tail -f logs/ffmpegserver.log
- JSONを検証:
echo '{"your": "json"}' | jq .
デバッグモード
ffmpegserver.shのログレベルを変更するか、完全なログを確認することで、詳細なログを有効にします。
tail -f logs/ffmpegserver.log
tail -n 50 logs/ffmpegserver.log
健全性テスト
VibeStudioが正しくインストールされていることを確認するために、以下のテストを実行します。
テスト1: コア依存関係の確認
jq --version
ffmpeg -version
ls -la mcpserver_core.sh
テスト2: MCPサーバーの初期化テスト
echo '{"jsonrpc": "2.0", "method": "initialize", "params": {"clientInfo": {"name": "test"}}, "id": 1}' | ./ffmpegserver.sh | jq
テスト3: 利用可能なツールの一覧表示
echo '{"jsonrpc": "2.0", "method": "tools/list", "id": 2}' | ./ffmpegserver.sh | jq
テスト4: メディア情報ツールのテスト(サンプルファイルを使用)
ffmpeg -f lavfi -i testsrc=duration=1:size=320x240:rate=30 -f lavfi -i sine=frequency=1000:duration=1 test_video.mp4
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "get_media_info", "arguments": {"input_file": "test_video.mp4"}}, "id": 3}' | ./ffmpegserver.sh
テスト5: エラーハンドリングのテスト
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "get_media_info", "arguments": {"input_file": "non_existent.mp4"}}, "id": 4}' | ./ffmpegserver.sh
echo '{"jsonrpc": "2.0", "method": "invalid_method", "id": 5}' | ./ffmpegserver.sh
テスト6: ログの確認
tail -n 20 logs/ffmpegserver.log
テスト7: 完全統合テスト
ffmpeg -f lavfi -i testsrc=duration=3:size=640x480:rate=30 -f lavfi -i sine=frequency=1000:duration=3 test_source.mp4
echo '{"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "trim_media", "arguments": {"input_file": "test_source.mp4", "output_file": "test_trimmed.mp4", "start_time": "00:00:01", "duration": "00:00:01"}}, "id": 6}' | ./ffmpegserver.sh
ls -la test_trimmed.mp4
rm -f test_video.mp4 test_source.mp4 test_trimmed.mp4
必要なファイル構造
VibeStudioのインストールには、以下の構造が必要です。
vibestudio-mcp/
├── mcpserver_core.sh # コアMCPサーバー(MCP Bash SDKから)
├── ffmpegserver.sh # VibeStudioのメインスクリプト
├── assets/
│ ├── ffmpegserver_config.json
│ └── ffmpegserver_tools.json
└── logs/
└── ffmpegserver.log # 自動的に作成されます
制限事項
- リアルタイムストリーミングはサポートされていません。
- シーケンシャルな処理のみ(並列操作はできません)。
- ファイルパスはスクリプトの場所からアクセス可能である必要があります。
- 大きなファイルの処理には相当な時間がかかる場合があります。
- 一部の高度なFFmpeg機能には、手動でのフィルター構築が必要です。
関連リンク
コントリビューション
VibeStudioはコントリビューションを歓迎します!問題や機能改善のリクエストを自由に送信してください。
📄 ライセンス
このプロジェクトは、元のMCP Server Bash SDKに従い、MITライセンスの下でライセンスされています。