RapidVideoMaker
Hesap oluştur

API RapidVideoMaker

The REST API lets you process video files from any HTTP client — Python scripts, n8n workflows, third-party tools. Five modes available: Merge videos (multiple MP4/MOV), Edit audio (1 MP4/MOV + 1 MP3), Create a video (1 JPG/PNG + 1 MP3), Overlay video (2 MP4/MOV picture-in-picture). Processing is asynchronous: submit files, then poll for the result.

API jetonunuzu ücretsiz alın
API jetonunuzu almak için bir hesap oluşturun — günde 20 istek dahil, arayüzden veya API'den kullanılabilir.
Ücretsiz hesap oluştur Zaten hesabınız var mı? Giriş yapın

Tam iş akışı

Her entegrasyon aynı 4 adımlı diziyi izler:

1
İş oluştur — POST /api/v1/render.php
Dosyalarınızı Bearer token'ınızla multipart/form-data olarak gönderin. 1 JPG/PNG resim + 1 MP3 + mode=image_to_video → video oluşturma. 1 MP4/MOV + 1 MP3 → ses düzenleme (mode=mix_audio ekle). Birden fazla MP4/MOV → birleştirme. Sunucu benzersiz bir job_id döndürür. Ya da 1 görsel + options.text + options.voice: ses metinden üretilir, MP3 gerekmez.
2
İşi bekle — GET /api/v1/jobs.php?job_id=…
Bu uç noktayı düzenli aralıklarla (her 5–10 sn) sorgulayın. İş queued → processing → ready (veya error) aşamalarından geçer.
3
İndirme URL'ini al
Durum ready olduğunda yanıt, kullanıma hazır bir download_url alanı içerir.
4
Dosyayı indir — GET /api/download.php?job_id=…
Son MP4/MOV'ü indirin. Dosya iş tamamlandıktan 2 saat sonra otomatik olarak silinir.

Kimlik doğrulama

Her istek API token'ınızı içermelidir. İki format kabul edilir:

# Kimlik doğrulama — Her istek API token'ınızı içermelidir. İki format kabul edilir: Authorization: Bearer rvm_your_token_here # Alternative X-API-Key: rvm_your_token_here

Token'ınız üye alanında mevcuttur — hesap başına bir token, kayıtta otomatik oluşturulur. Yalnızca bir kez açık olarak gösterilir — güvende tutun.

Kota

Her üye hesabının, web arayüzü ve API arasında paylaşılan günde 20 isteği vardır. Başarısız işler kota tüketmez. Sayaç gece yarısı UTC'de sıfırlanır.

POST yanıtları quota_used ve quota_remaining içerir. Limit aşıldığında sunucu 429 ile yanıt verir.

Arayüz + API = aynı sayaç. Web arayüzünden oluşturulan bir video ve bir API isteği aynı günlük kotadan 1 kredi tüketir.

Kuyruk

Bir seferde bir iş işlenir. Birden fazla iş aynı anda gönderilirse kuyruğa alınır ve sırayla işlenir. Beklerken durum yanıtı şunları içerir:

Hız sınırı uygulandı: /api/v1/jobs.php uç noktası dakikada en fazla 12 çağrı kabul eder. Öneri: çağrılar arası 10 saniye.

Kullanılabilir geçişler

Doğrudan birleştirme için transition_type=none (varsayılan) geçirin, veya klipsler arasında solma için aşağıdaki türlerden birini kullanın:

none fade fadeblack dissolve wipeleft wiperight slideleft slideright zoomin circleclose

Süre (transition_duration) 0.2 ile 2.0 saniye arasındadır.

Uç noktalar

POST /api/v1/render.php Video işleme işi oluşturur

Five modes, accessible via the mode field (omit mode with multiple MP4s to auto-detect fusion):

KullanımAPI ModuGerekli dosyalarAçıklama
Videoları birleştir fusion 2–20 MP4/MOV dosyası Klipsler sağlanan sırayla arka arkaya birleştirilir. Klipsler arasında isteğe bağlı geçişler.
Sesi düzenle add_audio veya mix_audio 1 MP4/MOV + 1 MP3 Videonun ses parçasını değiştirir veya zenginleştirir. Video parçası asla yeniden kodlanmaz.

add_audio — orijinal ses silinir ve tamamen MP3 ile değiştirilir.
mix_audio — orijinal ses korunur ve MP3 üzerine eklenir.
Video oluştur image_to_video 1 JPG/PNG + 1 MP3 — veya 1 JPG/PNG + bir metin (options.text + options.voice): ses üretilir Sabit bir görsel ve MP3’ünüzden — ya da sesi üretilen (options.voice) yalnızca bir metinden (options.text) — video üretir. Metin bindirme (sabit, kelime kelime veya karaoke), geçişler, çözünürlük ve fps options alanıyla ayarlanabilir.
Overlay video overlay_video 2 MP4/MOV İkinci bir videoyu ana videonun üzerine yerleştirir. Konum, boyut, opaklık ve ses options alanı ile ayarlanabilir.
Metin ekle add_text 1 MP4/MOV Mevcut bir videonun üzerine metin ekler (çözünürlük, kare hızı ve ses korunur). image_to_video ile aynı metin ayarları ve ek olarak metnin görünme anı. options.text zorunludur.
Metinden MP3 text_to_mp3 (yalnızca metin) Metni konuşmaya dönüştürür ve bir MP3 dosyası döndürür. Dosya yükleme gerekmez — mode=text_to_mp3, text ve lang alanlarını form olarak gönderin. Sitenin 20 dilini destekler.
Katı doğrulama: her mod için tam sayı ve dosya türü gerekir. add_audio ve mix_audio yalnızca 1 MP4/MOV + 1 MP3 kabul eder. image_to_video yalnızca 1 JPG/PNG + 1 MP3 kabul eder. İstisna: options.text + options.voice ile image_to_video tek bir görsel kabul eder — ses metinden üretilir (MP3 olmadan).
Süre kuralı: ses ve image_to_video modlarında sonuç süresi MP3 süresine kilitlenir. options.voice ile image_to_video, metinden üretilen ses kadar sürer (+0,6 sn).

