「ffmpeg -ss」は正確なシークのためにどのフォーマットをサポートしていますか? mp3 は動作しないようです。.wav のみです

「ffmpeg -ss」は正確なシークのためにどのフォーマットをサポートしていますか? mp3 は動作しないようです。.wav のみです

ffmpeg -ss 00:00:00 -i 'input.mp3' -to 00:25:00 -c 出力.mp3 をコピー

この特定のスクリプトを記述しているときに、mp3 ファイルには機能するが、.wav ファイルには機能しないことに気付きました。何が起こるかというと、(奇妙なことに) 25 分の .mp3 ファイルにコピーされますが、本質的に最後のオーディオがクリップされます。何らかの理由で実際のオーディオが 25 分の境界を超えて引き伸ばされるため、クリップが発生します。ただし、.wav ファイルではこれは発生しません。マニュアル ページを検索したところ、以下のことが分かりました。

-ss 位置 (入力/出力) 入力オプションとして使用する場合 (-i の前)、この入力ファイル内で位置を検索します。ほとんどの形式では正確にシークすることはできないため、ffmpeg は位置の前に最も近いシーク ポイントをシークすることに注意してください。トランスコーディングと -accurate_seek が有効になっている場合 (デフォルト)、シーク ポイントと位置の間のこの余分なセグメントはデコードされ、破棄されます。ストリーム コピーを実行する場合、または -noaccurate_seek が使用されている場合は、保持されます。

私の質問は、まず、.mp3 は正確にシークするサポート対象フォーマットではないようですが、発生した状況から判断すると、.wav ファイルはサポートされているようです。これがオーディオがクリップされた理由でしょうか? 次に、100% 正確な -ss 時間を持つサポート対象フォーマットに関するドキュメントはありますか? どのマニュアル ページにも見つかりません。ドキュメントが存在するかもしれませんが、存在する場合はそのセクションにリストされているはずです。これは ffmpeg に関する不適切なドキュメントであり、更新する必要があります。役に立たない曖昧な情報です。

答え1

完全にシーク可能な形式は、非圧縮形式のみです。つまり、wav と pcm です。すべての圧縮形式は「フレーム」にエンコードされます (それが圧縮の仕組みであるため)。コーデック コピーを使用すると、フレーム全体のコピーのみが可能です。コーデックごとに、フレームあたりのサンプル数が異なります。

関連情報