簡短回答
原廠拿到的不是圖片,而是你那邊伺服器返回的一段報錯。瀏覽器能開啟,只能說明瀏覽器下載一次沒問題,不能說明原廠伺服器抓取也沒問題。 典型報錯如下,提交任務時直接返回 400,不會建立任務:received: "" 表示原廠沒有從下載到的內容裡識別出任何圖片格式。
最省事的改法:把圖片放到普通的物件儲存或 CDN 上,用一個乾淨的公網直鏈(例如 https://cdn.example.com/xxx.png)。
一個真實案例
一位客戶的首幀圖連結長這樣:
最後一行說明圖片本身和請求引數都沒問題,問題只出在這個連結上。
為什麼會有這種連結
這不是圖片地址,而是一個業務介面:使用者的私有檔案存在後臺,每次需要下載時,由應用臨時簽發一個「下載授權」,裡面帶著過期時間、簽名和下載次數上限。這是保護私有檔案的常見做法:連結洩露出去也用不了多久、用不了幾次,每次下載也能記錄審計。 這種設計是給一個人在瀏覽器裡下載一次準備的,拿來給伺服器抓圖就會出問題:- 不支援 Range 請求:很多服務在抓取素材時,會先用
Range頭取檔案開頭幾個位元組來判斷格式,或者分段下載。這類介面只會整份返回檔案,碰到 Range 就報錯 - 限制下載次數:原廠抓取素材時,可能會探測、下載、失敗後重試,不一定只下載一次。次數用完後,返回的就是一段報錯 JSON
- 有效期太短:連結過期後返回的也不是圖片
三種傳法怎麼選
如果你的檔案存在自己的後臺、只能通過這種下載授權介面拿到,可以在提交前換一種方式出鏈:
- 檔案本來就在物件儲存裡(OSS、S3、R2 等):直接生成物件儲存的預簽名 URL,有效期設為 1 小時以上。預簽名 URL 只按時間過期,不限下載次數,也支援 Range
- 否則先把圖片轉存到一個公開的物件儲存或 CDN,再把新連結傳給 Seedance
提交前自查連結
在任意一臺能上網的機器上跑下面兩條命令,把<URL> 換成你的圖片連結(整個連結用單引號包起來,避免 & 被 shell 解析):
- 兩條命令返回的都是圖片,不是 JSON 或 HTML
- 多次下載都能成功,沒有次數限制
- 不需要 Cookie、登入態或額外的請求頭
- 有效期至少覆蓋到任務提交完成,建議 1 小時以上
- 公網可直接訪問,不在內網或 IP 白名單之後
相關文件
影片生成介面
圖片支援的三種傳法與全部請求引數
素材優先實踐
三種傳法在提交階段的耗時對比,以及入庫拿素材 ID 的步驟