Ortak parametreler (multipart/form-data)

AlanTürZor.Açıklama
videos[]File[]EVETİşlenecek dosyalar. Moda bağlı olarak: 2–20 MP4/MOV, veya 1 MP4/MOV + 1 MP3, veya 1 görüntü (JPG/PNG) + 1 MP3. Dosya başına max 500 MB.
modestring*image_to_video | add_audio | mix_audio | overlay_video | text_to_mp3. Bu fusion dışı modlar için zorunludur. Yalnızca MP4/MOV dosyalarıyla mode alanının atlanması her zaman fusion'ı tetikler (stream-copy birleştirme) — tam olarak 2 MP4/MOV yüklense bile asla overlay_video'yu değil. Ses düzenleme için: add_audio orijinali siler, mix_audio onu korur ve üzerine bindirir. mode alanı sağlanırsa, yüklenen dosyalar tam olarak eşleşmelidir — aksi takdirde istek reddedilir. add_text da kabul edilir: tek bir MP4/MOV dosyası alan tek moddur ve options.text gerektirir.
orderJSONYalnızca fusion modu — klip sırasını tanımlayan indeks JSON dizisi.
transition_typestringYalnızca fusion modu. Varsayılan: none.
transition_durationfloatYalnızca fusion modu. Süre 0.2–2.0 sn. Varsayılan: 0.5.
optionsJSONimage_to_video, add_text, mix_audio ve overlay_video için render parametrelerinin JSON nesnesi (aşağıdaki tablolara bakın).
timingsFile / stringimage_to_video / add_text: karaoke zamanlama dosyası (SRT veya LRC, en fazla 200 KB) — dosya alanı veya düz metin. Gösterilen metin dosyadan alınır; text_mode=karaoke zorunlu olur; voice ile birlikte kullanılamaz.
callback_urlstringİş tamamlandığında çağrılan genel URL (http/https). Yanıt bir webhook_secret içerir.

options parametreleri — image_to_video modu

Tümü isteğe bağlı. Sağlanmayan değerler → worker tarafından uygulanan varsayılanlar.

