import hashlib
import json
import os
import requests
APP_KEY = os.environ["GHOSTCUT_APP_KEY"]
APP_SECRET = os.environ["GHOSTCUT_APP_SECRET"]
BASE_URL = "https://api.zhaoli.com"
VIDEO_URL = "https://example.com/input.mp4"
def post(path, payload):
body = json.dumps(payload, ensure_ascii=False, separators=(",", ":"))
body_md5 = hashlib.md5(body.encode("utf-8")).hexdigest()
app_sign = hashlib.md5((body_md5 + APP_SECRET).encode("utf-8")).hexdigest()
response = requests.post(
BASE_URL + path,
headers={
"Content-Type": "application/json",
"AppKey": APP_KEY,
"AppSign": app_sign,
},
data=body.encode("utf-8"),
timeout=30,
)
response.raise_for_status()
return response.json()
payload = {
"urls": [VIDEO_URL],
"needChineseOcclude": 2,
"videoInpaintLang": "all",
"extraOptions": json.dumps(
{"extra_inpaint_config": {"model": "advanced_lite"}},
separators=(",", ":"),
),
"videoInpaintMasks": json.dumps(
[{
"type": "remove_only_ocr",
"start": 0,
"end": 99999,
"region": [[0, 0], [1, 0], [1, 1], [0, 1]],
}],
separators=(",", ":"),
),
}
result = post("/v-w-c/gateway/ve/work/free", payload)
work_id = result["body"]["dataList"][0]["id"]
print("work_id:", work_id)
status = post("/v-w-c/gateway/ve/work/status", {"idWorks": [work_id]})
print(json.dumps(status, ensure_ascii=False, indent=2))
Substitua VIDEO_URL pela sua URL pública de vídeo. Vídeos locais precisam ser enviados primeiro para obter uma URL acessível. Configure AppKey e AppSecret por variáveis de ambiente antes de executar.
01
A assinatura e o corpo da requisição devem corresponder
O exemplo serializa o payload em JSON compacto, gera o cabeçalho com AppSign = md5(md5(body_str) + AppSecret) e envia exatamente o mesmo body_str.
02
Criar uma tarefa significa apenas que ela entrou na fila
Depois que /work/free retornar sucesso, salve body.dataList[0].id. Consulte resultados de vídeo comuns com /work/status; processStatus == 1 significa processamento concluído com sucesso.
03
Envie mídia local primeiro
Para mídia local, solicite credenciais de upload primeiro, envie o arquivo para o OSS e use a URL retornada nas chamadas seguintes.