Przejdź do treści głównej

API do skalowania wideo w górę: przepływ dostarczania i kontroli jakości

Przeskaluj zatwierdzony klip do 720p, 1080p, 2K lub 4K od 0,006 $ za sekundę źródła, a przed eksportem sprawdź rozmiar, długość i dźwięk.

Autor
Lydia
Opublikowano
Czas czytania
11 min czytania
Zaktualizowano
Dwoje montażystów ogląda tancerkę na dużym ekranie projekcyjnym i mniejszych podglądach

Masz krótki klip, który Ci się podoba, wygenerowany tanio w 480p albo wycięty ze starszych materiałów, a musi wyjść w 1080p lub 4K z nietkniętym dźwiękiem. API do skalowania wideo w górę robi to jednym wywołaniem, ale samo wywołanie to dopiero środek pracy. O tym, czy plik nadaje się do użycia, decyduje to, co robisz przed nim (kończysz montaż, sprawdzasz źródło) i po nim (pobierasz na czas, potwierdzasz rozmiar, długość i dźwięk, eksportujesz dokładne płótno, jakiego wymaga cel).

Wersja krótka: przeskaluj końcową wersję jeden raz, na poziomie, jakiego potrzebuje cel. SpicyAPI Video Upscaler przyjmuje jeden plik MP4 od 3 do 60 sekund oraz poziom i zwraca ten sam klip w wyższej rozdzielczości, z tą samą długością, proporcjami, ruchem i ścieżką dźwiękową. Nie ma promptu. Ceny: 0,006 $ za sekundę źródła w 720p lub 1080p, 0,012 $ w 2K, 0,024 $ w 4K.

Co wysyłasz i ile płacisz

Wyślij video_url (bezpośredni link do pliku MP4 albo wgrany plik) i opcjonalnie resolution: 720p, 1080p (domyślnie), 2k lub 4k. Wgrane pliki MP4 mogą mieć do 90 MB. Rozliczenie jest za sekundę klipu źródłowego, zaokrąglane w górę do pełnej sekundy, z minimum trzech sekund.

Klip źródłowy720p / 1080p2K4K
5,2 s (rozliczane jako 6 s)0,036 $0,072 $0,144 $
20 s0,12 $0,24 $0,48 $
60 s0,36 $0,72 $1,44 $

Zaokrąglanie dotyczy każdego przesłanego klipu osobno, więc trzy klipy po 5,2 sekundy są rozliczane jako 18 sekund, a nie 16. Szacunek pokazywany przed wysłaniem zakłada klip długości 60 sekund (0,36 $ w 1080p, 1,44 $ w 4K); nieużyta część jest zwalniana przy rozliczeniu zadania, więc klip długości 6 sekund jest rozliczany za 6 sekund. Nieudane zadanie otrzymuje zwrot.

Trzy przykłady rozliczenia: klip 5,2-sekundowy rozliczony jako 6 sekund, klip 20-sekundowy i klip 60-sekundowy w 4K.
Rozliczenie zaokrągla długość źródła w górę do pełnej sekundy.

Argument kosztowy za skalowaniem w górę leży po stronie generowania. Klip 10-sekundowy wygenerowany w 480p przez Seedance 2.5 Spicy kosztuje 2,16 $ za próbę; w natywnej 1080p kosztuje 10,80 $. Zrób wersję roboczą w 480p, zatrzymaj ujęcie, które chcesz, i dodaj 0,06 $ za skalowanie do 1080p. Upscaler powiększa to, co już jest w kadrze, więc detal nieobecny w wersji roboczej się nie pojawi. Jeśli mała etykieta lub twarz muszą się zgadzać, sprawdź je w wersji roboczej albo zrób wersję roboczą w wyższej rozdzielczości.

Przygotuj źródło

Najpierw zakończ montaż. Przytnij, zmień kolejność i zmiksuj dźwięk przed skalowaniem. Każda późniejsza poprawka wymagałaby powtórzenia na pliku o kilkakrotnie większej liczbie pikseli, a płacisz za przetwarzanie sekund, które wyrzucisz. Upscaler nie naprawi złego ujęcia: zniekształcona dłoń lub dryfujące logo wrócą większe.

Sprawdź plik. ffprobe pokazuje to, co naprawdę wysyłasz, w tym długość, która na ekranie zaokrągla się do „60 sekund”, a wynosi 60,4:

bash
ffprobe -v error \
  -show_entries format=duration,size:stream=codec_type,codec_name,width,height,avg_frame_rate,sample_rate,channels \
  -of json approved-source.mp4

Są trzy rzeczy do sprawdzenia. Długość musi mieścić się między 3 a 60 sekundami. Klip z telefonu może odtwarzać się pionowo, podczas gdy zapisana klatka jest pozioma plus znacznik obrotu (ffprobe -show_streams wymienia go w side data); wypal obrót przed wgraniem. I zwróć uwagę na strumień audio: porównasz go z wynikiem.