AnahtarTürVarsayılanAçıklama
textstring""Yerleştirme olarak gösterilen metin. Boş = metin yok. Max 500 karakter.
fontstring"default"Metnin yazı tipi, kimliğiyle belirtilir. Kabul edilen değerler: default, dejavu-sans-bold, dejavu-serif, liberation-serif, dejavu-mono, amiri, noto-sans-sc (简体中文), noto-sans-tc (繁體中文), noto-sans-jp (日本語), noto-sans-kr (한국어), noto-sans-hebrew (עברית), noto-sans-thai (ไทย). default = standart yazı tipi (emoji desteklenir); amiri = Nesih yazı tipi, Arapça metin için ideal. Diğer tüm değerler invalid_option hatası döndürür. Emojiler yalnızca default ile işlenir.
font_sizeint60Piksel cinsinden yazı tipi boyutu. Aralık: 10–300.
text_colorstring"white"Metin rengi (ör. white, yellow, #ffffff).
text_positionstring"center"Metin konumu: center, top, bottom.
boxbooltrueMetnin arkasında yarı saydam arka plan.
box_colorstring"black@0.4"FFmpeg formatında renk + opaklık: color@opacity.
fade_durationfloat0.5Saniye cinsinden açılış/kapanış süresi (0–2). 0 = efekt yok.
widthint1080Piksel cinsinden video genişliği (64–3840, çift zorlanmış).
heightint1920Piksel cinsinden video yüksekliği (64–3840, çift zorlanmış).
fpsint24Kare hızı (1–60).
image_fitstring"contain"contain: Görselin veya videonun tamamını gösterir ve boş alanları seçilen arka planla doldurur. solid (varsayılan) veya blur. Bulanıklık için image_fit=contain gerekir. Metin net kalır. cover: Görsel çerçeveyi doldurmak için yakınlaştırılır, ortalanır — kenarlar kırpılır.
bg_colorstring"black"background_mode=solid: Görüntü hedef çözünürlüğü doldurmadığında arka plan rengi.
background_modestring"solid"solid (varsayılan) veya blur. Bulanıklık için image_fit=contain gerekir. Metin net kalır.
blur_strengthnumber201 ile 50 arasında sayı; varsayılan 20. Yalnızca arka plana Gauss bulanıklığı uygular.
enable_image_motionboolfalseFotoğraf animasyonunu etkinleştirir. false ise görüntü sabit kalır.
image_motion_effectstring"ken_burns"Animasyon efekti. Kabul edilen değerler: zoom_in, zoom_out, pan_left_to_right, pan_right_to_left, ken_burns vb.
motion_intensityfloat1.0Fotoğraf animasyon yoğunluğu (0.25–2.0). Yakınlaştırma genliğini ve kaydırma hızını çarpar.
text_effectstring"none"Metin katmanı animasyonu. Kabul edilen değerler: none, fade_in, slide_up, slide_down, slide_left, bounce.
text_effect_intensityfloat1.0Metin animasyon yoğunluğu (0.25–2.0). text_effect none ise yok sayılır.
text_border_widthint0Karakterlerin etrafındaki siyah dış çizginin kalınlığı piksel cinsinden (0 = devre dışı).
text_border_colorstring"black"Karakter kenarının rengi (text_color ile aynı biçim, varsayılan "black"). text_border_width > 0 ise kullanılır.
text_modestring"static"Metin görüntüleme modu. static (varsayılan): tam metin 1. kareden itibaren görünür. word_by_word: kelimeler word_reveal_speed hızında tek tek görünür. text_effect ile birlikte kullanılamaz: text_mode=word_by_word ise text_effect yok sayılır. "karaoke": metin sesin ritmiyle, sayfa sayfa renklenir (en fazla 1.000 karakter). voice ile kelime kelime eşitlenir, aksi hâlde kelime uzunluğuna göre sese dağıtılır.
word_reveal_speedfloat1.5Saniyedeki kelime gösterme hızı (0.3–5.0, varsayılan 1.5). Yalnızca text_mode=word_by_word ile kullanılır. OpenAI TTS için önerilen değer: 2.0.
word_animstring"none"Her kelimenin görünüm animasyonu. none (varsayılan): anlık görünüm. fade: her yeni kelime 0.2s fade ile önceki bloktan geçişle görünür. Yalnızca text_mode=word_by_word ile kullanılır.
karaoke_stylestring"fill"Karaoke stili: fill (söylenen kelimeler vurgu rengini alır), sweep (her kelime kademeli olarak dolar; sağdan sola yazılarda kelimenin tamamı) veya highlight (yalnızca geçerli kelime renklenir).
highlight_colorstring"#FFD200"Karaoke modunda söylenen kelimelerin / geçerli kelimenin rengi (text_color ile aynı biçim).
karaoke_linesint2Karaoke modunda sayfa başına gösterilen satır sayısı (1–4).
voicestring""Ses kimliği (text_to_mp3 ile aynı liste, örn. tr-TR-EmelNeural): ses aynı işte text içeriğinden oluşturulur. Bu durumda image_to_video yalnızca görsele ihtiyaç duyar (ayrıca gönderilen MP3 reddedilir). Karaoke modunda her kelime sesle eşitlenir.
voice_rateint0Oluşturulan sesin hızı, % olarak (−50 ile +50 arası).

Kendi zamanlamalarınızla karaoke (SRT / LRC)

timings alanında bir SRT veya LRC dosyası gönderin: her satır kendi anında görünür ve bir karaoke sayfası oluşturur (en fazla 500 satır, 5.000 karakter). SRT: satır bitiş zamanında kaybolur. LRC: satır bir sonrakine kadar kalır (boş satır onu bitirir); [offset:] ve gelişmiş LRC kelime zamanlamaları <mm:ss.xx> desteklenir — aksi hâlde her satır kendi süresine dağıtılır. add_text modunda süreler videonun başına göredir ve text_start kadar kaydırılır.

# lyrics.srt 1 00:00:01,000 --> 00:00:03,500 First line of the song 2 00:00:04,000 --> 00:00:07,200 Second line, on its own page # lyrics.lrc — enhanced LRC: optional per-word times <mm:ss.xx> [00:01.00]<00:01.00>First <00:01.60>line <00:02.10>here [00:04.00]Second line [00:07.50]

options parametreleri — overlay_video modu

Tümü isteğe bağlı. Yükleme sırası önemlidir: birinci dosya ana video (arka plan), ikinci dosya overlay (ön plan). Overlay'deki yeşil ekranı kaldırmak için chroma_key kullanın.

AnahtarTürVarsayılanAçıklama
positionstring"bottom-right"Overlay'in yerleştirileceği köşe: top-left, top-right, bottom-left, bottom-right veya center.
scalefloat0.30Ana video genişliğine oranla overlay boyutu. 0.25 = genişliğin %25'i. Aralık: 0.05–1.0.
opacityfloat1.0Overlay şeffaflığı. 1.0 = tamamen görünür, 0.0 = görünmez.
marginint10Overlay ile çerçeve kenarı arasındaki piksel boşluğu. position=center ise yok sayılır. Aralık: 0–200.
audiostring"main"Hangi sesin korunacağı. main: sadece ana video sesi. overlay: sadece overlay sesi. mix: her iki parça karışımı.
chroma_keyboolfalseOverlay'deki saf yeşil (#00FF00) arka planı kaldırmak için true olarak ayarla — yeşil ekranda çekilen webcam veya animasyonlar için kullanışlıdır.
chroma_similarityfloat0.20Yeşil ekran toleransı. Düşük = katı eşleşme. Yüksek = daha geniş kaldırma. Önerilen: dijital yeşil için 0.10–0.20, fiziksel ekran için 0.25–0.45. Aralık: 0.01–0.60.

options parametreleri — add_text modu

Metin zorunludur. Varsayılan olarak biçim, kare hızı ve ses korunur. output_format; image_fit, bg_color ve background_mode ile yeniden çerçevelemeyi etkinleştirir. width, height, fps ve fotoğraf hareketi yok sayılır. En uzun süre: 15 dakika.

{"text":"Hello","output_format":"portrait","image_fit":"contain","background_mode":"blur","blur_strength":20}
AnahtarTürVarsayılanAçıklama
textstringEVETEklenecek metin. Zorunlu, 1–200 karakter.
text_startfloat0Metnin göründüğü saniye (≥ 0). Videonun bitiminden önce olmalıdır.
text_durationfloat0Metnin ekranda kalma süresi, saniye cinsinden (0,1–3600). 0 = videonun sonuna kadar.
fontstring"default"Metnin yazı tipi, kimliğiyle belirtilir. Kabul edilen değerler: default, dejavu-sans-bold, dejavu-serif, liberation-serif, dejavu-mono, amiri, noto-sans-sc (简体中文), noto-sans-tc (繁體中文), noto-sans-jp (日本語), noto-sans-kr (한국어), noto-sans-hebrew (עברית), noto-sans-thai (ไทย). default = standart yazı tipi (emoji desteklenir); amiri = Nesih yazı tipi, Arapça metin için ideal. Diğer tüm değerler invalid_option hatası döndürür. Emojiler yalnızca default ile işlenir.
font_sizeint60Kısa kenarı 1080 px olan bir video için belirtilen ve gerçek çözünürlüğe otomatik ölçeklenen yazı boyutu — aynı değer 720p ve 4K'da aynı görünür. Aralık: 10–300.
fade_durationfloat0.5Metnin (videonun değil) belirme/kaybolma solma süresi, saniye cinsinden. Aralık: 0–2.
text_color, box, box_color, text_position, text_border_width, text_border_color, text_effect, text_effect_intensity, text_mode, word_reveal_speed, word_anim, karaoke_style, highlight_color, karaoke_lines, voice, voice_rate——image_to_video ile aynıdır (yukarıdaki tabloya bakın).
original_volumefloat0.3voice ile: videonun orijinal sesinin, oluşturulan sesin altındaki düzeyi (0–2, varsayılan 0.3; 0 = değiştirilir). Ses text_start anında başlar; metin ses bitene kadar ekranda kalır ve ses videonun sonunu aşarsa son kare dondurulur.
background_modestring"solid"solid (varsayılan) veya blur. Bulanıklık için image_fit=contain gerekir. Metin net kalır.
blur_strengthnumber201 ile 50 arasında sayı; varsayılan 20. Yalnızca arka plana Gauss bulanıklığı uygular.
output_formatstring"original"Yalnızca add_text: original (varsayılan), portrait (1080×1920), square (1080×1080), landscape (1920×1080). Bulanıklık için original dışında bir biçim gerekir.
image_fitstring"contain"contain: Görselin veya videonun tamamını gösterir ve boş alanları seçilen arka planla doldurur. solid (varsayılan) veya blur. Bulanıklık için image_fit=contain gerekir. Metin net kalır. cover: Görsel çerçeveyi doldurmak için yakınlaştırılır, ortalanır — kenarlar kırpılır.
bg_colorstring"black"background_mode=solid: Görüntü hedef çözünürlüğü doldurmadığında arka plan rengi.

options parametreleri — Ses düzenleme (mix_audio)

Yalnızca mode=mix_audio ile kullanılabilir. add_audio için yok sayılır.

AnahtarTürVarsayılanAçıklama
mp3_volumefloat1.0Eklenen MP3'ün ses seviyesi (0.0 = sessiz, 1.0 = orijinal, 2.0 = çift).

text_to_mp3 modu — doğrudan parametreler (options JSON'u yok)

Diğer modların aksine, bu alanlar options JSON nesnesi içinde değil, doğrudan form alanları olarak gönderilir. Sadece text zorunludur.

AnahtarTürVarsayılanAçıklama
textstring—Sese dönüştürülecek metin. Zorunlu. En fazla 5.000 karakter.
langstring"en"voice belirtilmediğinde veya geçersiz olduğunda varsayılan sesi seçmek için kullanılan dil kodu. Sitenin 20 dilinden biri (aşağıdaki tabloya bakın). Bilinmiyorsa en'e döner.
voicestringotomatikedge-tts ses kimliği (aşağıdaki tabloya bakın). Belirtilmemişse veya geçersizse, lang için otomatik olarak ilk ses kullanılır.
slowboolfalseKonuşmayı %25 yavaşlatmak için true (veya 1) olarak ayarlayın. Diğer tüm değerler false olarak kabul edilir.
Dosya yükleme gerekmez: diğer modların aksine, text_to_mp3 videos[] gerektirmez. mode=text_to_mp3'ü text / lang / voice / slow ile birlikte normal form alanları olarak gönderin.

Kullanılabilir sesler (edge-tts, Microsoft Neural), dil koduna göre gruplandırılmıştır:

DilKullanılabilir sesler
en en-US-AvaNeural, en-US-AndrewNeural, en-GB-LibbyNeural, en-AU-NatashaNeural, en-AU-WilliamMultilingualNeural
fr fr-FR-DeniseNeural, fr-FR-HenriNeural, fr-FR-EloiseNeural, fr-CA-SylvieNeural, fr-CA-ThierryNeural
es es-ES-ElviraNeural, es-ES-AlvaroNeural, es-MX-DaliaNeural, es-AR-ElenaNeural, es-AR-TomasNeural
ar ar-SA-ZariyahNeural, ar-SA-HamedNeural, ar-EG-SalmaNeural, ar-MA-MounaNeural, ar-MA-JamalNeural
pt pt-BR-FranciscaNeural, pt-BR-AntonioNeural, pt-PT-RaquelNeural
de de-DE-KatjaNeural, de-DE-ConradNeural, de-DE-AmalaNeural, de-AT-IngridNeural, de-AT-JonasNeural
it it-IT-ElsaNeural, it-IT-DiegoNeural, it-IT-IsabellaNeural
nl nl-NL-ColetteNeural, nl-NL-MaartenNeural, nl-BE-DenaNeural, nl-BE-ArnaudNeural
ru ru-RU-SvetlanaNeural, ru-RU-DmitryNeural
tr tr-TR-EmelNeural, tr-TR-AhmetNeural
hi hi-IN-SwaraNeural, hi-IN-MadhurNeural
bn bn-IN-TanishaaNeural, bn-IN-BashkarNeural, bn-BD-NabanitaNeural, bn-BD-PradeepNeural
ur ur-PK-UzmaNeural, ur-PK-AsadNeural, ur-IN-GulNeural, ur-IN-SalmanNeural
id id-ID-GadisNeural, id-ID-ArdiNeural
ja ja-JP-NanamiNeural, ja-JP-KeitaNeural
ko ko-KR-SunHiNeural, ko-KR-InJoonNeural
zh-CN zh-CN-XiaoxiaoNeural, zh-CN-YunxiNeural, zh-CN-XiaoyiNeural
zh-TW zh-TW-HsiaoChenNeural, zh-TW-YunJheNeural
vi vi-VN-HoaiMyNeural, vi-VN-NamMinhNeural
pl pl-PL-ZofiaNeural, pl-PL-MarekNeural

Başarılı yanıt (HTTP 200)

{ "success": true, "job_id": "a3f1c8d2e5b09471...", "mode": "fusion", // "fusion" | "add_audio" | "mix_audio" | "image_to_video" | "overlay_video" | "add_text" | "text_to_mp3" "file_count": 2, "transition": null, "quota_used": 1, "quota_remaining": 9, "status_url": "https://rapidvideomaker.com/api/v1/jobs.php?job_id=a3f1c8..." }
text_to_mp3 için yanıt, file_count veya transition alanları içermez (dosya yüklenmedi) — geri kalanı aynıdır: job_id, quota_used, quota_remaining, status_url, webhook_secret.

curl örneği — image_to_video modu

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@scene.jpg" \ -F "videos[]=@narration.mp3" \ -F "mode=image_to_video" \ -F 'options={"text":"Chapter 1","font_size":72,"text_color":"white","text_position":"bottom","box":true,"box_color":"black@0.4","fade_duration":0.5,"width":1080,"height":1920,"image_fit":"contain","bg_color":"black","enable_image_motion":true,"image_motion_effect":"ken_burns","motion_intensity":1.0,"text_effect":"slide_up","text_effect_intensity":1.0}' # image_fit : "contain" | "cover" # background_mode : "solid" | "blur" (blur requires contain) # blur_strength : 1–50, default 20 # bg_color : ignored if image_fit="cover" # enable_image_motion : true = animation on, false (default) = static image # image_motion_effect : zoom_in | zoom_out | pan_left_to_right | pan_right_to_left | pan_top_to_bottom | pan_bottom_to_top | zoom_pan_soft | ken_burns # motion_intensity : 0.25–2.0 — photo animation amplitude (default 1.0) # text_effect : none | fade_in | slide_up | slide_down | slide_left | bounce (ignored if text_mode=word_by_word) # text_effect_intensity : 0.25–2.0 — text animation intensity (default 1.0) # text_border_width : 0–10 px — outline around characters (0 = disabled) # text_border_color : outline color, default "black" (e.g. "#FF3366", "white@0.8") # text_mode : "static" (default) | "word_by_word" — reveal words one by one # word_reveal_speed : 0.3–5.0 w/s — speed for word_by_word mode (default 1.5, ~2.0 for OpenAI TTS) # word_anim : "none" (default) | "fade" — fade-in crossfade on each word (word_by_word only)

Oluşturulan sesle karaoke metni (image_to_video, MP3 olmadan)

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@scene.jpg" \ -F "mode=image_to_video" \ -F 'options={"text":"Every word lights up as the voice reads it.","voice":"en-US-AvaNeural","text_mode":"karaoke","karaoke_style":"sweep","highlight_color":"#FFD200","karaoke_lines":2,"text_position":"bottom","font_size":72}' # no MP3: the voice is generated from "text" and gives the timing of every word # text_mode="karaoke" : text up to 1000 characters, shown page by page (karaoke_lines: 1–4) # karaoke_style : "fill" (default) | "sweep" | "highlight" # voice_rate : -50…+50 (%), default 0 # with your own MP3 (no "voice"): karaoke timing is spread over the audio by word length # add_text: same options + "original_volume" (0–2, default 0.3) = original sound under the voice

SRT dosyasıyla karaoke (image_to_video + MP3 dosyanız)

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@cover.jpg" \ -F "videos[]=@song.mp3" \ -F "timings=@lyrics.srt" \ -F "mode=image_to_video" \ -F 'options={"karaoke_style":"sweep","karaoke_lines":2,"text_position":"bottom","font_size":72}' # timings : SRT or LRC file (200 KB max), or its content as a plain text field: -F "timings=<lyrics.lrc" # the displayed text comes from the file ("text" is ignored), text_mode is forced to "karaoke" # not compatible with "voice" (the timings follow your own audio) # add_text: times are relative to the video start, shifted by "text_start"

curl örneği — Sesi düzenle

# Replace audio (deletes original) curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@my_video.mp4" \ -F "videos[]=@my_music.mp3" \ -F "mode=add_audio" # Keep original audio + overlay MP3 curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@my_video.mp4" \ -F "videos[]=@my_music.mp3" \ -F "mode=mix_audio" \ -F 'options={"mp3_volume":0.7}' # mp3_volume : 0.0 (muted) → 1.0 (original volume, default) → 2.0 (amplified)

curl örneği — overlay_video modu

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@main_video.mp4" \ -F "videos[]=@overlay_video.mp4" \ -F "mode=overlay_video" \ -F 'options={"position":"bottom-right","scale":0.25,"opacity":1.0,"margin":20,"audio":"main"}' # Green screen overlay curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@main_video.mp4" \ -F "videos[]=@webcam_greenscreen.mp4" \ -F "mode=overlay_video" \ -F 'options={"position":"bottom-left","scale":0.35,"chroma_key":true,"chroma_similarity":0.15,"audio":"mix"}' # position : top-left | top-right | bottom-left | bottom-right | center (default: bottom-right) # scale : 0.05–1.0 — overlay width as fraction of main video (default 0.30) # opacity : 0.0–1.0 — overlay transparency (default 1.0) # margin : 0–200 px — gap from frame edge, ignored if center (default 10) # audio : main | overlay | mix — audio to keep (default: main) # chroma_key : true | false — remove green (#00FF00) background from overlay (default false) # chroma_similarity : 0.01–0.60 — green screen tolerance (default 0.20)

curl örneği — add_text modu

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@my_video.mp4" \ -F "mode=add_text" \ -F 'options={"text":"Hello world","text_position":"bottom","font_size":72,"text_color":"#ffd700","text_start":2,"text_duration":5,"text_effect":"slide_up"}' # text : required, 1–200 characters # text_start : second at which the text appears (default 0) # text_duration : seconds the text stays visible, 0 = until the end (default 0) # the video keeps its resolution, frame rate and audio track

curl örneği — Videoları birleştir

curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@clip1.mp4" \ -F "videos[]=@clip2.mp4" \ -F "transition_type=fade" \ -F "transition_duration=0.5"

curl örneği — text_to_mp3 modu

# No file upload — text + lang + voice as plain form fields curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "mode=text_to_mp3" \ -F "text=Welcome to Rapid Video Maker." \ -F "lang=en" \ -F "voice=en-US-AvaNeural" \ -F "slow=false" # voice omitted or invalid -> falls back to the first voice of "lang" curl -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "mode=text_to_mp3" \ -F "text=Bienvenue sur Rapid Video Maker." \ -F "lang=fr"
GET /api/v1/jobs.php?job_id=<hex32> İş durumu

Durum gerçek aşamayı ve geçen süreyi içerir. Tahminler yaklaşık değerlerdir; istemci zaman aşımı işin başarısız olduğu anlamına gelmez. Aynı iş kimliğini sorgulamaya devam edin. Dosyalar tamamlandıktan iki saat sonra sona erer.

Olası durumlar

DurumAnlamEk alanlar
queued Kuyrukta, henüz işlenmedi queue_position, queue_total, eta_minutes
processing FFmpeg işlemi devam ediyor processing_stage, processing_elapsed_seconds, stage_elapsed_seconds, last_activity_at, processed_media_seconds, eta_overrun
ready Tamamlandı — dosya mevcut download_url, media_available, created_at, expires_at
error İşlem başarısız oldu error (message), quota_refund_status: pending | confirmed | not_required
cancelled İptal edildi quota_refund_status: pending | confirmed | not_required

Duruma göre yanıtlar

{ "job_id": "a3f1c8...", "status": "queued", "queue_position": 2, "queue_total": 3, "eta_minutes": 7 }
{ "job_id": "a3f1c8...", "status": "ready", "download_url": "https://rapidvideomaker.com/api/download.php?job_id=a3f1c8...", "created_at": "2026-06-02T10:00:00+00:00", "expires_at": "2026-06-02T12:00:00+00:00" }

curl örneği

curl -H "Authorization: Bearer rvm_your_token" \ "https://rapidvideomaker.com/api/v1/jobs.php?job_id=a3f1c8..."
GET /api/v1/jobs.php Bu token ile oluşturulan tüm işleri listeler (sayfalı, tarihe göre yeniden eskiye)

Ortak parametreler (multipart/form-data)

ParametreTürVarsayılanAçıklama
pageinteger1Sayfa numarası (1'den başlar)
limitinteger20Sayfa başına sonuç (en fazla 50, varsayılan 20)

Duruma göre yanıtlar

{ "success": true, "jobs": [ { "job_id": "a3f1c8...", "status": "ready", "mode": "fusion", "created_at": "2026-06-02T10:00:00+00:00", "expires_at": "2026-06-02T12:00:00+00:00", "download_url": "https://..." }, ... ], "total": 12, "page": 1, "limit": 20 }
GET /api/download.php?job_id=<hex32> Son dosyayı indir

Son dosyayı akış olarak yayınlar. Content-Type, video modları için video/mp4, text_to_mp3 için audio/mpeg'dir. Token gerektirmez. Yalnızca durum ready olduğunda kullanılabilir.

Dosya iş tamamlandıktan 2 saat sonra silinir. Durum ready olur olmaz indirin.

İsteğe bağlı parametreler

ParametreAçıklama
filenameİndirilen dosya için önerilen ad (ör. benim-videoum.mp4)
previewBir indirmeyi tetiklemek yerine satır içi oynatma için (Content-Disposition: attachment'ı atlar) 1 olarak ayarlayın — tarayıcı içi önizleme için kullanılır.

curl örneği

curl -o "output.mp4" \ "https://rapidvideomaker.com/api/download.php?job_id=a3f1c8...&filename=output.mp4"

Webhook'lar

Webhook'lar polling'e alternatiftir: durum her X saniyede kontrol etmek yerine bir URL sağlarsınız ve sunucu iş tamamlandığında sizi otomatik olarak çağırır.

Nasıl çalışır

  1. callback_url'yi /api/v1/render.php'ye gönderilen POST'a ekleyin
  2. Yanıt bir webhook_secret içerir — imzaları doğrulamak için saklayın
  3. İş ready veya error olduğunda sunucu URL'nize imzalı JSON POST gönderir
  4. HMAC-SHA256(webhook_secret, raw_body) ile imzayı doğrulayın
Kısıtlamalar: callback_url genel erişilebilir bir URL olmalıdır (http veya https). Özel, loopback ve ayrılmış IP adresleri sunucu tarafında engellenir. Zaman aşımı: 10 saniye.

Alınan yük

{ "job_id": "a3f1c8...", "status": "ready", "download_url": "https://rapidvideomaker.com /api/download.php?job_id=a3f1c8...", "timestamp": "2026-04-04T12:00:00+00:00" }
{ "job_id": "a3f1c8...", "status": "error", "error": "FFmpeg xfade failed:...", "timestamp": "2026-04-04T12:00:00+00:00" }

Sunucu tarafından gönderilen başlıklar

BaşlıkDeğer
Content-Typeapplication/json
X-RVM-Signaturesha256=<hmac_hex> — ham gövdenin HMAC-SHA256 imzası
X-RVM-Job-Idİlgili job_id

İmza doğrulama

# Python import hmac, hashlib def verify_webhook(secret: str, body: bytes, signature_header: str) -> bool: expected = "sha256=" + hmac.new( secret.encode(), body, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, signature_header) # Flask/FastAPI endpoint: sig = request.headers.get("X-RVM-Signature", "") if not verify_webhook(WEBHOOK_SECRET, request.data, sig): return "Invalid signature", 403 data = request.get_json()

Hata kodları

HTTPJSON koduNeden
401unauthorizedToken eksik, geçersiz veya iptal edilmiş
400missing_filesHiç dosya alınmadı
400too_few_files2'den az dosya gönderildi
400too_many_files20'den fazla dosya gönderildi
400invalid_mimeDesteklenmeyen dosya — yalnızca MP4, MP3 ve JPG/PNG kabul edilir
400wrong_file_countDosya sayısı seçilen moda uymuyor
400wrong_file_typesDosya türleri seçilen moda uymuyor
400invalid_file_combinationBelirtilen mod olmayan dosya kombinasyonu desteklenen hiçbir moda uymuyor
400invalid_optionsoptions alanı geçerli JSON değil
400invalid_optionoptions içindeki bir değer geçersiz
400file_too_largeBir dosya 500 MB'ı aşıyor
400text_requiredoptions.text alanı eksik veya boş (add_text modu)
400video_too_longVideo 15 dakikadan uzun (add_text modu)
400text_start_out_of_rangetext_start videonun bitişini aşıyor
400invalid_voiceBilinmeyen voice kimliği.
400invalid_timingsOkunamayan zamanlama dosyası (tanınmayan biçim, zaman damgalı satır yok, bitiş başlangıçtan önce, çok uzun…).
400invalid_orderorder dizisi geçerli bir permütasyon değil
400invalid_job_idHatalı job_id formatı (32 karakterli hex olmalı)
404job_not_foundİş bulunamadı — job_id bilinmiyor veya hiç oluşturulmamış
410job_expiredİş süresi doldu — mevcuttu ama 2 saatlik kurtarma penceresi geçti
429quota_exceededGünde 20 başarılı iş limitine ulaşıldı
429rate_limited/api/v1/jobs.php'de dakikada 12 çağrı aşıldı
500server_errorDahili sunucu hatası

Entegrasyon örnekleri

Her mod için örnekler — pip install requests ile requests kurun.

Ortak yapılandırma

import requests, time, sys, json API_BASE = "https://rapidvideomaker.com" API_TOKEN = "rvm_your_token_here" HEADERS = {"Authorization": f"Bearer {API_TOKEN}"}

image_to_video modu — resim + ses → video

with open("scene.jpg", "rb") as fi, open("narration.mp3", "rb") as fa: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("scene.jpg", fi, "image/jpeg")), ("videos[]", ("narration.mp3", fa, "audio/mpeg")), ], data={ "mode": "image_to_video", "options": json.dumps({ "text": "Chapter 1", "font_size": 72, "text_color": "white", "text_position": "bottom", "box": True, "box_color": "black@0.4", "fade_duration": 0.5, "width": 1080, "height": 1920, "image_fit": "contain", # "contain" | "cover" "background_mode": "solid", # or "blur" with contain "blur_strength": 20, "bg_color": "black", # ignored if image_fit="cover" "enable_image_motion": True, "image_motion_effect": "ken_burns", "motion_intensity": 1.0, # 0.25–2.0 — photo animation amplitude "text_effect": "slide_up", # none | fade_in | slide_up | slide_down | slide_left | bounce (ignored if text_mode=word_by_word) "text_effect_intensity": 1.0, # 0.25–2.0 — text animation intensity # word-by-word reveal (mutually exclusive with text_effect): # "text_mode": "word_by_word", "word_reveal_speed": 2.0, "word_anim": "fade" }), }, )

Sesi düzenle

# Replace audio (deletes original) — mode=add_audio with open("video.mp4", "rb") as fv, open("music.mp3", "rb") as fa: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("video.mp4", fv, "video/mp4")), ("videos[]", ("music.mp3", fa, "audio/mpeg")), ], data={"mode": "add_audio"}, ) # Keep original audio + overlay MP3 — mode=mix_audio with open("video.mp4", "rb") as fv, open("music.mp3", "rb") as fa: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("video.mp4", fv, "video/mp4")), ("videos[]", ("music.mp3", fa, "audio/mpeg")), ], data={"mode": "mix_audio", "options": json.dumps({"mp3_volume": 0.7})}, # mp3_volume : 0.0 = muted, 1.0 = original volume (default), 2.0 = amplified )

overlay_video modu — görüntü içinde görüntü

with open("main.mp4", "rb") as fm, open("overlay.mp4", "rb") as fo: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("main.mp4", fm, "video/mp4")), ("videos[]", ("overlay.mp4", fo, "video/mp4")), ], data={ "mode": "overlay_video", "options": json.dumps({ "position": "bottom-right", # top-left | top-right | bottom-left | bottom-right | center "scale": 0.25, # 0.05–1.0 — overlay width fraction "opacity": 1.0, # 0.0–1.0 — transparency "margin": 20, # 0–200 px — gap from frame edge "audio": "main", # main | overlay | mix # green screen: "chroma_key": True, "chroma_similarity": 0.15 }), }, )

add_text modu — video üzerine metin

with open("video.mp4", "rb") as fv: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[("videos[]", ("video.mp4", fv, "video/mp4"))], data={ "mode": "add_text", "options": json.dumps({ "text": "Hello world", # required "text_position": "bottom", # center | top | bottom "font": "amiri", # font id (see the table above) "font_size": 72, "text_start": 2, # appears at 2 s "text_duration": 5, # stays 5 s (0 = until the end) }), }, )

Videoları birleştir

with open("clip1.mp4", "rb") as f1, open("clip2.mp4", "rb") as f2: resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, files=[ ("videos[]", ("clip1.mp4", f1, "video/mp4")), ("videos[]", ("clip2.mp4", f2, "video/mp4")), ], data={"transition_type": "fade", "transition_duration": "0.5"}, )

text_to_mp3 modu — metinden sese

# No files — text + lang (+ optional voice / slow) as form fields resp = requests.post( f"{API_BASE}/api/v1/render.php", headers=HEADERS, data={ "mode": "text_to_mp3", "text": "Welcome to Rapid Video Maker.", "lang": "en", # one of the 20 site language codes "voice": "en-US-AvaNeural", # optional — falls back to the first voice of "lang" "slow": "false", # "true" = -25% speech rate }, )

Sorgulama + indirme (tüm modlar için ortak)

resp.raise_for_status() job_id = resp.json()["job_id"] print(f"Job created: {job_id}") for _ in range(120): # timeout 10 min (120 × 5s) r = requests.get( f"{API_BASE}/api/v1/jobs.php", headers=HEADERS, params={"job_id": job_id}, ) data = r.json() status = data["status"] if status == "queued": pos = data.get("queue_position", "?") eta = data.get("eta_minutes", "?") print(f"Queued — position {pos}, ETA ~{eta} min") elif status == "processing": print("Processing…") elif status == "ready": download_url = data["download_url"] break elif status == "error": sys.exit(f"Error: {data.get('error')}") time.sleep(5) else: sys.exit("Timeout: job not completed after 10 min") r = requests.get(download_url, stream=True) with open("output.mp4", "wb") as f: for chunk in r.iter_content(65536): f.write(chunk) print("Downloaded: output.mp4")

n8n'de iki yaklaşım: sorgulama (durum döngüsü) veya webhook (sunucu n8n'yi çağırır). Webhook önerilir.

Yaklaşım A — Webhook (önerilen)

Yalnızca 3 düğüm, döngü yok.

Düğüm 1 — Webhook tetikleyicisi
İş akışı girişi olarak bir Webhook düğümü ekleyin (yöntem POST).

Düğüm 2 — İş oluştur (HTTP İsteği)

YöntemPOST
URLhttps://rapidvideomaker.com/api/v1/render.php
Kimlik DoğrulamaHeader Auth — Authorization: Bearer rvm_…
Gövde İçerik TürüForm-Data Multipart
Body paramsHer klip için ikili alan videos[] + Metin alanı callback_url

İmzayı doğrulamak için yanıttaki webhook_secret'i bir iş akışı değişkeninde saklayın.

Düğüm 3 — Sonucu işle (webhook tarafından tetiklenen iş akışında)
n8n sunucunun POST'unu aldığında $json.status ready veya error'dur.

İmzayı doğrulamak için: {{ $headers['x-rvm-signature'] }}'ı webhook_secret'inizden HMAC-SHA256 ile karşılaştırın.

Yaklaşım B — Sorgulama (webhook olmadan)

5 düğüm, her 10 sn'de durum döngüsü.

Düğüm 1 — İş oluştur — callback_url olmadan yukarıdakiyle aynı yapılandırma.

Düğüm 2 — Bekle — 10 saniye.

Düğüm 3 — Durum sorgula (HTTP İsteği GET)

URLhttps://rapidvideomaker.com/api/v1/jobs.php
Sorgu parametrelerijob_id = {{ $('Düğüm 1').item.json.job_id }}
Kimlik DoğrulamaBaşlık Kimlik Doğrulama — aynı token

Düğüm 4 — Eğer: {{ $json.status }} === 'ready' → doğru: Düğüm 5 / yanlış: Düğüm 2'ye geri.

Sonsuz döngüden kaçınmak için bir Set düğümüne yineleme sayacı ekleyin.

Düğüm 5 — İndir: {{ $json.download_url }} üzerinde HTTP İsteği GET.

Adım 1 — İş oluştur (bir mod seçin)

# fusion JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@clip1.mp4" -F "videos[]=@clip2.mp4") # add_audio (replace audio) JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@video.mp4" -F "videos[]=@music.mp3" \ -F "mode=add_audio") # mix_audio (overlay music at 70% volume) JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@video.mp4" -F "videos[]=@music.mp3" \ -F "mode=mix_audio" -F 'options={"mp3_volume":0.7}') # image_to_video JOB=$(curl -s -X POST https://rapidvideomaker.com/api/v1/render.php \ -H "Authorization: Bearer rvm_your_token" \ -F "videos[]=@scene.jpg" -F "videos[]=@narration.mp3" \ -F "mode=image_to_video" \ -F 'options={"text":"Chapter 1","font_size":72,"text_position":"bottom","fade_duration":0.5,"width":1080,"height":1920}') JOB_ID=$(echo $JOB | grep -o '"job_id":"[^"]*"' | cut -d'"' -f4) echo "Job ID: $JOB_ID"

Adım 2 — Sorgulama

while true; do STATUS=$(curl -s \ -H "Authorization: Bearer rvm_your_token" \ "https://rapidvideomaker.com/api/v1/jobs.php?job_id=$JOB_ID") STATE=$(echo $STATUS | grep -o '"status":"[^"]*"' | cut -d'"' -f4) echo "Status: $STATE" [ "$STATE" = "ready" ] && break [ "$STATE" = "error" ] && { echo "Error"; exit 1; } sleep 10 done

Adım 3 — İndir

DOWNLOAD_URL=$(echo $STATUS | grep -o '"download_url":"[^"]*"' | cut -d'"' -f4) curl -o output.mp4 "$DOWNLOAD_URL"

En iyi uygulamalar

Sonuç dosyaları iş tamamlandıktan 2 saat sonra tutulur, ardından otomatik olarak silinir.