テクノロジー · 実用ガイド
FFmpeg の concat で DTS 非単調の警告?完成品を採用する前にパケット時刻を確認
ストリームコピーの連結が成功しても、全デコードフレームを残したまま再生時間が縮む場合があります。修復前にストリーム条件、区間の長さ、二つのタイムスタンプを比較します。

FFmpeg の DTS 非単調警告だけでは、フレームが削除されたとは判断できません。コマンドの正常終了も、出力の正しさを保証しません。連結処理はデコード画像を保持したまま、誤った再生タイムラインを割り当てる場合があります。
入力、concat リスト、完全なコマンドとログを保全します。警告が指すストリームを確認してから、ストリーム条件の不一致、誤った区間の長さ、実際に欠けたタイムスタンプを区別します。作業コピーを置き換える前に、内容と時間を別々の結果として検証します。
証拠を保持し実際のストリームを特定
元のクリップは変更せず、実験を新しい出力名に保存します。完全な FFmpeg バージョン、concat リスト、コマンド、stderr、ストリームマッピングを残します。警告の出力インデックスはマッピングに従います。0:1 が常に音声だと考えたり、最初の映像だけを調べたりしないでください。
各入力に ffprobe -v error -show_streams -show_format -of json input.mp4 を実行し、パスを実際のものに置き換えます。対応するストリーム数と種類、コーデック、time_base、画面サイズ、ピクセル形式、サンプルレート、チャンネル配置を比較します。追加音声、字幕、データは意図的に保持します。自動選択で正常終了しても、必要な全ストリームが含まれた証拠にはなりません。
タイムスタンプのフラグより先に境界を調査
問題の映像について ffprobe -v error -select_streams v:0 -show_packets -show_entries packet=pts_time,dts_time,duration_time -of json input.mp4 を取得します。a:0 や実際の対象も別に調べます。JSON は取得できない値を省略する場合があります。それをゼロではなく不明と記録し、異なる時間基準の生のカウントではなく時刻フィールドを比較します。
関連する最後のパケットと concat の duration、inpoint、outpoint 指令を確認します。デマルチプレクサーは長さで次のファイルをずらすため、条件が一致しても推測した長さが次の区間を早すぎる位置に置く場合があります。フレーム間圧縮のカットでも指定境界付近の余分なパケットが出ます。コンテナーの公称長を厳密な編集点だと考えないでください。
欠落した時刻と既存の誤った時刻を区別
現行の形式リファレンスは +genpts を、デコードタイムスタンプがある場合の欠落した表示タイムスタンプ生成と定義します。PTS と DTS を独立に調べます。DTS だけを表示して N/A が出ても PTS の欠落は証明できません。フィールド欠落や既存の逆行だけから、万能の修復コマンドは導けません。
avoid_negative_ts も時刻をずらすだけで、時間基準の互換性や連結長の正しさを保証しません。ログレベルを下げて警告を隠しても、変わるのは見え方です。フラグを試すなら元のログを残し、結果のパケット時刻、長さ、必要な内容を基準と比較します。
測定に基づく修復と適用範囲を確認
測定で concat の長さだけが誤っていると判明したら、コピーで修正した duration を試します。警告を消すためだけに数字を作らないでください。ストリームが互換でなければ互換コピーを作るか、デコードする concat フィルターと再エンコードを使います。対応ストリームとゼロ開始の区間時刻が必要で、解像度は明示的にそろえます。
同期した映像と音声は一緒に処理します。フィルターは最終以外の各区間で最長ストリームの長さを使い、短い音声に無音を足す場合があります。異なるフレームレートは可変フレームレートの出力になり得ます。結果を意図的に選びます。過去の一人の MKV 成功例はそのケースの証拠であり、コンテナー変更が全入力を直す保証ではありません。
内容と再生時間を別々に検証
Ubuntu FFmpeg 6.1.1 で四つの隔離した映像のみのケースを試しました。二つの二秒 H.264 クリップは正常に四秒になりました。最初の duration を 0.5 秒にすると 37 警告と 2.5 秒の出力になり、+genpts を足しても変わりませんでした。別の時間基準不一致では 50 警告と 1.967031 秒になりました。すべて正常終了し、順序付き 100 デコードフレームのハッシュは一致しました。
合成実験は読者のクリップ、音声、素材欠落を再現していません。SWGDE はデコードフレームやサンプルのハッシュを内容確認として説明しますが、時刻列は別に比較します。実際の結果の継ぎ目、認識できる開始と終了の内容、同期、意図した全長を確認します。ハッシュ一致や警告なしだけで再生時間を認証したり、元にないバイトを復元したりすることはできません。