Pomiń klipy, które są już wystarczająco duże. Klip na poziomie lub powyżej wraca mniej więcej tego samego rozmiaru, a mimo to jest płatny: klip 786x1178 wysłany w 720p wrócił jako 784x1176. Jeśli źródło już spełnia specyfikację celu, wyeksportuj je i na tym kończ.

Zacznij od najczystszego mastera. Bloki kompresji i szum powiększają się razem ze wszystkim innym. Użyj mastera z generowania lub montażu, a nie kopii ponownie pobranej z kanału społecznościowego.

Lista pięciu kroków: wybierz ujęcie, zamknij montaż, przeskaluj, sprawdź obraz, synchronizację i dźwięk, wyeksportuj dla celu.
Wybierz ujęcie, zamknij montaż, przeskaluj, sprawdź, potem eksportuj.

Wybierz poziom na podstawie celu

Poziom to budżet pikseli z zachowanymi proporcjami, więc nietypowe źródła wracają w nietypowych rozmiarach. Klip 832x480 wrócił jako 1896x1094 w 1080p i jako 3792x2188 w 4K; klip 854x480 wrócił jako 1922x1080. Nie oczekuj dokładnie 1920x1080.

  • 720p lub 1080p dla kanałów, stron docelowych i reklam. Kosztują tyle samo, więc wybieraj według celu, a nie ceny. 1080p jest wartością domyślną i zwykle właściwym wyborem.
  • 2K lub 4K dla dużych ekranów, prezentacji lub gdy zamierzasz później przycinać. Kosztują dwa i cztery razy więcej oraz zajmują więcej czasu: około 35 sekund dla zadania 5-sekundowego w 1080p i około 100 sekund w 4K. Plik 5-sekundowy w 4K ma około 19 MB.
  • Jeśli cel wymaga dokładnego płótna, na przykład 1080x1920 dla kanału pionowego, traktuj to jako osobny krok eksportu po skalowaniu.

Skalowanie klipu poziomego, a potem przycinanie go do pionu oznacza opłacenie pikseli, które odrzucasz. Ustal kadr przed skalowaniem i wyślij kompozycję końcową.

Trzy kadry o różnych kształtach, pod nimi poziom i płótno eksportu: poziom wyznacza zwrócony rozmiar, osobny eksport wyznacza płótno celu.
Poziom wyznacza zwrócony rozmiar; płótno celu to osobny eksport.

Najpierw wypróbuj w Playground

  1. Otwórz stronę Video Upscaler i zostań w karcie Playground, w widoku Form. Zaloguj się kontem z saldem, aby uruchomić.
  2. W polu Input video umieść zatwierdzony plik MP4 (do 90 MB) albo wklej bezpośredni link do pliku przez Asset URL. Strona, która odtwarza wideo, zwraca HTML, a wywołanie kończy się niepowodzeniem, a opłata jest zwracana; przesłanie pliku jest najpewniejszą drogą.
  3. Ustaw Resolution na 720p, 1080p, 2K lub 4K. Pole jest oznaczone jako wpływające na cenę, a szacunek aktualizuje się wraz z wyborem.
  4. Uruchom, odtwórz wynik na tle źródła (patrz kontrole poniżej) i dopiero potem skopiuj go do własnej pamięci.

Klip 5-sekundowy kosztuje kilka centów nawet w 4K, więc wypróbuj swój prawdziwy klip na poziomie, na którym zamierzasz go dostarczyć, zanim napiszesz kod.

Potem uruchom to z kodu

Zainstaluj SDK Pythona (pip install spicyapi), ustaw SPICY_API_KEY w środowisku serwera i uruchom:

python
import uuid
from spicyapi import SpicyClient, output_assets

client = SpicyClient()  # reads SPICY_API_KEY from the environment

task = client.create_task(
    model="spicyapi/video-upscaler-v1/upscale",
    input_data={
        "video_url": "https://example.com/approved-product-ad.mp4",
        "resolution": "1080p",
    },
    idempotency_key=str(uuid.uuid4()),  # one key per approved clip and tier
)

print("Resume task:", task["taskId"], flush=True)
final = client.wait_for_terminal(task["taskId"])
if final["state"] != "succeeded":
    raise RuntimeError(f"{task['taskId']} ended as {final['state']}: {final.get('errorCode')}")
assets = output_assets(final)
if not assets or any(a.get("pending") or a.get("unavailable") or not a.get("url") for a in assets):
    raise RuntimeError(f"Task {task['taskId']} has no ready output; check this task before a new run")
print(assets[0]["url"])  # copy the file to your own storage now

