收尾帧生成视频,返回task_id Args: at: Access Token project_id: 项目ID prompt: 提示词 model_key: veo_3_1_i2v_s_fast_fl aspect_ratio: 视频宽高比 start_media_id: 起始帧mediaId end_media_id: 结束帧mediaId user_paygate_tier: 用
(
self,
at: str,
project_id: str,
prompt: str,
model_key: str,
aspect_ratio: str,
start_media_id: str,
end_media_id: str,
use_v2_model_config: bool = False,
user_paygate_tier: str = "PAYGATE_TIER_ONE",
token_id: Optional[int] = None,
token_video_concurrency: Optional[int] = None,
)
| 3123 | raise last_error |
| 3124 | |
| 3125 | async def generate_video_start_end( |
| 3126 | self, |
| 3127 | at: str, |
| 3128 | project_id: str, |
| 3129 | prompt: str, |
| 3130 | model_key: str, |
| 3131 | aspect_ratio: str, |
| 3132 | start_media_id: str, |
| 3133 | end_media_id: str, |
| 3134 | use_v2_model_config: bool = False, |
| 3135 | user_paygate_tier: str = "PAYGATE_TIER_ONE", |
| 3136 | token_id: Optional[int] = None, |
| 3137 | token_video_concurrency: Optional[int] = None, |
| 3138 | ) -> dict: |
| 3139 | """收尾帧生成视频,返回task_id |
| 3140 | |
| 3141 | Args: |
| 3142 | at: Access Token |
| 3143 | project_id: 项目ID |
| 3144 | prompt: 提示词 |
| 3145 | model_key: veo_3_1_i2v_s_fast_fl |
| 3146 | aspect_ratio: 视频宽高比 |
| 3147 | start_media_id: 起始帧mediaId |
| 3148 | end_media_id: 结束帧mediaId |
| 3149 | user_paygate_tier: 用户等级 |
| 3150 | |
| 3151 | Returns: |
| 3152 | 同 generate_video_text |
| 3153 | """ |
| 3154 | url = f"{self.api_base_url}/video:batchAsyncGenerateVideoStartAndEndImage" |
| 3155 | |
| 3156 | # 403/reCAPTCHA 重试逻辑 - reCAPTCHA evaluation failed 时允许更高重试上限 |
| 3157 | max_retries = self._resolve_generation_retry_budget(config.flow_max_retries) |
| 3158 | last_error = None |
| 3159 | retry_attempt = 0 |
| 3160 | session_id = self._generate_session_id() |
| 3161 | batch_id = str(uuid.uuid4()) |
| 3162 | video_context_warmed = False |
| 3163 | while retry_attempt < max_retries: |
| 3164 | # 每次重试都重新获取 reCAPTCHA token - 视频使用 VIDEO_GENERATION action |
| 3165 | launch_gate_acquired = False |
| 3166 | launch_ok, _, _ = await self._acquire_video_launch_gate( |
| 3167 | token_id=token_id, |
| 3168 | token_video_concurrency=token_video_concurrency, |
| 3169 | ) |
| 3170 | if not launch_ok: |
| 3171 | last_error = Exception("Video launch queue wait timeout") |
| 3172 | raise last_error |
| 3173 | |
| 3174 | launch_gate_acquired = True |
| 3175 | try: |
| 3176 | recaptcha_token, browser_id = await self._get_recaptcha_token( |
| 3177 | project_id, |
| 3178 | action="VIDEO_GENERATION", |
| 3179 | token_id=token_id |
| 3180 | ) |
| 3181 | finally: |
| 3182 | if launch_gate_acquired: |