API RapidVideoMaker
REST APIを使用すると、PythonスクリプトやN8nワークフローなどあらゆるHTTPクライアントからビデオを処理できます。5つのモード: 動画を結合(複数MP4)、音声を編集(1 MP4 + 1 MP3)、動画を作成(1 JPG/PNG + 1 MP3)、ビデオオーバーレイ(2 MP4 ピクチャーインピクチャー)。処理は非同期です。
完全なワークフロー
すべての統合は同じ4ステップのシーケンスに従います:
POST /api/v1/render.phpmultipart/form-dataとして送信します。1枚のJPG/PNG画像 + 1つのMP3 + mode=image_to_video → 動画生成。1つのMP4 + 1つのMP3 → 音声編集。複数のMP4 → 結合。サーバーは一意のjob_idを返します。GET /api/v1/jobs.php?job_id=…queued → processing → ready(またはerror)と進みます。readyになると、レスポンスに使用可能なdownload_urlフィールドが含まれます。GET /api/download.php?job_id=…認証
すべてのリクエストにAPIトークンを含める必要があります。2つの形式が受け入れられます:
トークンはメンバーエリアで利用可能です — アカウントごとに1つのトークン、登録時に自動的に作成されます。
クォータ
各メンバーアカウントはWebインターフェースとAPI間で共有される1日20リクエストを持ちます。失敗したジョブはクォータを消費しません。カウンターはUTC深夜にリセットされます。
POSTレスポンスにはquota_usedとquota_remainingが含まれます。制限を超えると、サーバーは429で応答します。
キュー
一度に1つのジョブが処理されます。複数のジョブが同時に送信された場合、キューに入れられ順番に処理されます。待機中、ステータスレスポンスには以下が含まれます:
queue_position— キュー内のジョブの位置(1 = 次に処理)queue_total— 待機中のジョブの総数eta_minutes— 処理開始までの推定時間
/api/v1/jobs.phpエンドポイントはトークンあたり1分間に12回までの呼び出しを受け入れます。推奨:呼び出し間隔10秒。 利用可能なトランジション
直接マージにはtransition_type=none(デフォルト)を指定し、クリップ間のフェードには以下のいずれかの種類を使用します:
期間(transition_duration)は0.2〜2.0秒です。
エンドポイント
5つのモードをmodeフィールドで指定します(複数MP4でmodeを省略するとfusionを自動検出):
| 使用法 | APIモード | 必要なファイル | 説明 |
|---|---|---|---|
| 動画を結合 | fusion |
2〜20個のMP4ファイル | クリップは提供された順序で端から端へ組み立てられます。クリップ間にオプションのトランジションを設定できます。 |
| 音声を編集 | add_audio または mix_audio |
1つのMP4 + 1つのMP3 | 動画の音声トラックを置き換えまたは強化します。動画トラックは再エンコードされません。add_audio — 元の音声が削除され、MP3に完全に置き換えられます。mix_audio — 元の音声が保持され、MP3がオーバーレイされます。 |
| 動画を作成 | image_to_video |
1枚のJPG/PNG + 1つのMP3 | 静止画像と音声ファイルから動画を生成します。テキストオーバーレイ、フェード、解像度、fpsはoptionsフィールドで設定可能です。 |
| ビデオオーバーレイ | overlay_video |
2 MP4 | メイン動画の上に2本目の動画を重ねます。位置・サイズ・不透明度・音声はoptionsフィールドで設定できます。 |
| テキストをMP3に | text_to_mp3 |
(テキストのみ) | テキストを音声に変換してMP3ファイルを返します。ファイルのアップロード不要 — mode=text_to_mp3、text、lang をフォームフィールドとして送信してください。サイトの20言語すべてをサポート。 |
add_audioとmix_audioは1つのMP4 + 1つのMP3のみを受け入れます。image_to_videoは1枚のJPG/PNG + 1つのMP3のみを受け入れます。共通パラメータ(multipart/form-data)
| フィールド | 種類 | 必須 | 説明 |
|---|---|---|---|
| videos[] | File[] | はい | 処理するファイル。モードによって異なります:2〜20個のMP4、または1つのMP4 + 1つのMP3、または1枚の画像(JPG/PNG)+ 1つのMP3。1ファイルあたり最大500 MB。 |
| mode | string | * | image_to_video | add_audio | mix_audio。これら3つのモードには必須です。すべてのファイルがMP4の場合のみ無視されます(fusion)。 |
| order | JSON | fusionモードのみ — クリップの順序を定義するインデックスのJSON配列。 | |
| transition_type | string | fusionモードのみ。デフォルト:none。 | |
| transition_duration | float | fusionモードのみ。期間0.2〜2.0秒。デフォルト:0.5。 | |
| options | JSON | image_to_videoモードのみ — レンダリングパラメータのJSONオブジェクト。 | |
| callback_url | string | ジョブ完了時に呼び出される公開URL(http/https)。レスポンスにはwebhook_secretが含まれます。 |
optionsパラメータ — image_to_videoモード
すべてオプションです。指定されていない値 → ワーカーによってデフォルトが適用されます。
| キー | 種類 | デフォルト | 説明 |
|---|---|---|---|
| text | string | "" | オーバーレイとして表示されるテキスト。空 = テキストなし。最大500文字。 |
| font_size | int | 60 | ピクセル単位のフォントサイズ。範囲:10〜300。 |
| text_color | string | "white" | テキストカラー(例:white、yellow、#ffffff)。 |
| text_position | string | "center" | テキスト位置:center、top、bottom。 |
| box | bool | true | テキストの後ろの半透明の背景。 |
| box_color | string | "black@0.4" | FFmpeg形式の色 + 不透明度:color@opacity。 |
| fade_duration | float | 0.5 | 秒単位のフェードイン/アウト期間(0〜2)。0 = エフェクトなし。 |
| width | int | 1080 | ピクセル単位の動画幅(64〜3840、偶数に強制)。 |
| height | int | 1920 | ピクセル単位の動画高さ(64〜3840、偶数に強制)。 |
| fps | int | 24 | フレームレート(1〜60)。 |
| image_fit | string | "contain" | フレーミングモード:contain = 画像全体が表示される;cover = フレーム全体を埋めるようにズーム。 |
| bg_color | string | "black" | 画像がターゲット解像度を満たさない場合の背景色。 |
| enable_image_motion | bool | false | 写真アニメーションを有効にします。falseの場合、画像は静止したままです。 |
| image_motion_effect | string | "ken_burns" | アニメーションエフェクト。受け入れられる値:zoom_in、zoom_out、pan_left_to_right、ken_burnsなど。 |
| motion_intensity | float | 1.0 | 写真アニメーションの強度(0.25〜2.0)。ズーム振幅とパン速度を乗算します。 |
| text_effect | string | "none" | テキストオーバーレイアニメーション。受け入れられる値:none、fade_in、slide_up、slide_down、bounce。 |
| text_effect_intensity | float | 1.0 | テキストアニメーション強度(0.25〜2.0)。text_effectがnoneの場合は無視されます。 |
| text_border_width | int | 0 | ピクセル単位の文字の黒いアウトラインの太さ(0 = 無効)。 |
| text_mode | string | "static" | テキストの表示モード。static(デフォルト):最初のフレームからテキスト全体を表示。word_by_word:word_reveal_speedの速度で1語ずつ表示。text_effectとは同時使用不可:text_mode=word_by_wordの場合、text_effectは無視されます。 |
| word_reveal_speed | float | 1.5 | 1秒あたりの単語表示速度(0.3〜5.0、デフォルト1.5)。text_mode=word_by_word時のみ使用。OpenAI TTS同期の推奨値:2.0。 |
| word_anim | string | "none" | 各単語の表示アニメーション。none(デフォルト):即座に表示。fade:各単語が0.2秒のフェードで表示されクロスフェード。text_mode=word_by_wordのみ。 |
optionsパラメータ — overlay_videoモード
すべて任意。アップロード順が重要: 1ファイル目はメイン動画(背景)、2ファイル目はオーバーレイ(前景)。chroma_keyでオーバーレイのグリーンスクリーンを除去できます。
| キー | 種類 | デフォルト | 説明 |
|---|---|---|---|
| position | string | "bottom-right" | オーバーレイを配置するコーナー: top-left、top-right、bottom-left、bottom-right、またはcenter。 |
| scale | float | 0.30 | メイン動画幅に対するオーバーレイのサイズ比率。0.25 = 幅の25%。範囲: 0.05–1.0。 |
| opacity | float | 1.0 | オーバーレイの透明度。1.0 = 完全不透明、0.0 = 不可視。 |
| margin | int | 10 | オーバーレイとフレーム端の間のピクセル数。position=centerの場合は無視。範囲: 0–200。 |
| audio | string | "main" | 保持するオーディオ。main: メイン動画のみ。overlay: オーバーレイのみ。mix: 両方をミックス。 |
| chroma_key | bool | false | trueに設定するとオーバーレイの純緑色(#00FF00)の背景を除去します。グリーンスクリーンで撮影したウェブカメラや映像に有効です。 |
| chroma_similarity | float | 0.20 | グリーンスクリーンの許容範囲。低い = 厳密な一致。高い = より広い除去。推奨: デジタルグリーンは0.10–0.20、物理スクリーンは0.25–0.45。範囲: 0.01–0.60。 |
optionsパラメータ — 音声編集(mix_audio)
mode=mix_audioでのみ利用可能。add_audioでは無視されます。
| キー | 種類 | デフォルト | 説明 |
|---|---|---|---|
| mp3_volume | float | 1.0 | オーバーレイされたMP3の音量(0.0 = ミュート、1.0 = 元の音量、2.0 = 2倍)。 |
成功レスポンス(HTTP 200)
curlの例 — image_to_videoモード
curlの例 — 音声編集
curlの例 — overlay_videoモード
curlの例 — 動画結合
可能なステータス
| ステータス | 意味 | 追加フィールド |
|---|---|---|
| queued | キュー待ち、未処理 | queue_position, queue_total, eta_minutes |
| processing | FFmpeg処理中 | — |
| ready | 完了 — ファイル利用可能 | download_url, created_at, expires_at |
| error | 処理失敗 | error (message) |
ステータス別レスポンス
curlの例
共通パラメータ(multipart/form-data)
| apidocs_th_param | 種類 | デフォルト | apidocs_th_desc |
|---|---|---|---|
page | integer | 1 | Page number (starts at 1) |
limit | integer | 20 | Results per page (max 50, default 20) |
ステータス別レスポンス
1つ以上のソーシャルアカウントに、完了したジョブ(status=ready)を投稿します。トークンはメンバーアカウントのものである必要があります(管理者トークン不可)。
account_idはそのページに表示されます。共通パラメータ(multipart/form-data)
| apidocs_th_param | 種類 | apidocs_th_required | apidocs_th_desc |
|---|---|---|---|
job_id | string | apidocs_required | 完了した動画のジョブID(hex 32文字) |
publications | array | apidocs_required | 投稿オブジェクトの配列(最大10件) |
投稿オブジェクト
| apidocs_th_param | 種類 | apidocs_th_required | apidocs_th_desc |
|---|---|---|---|
account_id | integer | apidocs_required | 接続済みソーシャルアカウントのID — メンバーエリアの投稿ページで確認できます |
title | string | — | 動画タイトル(最大512文字) |
description | string | — | 動画説明(最大5,000文字) |
tags | string | — | カンマ区切りのタグ(最大1,024文字) |
visibility | string | — | public | private | unlisted — デフォルト: public |
tiktok_mode | string | — | draft | direct — TikTokのみ — デフォルト: direct |
tiktok_privacy | string | directモード | TikTokのみ — directモードで必須 |
allow_comment | boolean | — | TikTokのみ — コメントを許可 |
allow_duet | boolean | — | TikTokのみ — デュエットを許可 |
allow_stitch | boolean | — | TikTokのみ — ステッチを許可 |
your_brand | boolean | — | TikTokのみ — オーガニック広告コンテンツ(「自社ブランド」)。 |
branded_content | boolean | — | TikTokのみ — ブランドコンテンツの開示 |
tiktok_cover_ms | integer | — | TikTokのみ — カバーフレームのタイムスタンプ(ms、0~60,000、デフォルト1,000) |
ステータス別レスポンス
投稿ごとのエラーコード
| apidocs_th_code | 意味 |
|---|---|
job_not_ready | ジョブがまだ完了していません |
mode_not_supported | text_to_mp3ジョブは投稿できません |
account_not_found | アカウントが見つからないか接続されていません |
tiktok_privacy_required | directモードにはプライバシーレベルが必要です |
publication_failed | アップロード中にプロバイダーがエラーを返しました |
cURL例
最終MP4ファイルをストリームとして返します(Content-Type: video/mp4)。トークン不要。ステータスがreadyの場合のみ利用可能。
ファイルはジョブ完了後2時間保持され、その後削除されます。ステータスがreadyになったらすぐにダウンロードしてください。
オプションパラメータ
| パラメータ | 説明 |
|---|---|
| filename | ダウンロードするファイルの推奨名(例:my-video.mp4) |
curlの例
Webhooks
Webhookはポーリングの代替手段です:X秒ごとにステータスを確認する代わりに、URLを指定するとサーバーがジョブ完了時に自動的に通知します。
仕組み
callback_urlを/api/v1/render.phpへのPOSTに含めます- レスポンスには
webhook_secretが含まれます — 署名の検証のために保存してください - ジョブが
readyまたはerrorになると、サーバーはあなたのURLに署名されたJSONPOSTを送信します HMAC-SHA256(webhook_secret, raw_body)で署名を検証します
callback_urlは公開アクセス可能なURL(httpまたはhttps)である必要があります。プライベート、ループバック、予約済みIPアドレスはサーバー側でブロックされます。タイムアウト:10秒。 受信ペイロード
サーバーが送信するヘッダー
| ヘッダー | 値 |
|---|---|
| Content-Type | application/json |
| X-RVM-Signature | sha256=<hmac_hex> — 生のボディのHMAC-SHA256署名 |
| X-RVM-Job-Id | 関連するjob_id |
署名の検証
エラーコード
| HTTP | JSONコード | 原因 |
|---|---|---|
| 401 | unauthorized | トークンが不足、無効、または取り消されています |
| 400 | missing_files | ファイルが受信されていません |
| 400 | too_few_files | 送信されたファイルが2個未満です |
| 400 | too_many_files | 送信されたファイルが20個を超えています |
| 400 | invalid_mime | サポートされていないファイル — MP4、MP3、JPG/PNGのみ受け入れられます |
| 400 | wrong_file_count | ファイル数が選択したモードに一致しません |
| 400 | wrong_file_types | ファイルの種類が選択したモードに一致しません |
| 400 | invalid_file_combination | 指定されたモードなしのファイルの組み合わせがサポートされているモードに一致しません |
| 400 | invalid_options | optionsフィールドが有効なJSONではありません |
| 400 | invalid_option | options内の値が無効です |
| 400 | file_too_large | ファイルが500 MBを超えています |
| 400 | invalid_order | order配列が有効な順列ではありません |
| 400 | invalid_job_id | job_idの形式が正しくありません(32文字の16進数である必要があります) |
| 404 | job_not_found | ジョブが見つかりません — job_idが不明または存在したことがありません |
| 410 | job_expired | ジョブが期限切れ — 存在しましたが2時間の回復ウィンドウが過ぎています |
| 429 | quota_exceeded | 1日20件の成功ジョブ制限に達しました |
| 429 | rate_limited | /api/v1/jobs.phpで1分あたり12回を超える呼び出しがありました |
| 500 | server_error | 内部サーバーエラー |
統合例
各モードの例 — pip install requestsでrequestsをインストール。
共通設定
image_to_videoモード — 画像 + 音声 → 動画
音声編集
overlay_videoモード — ピクチャーインピクチャー
動画結合
ポーリング + ダウンロード(すべてのモードに共通)
n8nでの2つのアプローチ:ポーリング(ステータスループ)またはWebhook(サーバーがn8nを呼び出す)。Webhookを推奨。
アプローチA — Webhook(推奨)
ノード3つのみ、ループなし。
ノード1 — Webhookトリガー
ワークフロー入力としてWebhookノードを追加します(メソッドPOST)。
ノード2 — ジョブを作成(HTTPリクエスト)
| メソッド | POST |
| URL | https://rapidvideomaker.com/api/v1/render.php |
| 認証 | Header Auth — Authorization: Bearer rvm_… |
| ボディコンテンツタイプ | Form-Data Multipart |
| Body params | 各クリップのバイナリフィールドvideos[] + テキストフィールドcallback_url |
署名を検証するために、レスポンスのwebhook_secretをワークフロー変数に保存してください。
ノード3 — 結果を処理(Webhookがトリガーするワークフロー内)
n8nがサーバーのPOSTを受信すると、$json.statusはreadyまたはerrorです。
{{ $headers['x-rvm-signature'] }}とwebhook_secretからHMAC-SHA256を比較します。アプローチB — ポーリング(Webhookなし)
5ノード、10秒ごとのステータスループ。
ノード1 — ジョブを作成 — callback_urlなしで同じ設定。
ノード2 — 待機 — 10秒。
ノード3 — ステータスをポーリング(HTTPリクエストGET)
| URL | https://rapidvideomaker.com/api/v1/jobs.php |
| クエリパラメータ | job_id = {{ $('ノード1').item.json.job_id }} |
| 認証 | ヘッダー認証 — 同じトークン |
ノード4 — If:{{ $json.status }} === 'ready' → true:ノード5 / false:ノード2に戻る。
ノード5 — ダウンロード:{{ $json.download_url }}でHTTPリクエストGET。
ステップ1 — ジョブを作成(モードを選択)
ステップ2 — ポーリング
ステップ3 — ダウンロード
ベストプラクティス
- ポーリング頻度:
/api/v1/jobs.phpエンドポイントはトークンあたり12回/分に制限されています。呼び出し間隔は最低5秒。 - タイムアウト:クライアント側のタイムアウト(例:10分)を実装してください。
- 素早くダウンロード:ステータスが
readyになったらすぐにダウンロード。ジョブ完了後2時間で削除されます。 - クォータ管理:POSTレスポンスの
quota_remainingを確認してください。 - ネットワークエラー:ポーリング中にネットワークエラーが発生した場合、待機して再試行してください。