テクノロジー · 実用ガイド

FFmpeg concatが-safe 0でも失敗?設定追加の前に失敗した層を確認

元のリスト、解決された入力URL、引数境界を保存。合成WAVの対照実験で名前の制限、構文、URL基準、許可を分ける。

オリジナル編集イラスト:リスト解析、URL解決、プロトコル許可を分ける。
オリジナル編集イラスト:リスト解析、URL解決、プロトコル許可を分ける。 Watch at Ease

concatデマルチプレクサの-safe 0は既定の名前制限を緩める。しかし壊れたリスト、存在しないファイル、入れ子プロトコルの許可は直さない。失敗命令の末尾だけを変えず、最初の具体的エラーを追おう。

変更前に一つの記録を作る

元のメディアは変更しない。実際のリスト、実行ファイルとビルド、作業ディレクトリ、stderr全体を保存する。-iが通常ファイル、標準入力、ラッパー生成URLのどれか記録する。手入力やAI整形後のログだけでファイル名を診断しない。

信頼できるローカルリストはffprobe -v error -f concat -safe 0 -i list.ffconcat -show_streams -of jsonで調べ、実パスに置き換える。結合メディアは作らない。stdoutにJSONがあっても終了状態とstderrを保存し、空JSONを成功と見なさない。

通常ファイルを基準に制限と構文を分ける

小さいリストのコピーに既知のローカル入力を一つ置く。空白のある項目はfile 'clip one.wav'と書ける。単一引用符はリストの構文であり、コマンドラインのリストパスを囲む二重引用符とは解析器が違う。アポストロフィはconcatの規則でエスケープする。

Ubuntu ffprobe 6.1.1-3ubuntu5で0.1秒の合成WAVを試すと、safe 1は拒否しsafe 0は開いた。項目を二重引用符にすると失敗した。リストをサブディレクトリに移すと相対パスの解決先が変わり、正しい絶対パスで開いた。Linuxの対照実験でありWindowsやUnicodeの診断ではない。

標準入力と許可エラーは別の分岐

通常リストだけ成功するなら、解決URLとエラーのプロトコル名を比べる。このビルドでは-i -がfdを使った。file,pipeの許可リストはfdを拒否し、必要な転送を許可しても相対パスや接頭辞なし絶対パスはfd下に解決された。明示したfile:絶対URLでは開いた。

この許可リストを万能設定としてコピーしない。実ビルドと元エラーを確認し、信頼する入力に必要なプロトコルだけを許可するか通常リストを使う。-safe 0はプロトコル拒否を直さない。ストリームがない状態で後のmapを任意にしても、入力を開かず症状を隠す場合がある。

ラッパー引数と正しい結果を確認

Pythonでは実行ファイルと各引数をsubprocess.runの別リスト要素にし、shell=Falseを使う。stdout、stderr、returncodeを取得し、文字復号や改行変換前のリストバイトは別に保存する。引数リスト内のシェル引用符はconcatファイル構文を直さない。Windowsの引数変換やバッチ処理には別の文書化された規則がある。

一度に一か所変えて同じ検査を繰り返し、目的の入力とストリームを確認する。その後に互換性、必要なトラック、出力全体を別途検証する。開いた後の時刻警告は別の調査だ。検査成功やエラー非表示だけでは正しい結合を証明できない。

オリジナル編集イラスト:合成WAVで通常リストと標準入力を比較。
オリジナル編集イラスト:合成WAVで通常リストと標準入力を比較。 Watch at Ease