Tworzenie, oczekiwanie, ponowienia, kody błędów i pobieranie są opisane w przewodniku po zadaniach oraz referencji SDK Pythona; plik lokalny przechodzi przez darmowy przepływ przesyłania i jest przekazywany jako URI spicy://. Link do wyniku jest krótkotrwały, a plik jest przechowywany przez około 14 dni, więc zanim oprzesz na nim swój proces, przeczytaj o przechowywaniu i dostarczaniu. Zadanie w stanie succeeded oznacza tylko, że usługa zakończyła pracę; oznacz klip jako dostarczony dopiero po przejściu kontroli poniżej.

Albo niech uruchomi to agent

Gdy asystent ma wykonać skalowanie, wszystkie trzy oficjalne narzędzia pokazują cenę i pytają o zgodę przed płatnym wywołaniem.

  • CLI. Umieść {"video_url": "https://example.com/approved-product-ad.mp4", "resolution": "1080p"} w input.json, a potem:

``bash spicyapi tasks create --model spicyapi/video-upscaler-v1/upscale --input-file input.json --wait ``

Zobacz dokumentację CLI; npx @spicyapi/cli działa bez instalacji.

  • Serwer MCP. Dodaj serwer MCP, a potem zapytaj: „Upscale approved-source.mp4 to 1080p with Video Upscaler.” Przesyła plik przez spicyapi_upload_file, wywołuje spicyapi_task_create, które zatrzymuje się na potwierdzenie ceny, a następnie spicyapi_task_wait.
  • Skill. npx skills add spicyapi-ai/spicy-skill instaluje Agent Skill, który sprawia, że asystent programistyczny czyta aktualny schemat modelu zamiast zgadywać nazwy pól.

Sprawdź wynik względem źródła

Uruchom tę samą sondę na obu plikach i porównaj. To krótki skrypt, który wypisuje po jednym wierszu na klip:

bash
probe() {
  ffprobe -v error -of json \
    -show_entries format=duration,size:stream=codec_type,codec_name,width,height,avg_frame_rate,sample_rate,channels,duration "$1" |
  jq -c '{size_bytes: (.format.size|tonumber), duration: (.format.duration|tonumber),
    video: (.streams|map(select(.codec_type=="video"))[0]|{codec:.codec_name,w:.width,h:.height,fps:.avg_frame_rate}),
    audio: (.streams|map(select(.codec_type=="audio"))[0]|if .==null then null else {codec:.codec_name,rate:.sample_rate,ch:.channels} end)}'
}
probe approved-source.mp4
probe returned.mp4

Co potwierdzić:

  1. Rozmiar i kształt. Proporcje zgadzają się ze źródłem, a wymiary są takie, jakie powinien dać wybrany poziom. Zapisz rzeczywistą szerokość i wysokość; nie przepisuj ich z nazwy poziomu.
  2. Długość. Długość zgadza się ze źródłem. Jeśli cel zależy od dokładnych punktów cięcia, sprawdź pierwszą i ostatnią klatkę, a nie tylko zaokrągloną liczbę.
  3. Dźwięk. Zwrócony plik ma strumień audio o tej samej liczbie kanałów i tej samej długości co źródło. Samo istnienie strumienia nie dowodzi, że jest poprawny, więc odtwórz oba pliki w tych samych miejscach: pierwsze wypowiedziane słowo, cięcie, ostatnia fraza. Jeśli źródło było celowo bez dźwięku, wynik też powinien być bez dźwięku.
  4. Obraz w ruchu. Obejrzyj cały klip w normalnej prędkości, zanim przejrzysz klatki nieruchome. Migotanie, drżąca faktura i aureole wokół poruszających się krawędzi widać przy odtwarzaniu, a w klatce nieruchomej prawie nigdy.
  5. Detal, który niesie znaczenie. Etykiety produktów, logotypy, tekst i twarze to miejsca, w których upscaler może wymyślić wiarygodny detal zamiast odzyskać prawdziwy. Porównaj je ze źródłem przy tym samym przycięciu. Zmieniony znak marki dyskwalifikuje klip, niezależnie od tego, jak wyraźnie wygląda.

Aby porównać jeden moment obok siebie, przeskalowując źródło do rozmiaru wyjściowego metodą najbliższego sąsiada, żeby zobaczyć jego prawdziwe piksele:

bash
ffmpeg -ss 2.0 -i returned.mp4 -ss 2.0 -i approved-source.mp4 \
  -filter_complex "[1:v]scale=1896:1094:flags=neighbor[s];[s][0:v]hstack" \
  -frames:v 1 compare-at-2s.png

Ustaw skalowanie na zwróconą szerokość i wysokość.

Bursztynowa butelka pokazana przed i po, powiększony detal, dłoń trzymająca lupę oraz karty obrazu, dźwięku i pomiarów.
Sprawdź osobno obraz, dźwięk i pomiary.

