Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

FFmpeg concat加了-safe 0仍失敗?先找出錯誤層再加參數

保留原清單、解析後的輸入位址與參數邊界。合成WAV對照將檔名策略、解析、位址基準和協定許可分開檢查。

原創編輯插畫:清單解析、位址解析與協定許可分層檢查。
原創編輯插畫:清單解析、位址解析與協定許可分層檢查。 Watch at Ease

concat解多工器的-safe 0允許預設策略拒絕的檔名,卻不能修復損壞清單、建立遺失檔案或放行所有巢狀協定。應追蹤第一條具體錯誤,不能只反覆修改失敗命令的最後一行。

修改前先保留完整現場

保持原媒體不變,保存實際清單檔、確切執行檔與組建版本、工作目錄和完整stderr。記錄-i接收一般檔案、標準輸入還是包裝程式產生的位址。不要依手打或AI重排的紀錄判斷檔名。

可信本機清單可用ffprobe -v error -f concat -safe 0 -i list.ffconcat -show_streams -of json檢查,並換上實際路徑。它不會產生拼接媒體。即使stdout有JSON,也應保留退出狀態及stderr;空JSON不代表成功。

用一般檔案基線分開策略與解析

在小型清單副本只放一個已知本機輸入。含空格的項目可寫為file 'clip one.wav'。單引號屬於清單語法;命令列清單路徑外的雙引號由另一個解析器處理。檔名有撇號時,應依concat文件跳脫。

我們以0.1秒合成WAV,在Ubuntu ffprobe 6.1.1-3ubuntu5測試:safe 1拒絕該項目,safe 0能開啟;項目改用雙引號仍失敗。清單移至子目錄後,相對路徑的解析位址改變,改用正確絕對路徑才恢復。這是受控Linux觀察,不是Windows或Unicode診斷。

標準輸入與協定錯誤另開分支

若一般清單能開啟而標準輸入失敗,應比較確切解析位址與協定名稱。我們的組建中-i -使用fd。file,pipe允許清單拒絕fd;允許實際傳輸協定後,相對或未加前綴的絕對路徑仍落在fd之下;改成明確file:絕對位址後才開啟。

不要把這份允許清單當通用修復。先看實際組建與原錯誤,只允許可信輸入真正需要的協定,或維持較簡單的一般清單方案。-safe 0不能修復協定拒絕。若未偵測到串流,把後續map改成可選,可能只是隱藏症狀,沒有開啟目標輸入。

保留包裝參數,核對正確結果

Python中,將執行檔及每個參數分別作為subprocess.run清單元素,使用shell=False。擷取stdout、stderr與returncode,並在文字解碼或換行轉換前另存清單原始位元組。在參數清單加shell引號,不能修復獨立的concat檔案語法。Windows參數轉換與批次檔另有文件規則。

每次只改一處,重複相同探測,確認開啟目標輸入及其串流。之後再分別核對串流相容性、所需軌道與完整輸出。開啟後的時間戳警告屬另一項調查;探測成功或隱藏錯誤,都不能證明拼接正確。

原創編輯插畫:合成WAV對照區分一般清單與標準輸入。
原創編輯插畫:合成WAV對照區分一般清單與標準輸入。 Watch at Ease