Wyeksportuj dokładny plik dostarczenia

Gdy cel wymaga stałego płótna, zakończ lokalnym eksportem. Przykład zakłada źródło w przybliżeniu pionowe, takie jak 2:3; przeskalowany klip poziomy uzupełniony do 1080x1920 zostawia wąski pasek obrazu. Uzupełnianie zachowuje całą klatkę; przycinanie wypełnia ją, ale obcina brzegi, więc po obu operacjach sprawdź produkt.

bash
ffmpeg -i accepted-upscale.mp4 \
  -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2" \
  -c:v libx264 -pix_fmt yuv420p -crf 18 \
  -c:a aac -b:a 192k delivery-vertical.mp4

To ponownie koduje dźwięk. Jeśli potrzebujesz oryginalnej ścieżki bez zmian, użyj -c:a copy, gdy cel to akceptuje, a potem uruchom sondę ponownie na wyeksportowanym pliku. Napisy i grafikę wypalaj po skalowaniu, aby krawędzie liter były rysowane w rozmiarze końcowym, a nie powiększane.

Przechowuj trzy pliki: zatwierdzone źródło, nietknięty wynik skalowania i każdy eksport. Późniejsze przycięcie lub ponowny eksport nigdy nie będzie kosztować drugiego skalowania.

Dwie odbitki fotograficzne butelki w różnych formatach, dwie półprzezroczyste koperty i narysowany przebieg fali.
Przechowuj master i każdy eksport dla odbiorcy jako osobne pliki.

Kiedy coś pójdzie nie tak

Napraw etap, który się nie powiódł, zamiast uruchamiać skalowanie od nowa.

ObjawPrawdopodobna przyczynaZrób tak
Zadanie się nie powiodło i otrzymało zwrot; długości nie da się odczytaćAdres URL prowadzi do strony internetowej, a nie do pliku MP4Podaj bezpośredni link do pliku albo prześlij plik
Odrzucone lub nieudane z powodu długościKlip jest krótszy niż 3 s albo dłuższy niż 60 sPrzytnij albo podziel na klipy zgodne z wymaganiami
Wynik nie wygląda na większyŹródło już było na tym poziomie lub powyżejWybierz wyższy poziom albo pomiń wywołanie
Wynik nie ma 1920x1080Poziom to budżet pikseli z zachowanymi proporcjamiWyeksportuj potrzebne płótno po skalowaniu
Pobieranie zwraca 403Link do wyniku wygasł (po około 20 minutach)Odczytaj zadanie ponownie, aby uzyskać świeży link
Ścieżka dźwiękowa różni się w pliku końcowymEksport ponownie zakodował lub zastąpił ścieżkęWyeksportuj ponownie z -c:a copy albo popraw miks wcześniej
Ten sam defekt na kilku klipachWspólna przyczyna, na przykład mocno skompresowany zestaw źródełWstrzymaj partię i napraw źródło, a nie każdy klip osobno

Próba pilotażowa przed partią

Prześlij jeden klip z rzeczywistym ruchem i ścieżką dźwiękową przez całą ścieżkę: sonda, skalowanie, pobranie, porównanie, eksport, a następnie odtwórz plik końcowy w rzeczywistym miejscu docelowym (kanale, odtwarzaczu, dużym ekranie). Lokalne odtwarzacze i platformy dekodują oraz przekodowują inaczej, więc tylko cel pokazuje, czy wynik się utrzyma. Do partii włącz szybki przesuw, reklamę pełną cięć i klip o drobnej fakturze, a dla każdego klipu zapisz długość źródła, rozliczone sekundy, poziom, końcową opłatę oraz powód odrzucenia.

Jeśli zastanawiasz się nad poziomami, zostaw ten sam klip i porównaj 1080p z 4K w rozmiarze, w jakim będzie oglądany. Jeśli 1080p już spełnia wymagania celu, dodatkowe 0,018 $ za sekundę nie kupuje niczego widocznego.

Decyzja

Traktuj zwrócony plik jako master do sprawdzenia, a nie jako gotowy materiał do dostarczenia. Wywołanie kosztuje kilka centów; koszty, których można uniknąć, to trzy rzeczy: powtarzanie montażu w wyższej rozdzielczości, skalowanie klipu, który już był wystarczająco duży, i wysyłanie pliku, w którym zmienił się dźwięk albo etykieta produktu. Otwórz stronę modelu Video Upscaler, aby wypróbować klip.

Także w językach English · 日本語 · 한국어 · Deutsch · Français · Español · Português (Brasil) · Русский · Italiano

Wypróbuj samodzielnie

Płacisz tylko za to, co uruchomisz — bez planów i subskrypcji.

Zrobione w MiniMax H3 · ByteDance Seedance 2.0 Fast