Michael Madsens の Answer を少し拡張するには、次のようにします。
オーディオ ファイルをトリミングするには、次のいずれかで十分であることがわかりました。
ffmpeg -ss
<開始位置> -t
<期間> -i inputfile -c:a copy outputfile
ffmpeg -ss
<開始位置> -i inputfile -t
<期間> -c:a copy outputfile
注:は、次のようにも指定できる-acodec
エイリアスです。codec:a
c:a
メイン オプション FFMPEG ドキュメントで指定されているとおり
-t duration (input/output)
- 入力オプションとして (-i の前に) 使用すると、入力ファイルから読み取られるデータの期間を制限します。
- 出力オプションとして (出力 URL の前に) 使用すると、継続時間が継続時間に達した後に出力の書き込みを停止します。
-ss position (input/output)
- 入力オプションとして (-i の前に) 使用すると、この入力ファイル内の位置をシークします。
- 出力オプションとして (出力 URL の前に) 使用すると、タイムスタンプが position に達するまで、入力をデコードしますが破棄します。
duration
Time Duration Syntaxにposition
従います。
[-][HH:]MM:SS[.m...]
また[-]S+[.m...][s|ms|us]
サイドノート:FFMPEGで無音の間隔を検出する方法に関する回答も興味深いかもしれません。
入力または出力としてのシークと期間の違い
ほとんどの形式では、正確にシークすることはできないため、ffmpeg は位置の前にある最も近いシーク ポイントをシークすることに注意してください。トランスコーディングと -accurate_seek が有効 (デフォルト) の場合、シーク ポイントと位置の間のこの余分なセグメントはデコードされ、破棄されます。ストリーム コピーを実行する場合、または -noaccurate_seek を使用する場合は保持されます。
次のファイルでいくつかのテストを行いました。
Input #0, mp3, from 'test16s.mp3':
Duration: 00:00:16.20, start: 0.025057, bitrate: 128 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s
元の出力と比較して Audacity の出力を調整し、次の結果を得ました。
ffmpeg -ss 3 -t 5 -i test16s.mp3 -c:a copy out.mp3
- 開始: 3s+00756samples (3.017142857s)
- 終了: 8s+02062samples (8.04675737s)
- 持続時間 : 5s+01306samples (5.029614512s)
ffmpeg -ss 3 -i test16s.mp3 -t 5 -c:a copy out.mp3
- 開始: 3s+00756samples (3.017142857s)
- 終了: 8s+00910samples (8.020634921s)
- 持続時間 : 5s+00154samples (5.003492063s)
ffmpeg -i test16s.mp3 -ss 3 -t 5 -c:a copy out.mp3
- 警告: これにより、一部の mp3 デコーダーが開こうとするとエラーが発生するファイルが作成されました。
- 開始: 2 秒 + 42184 サンプル (2.956553288 秒)
- 終了: 8s+01071samples (8.024285714s)
- 持続時間 : 5s+02987samples (5.067732426s)
ffmpeg -t 5 -i test16s.mp3 -ss 3 -c:a copy out.mp3
- 警告: これにより、一部の mp3 デコーダーが開こうとするとエラーが発生するファイルが作成されました。
- 開始: 2 秒 + 42184 サンプル (2.956553288 秒)
- 終了: 5s+02043samples (5.046326531s)
- 持続時間 : 2s+03959samples (2.089773243)
シーク ジャンプを確認しようとして、以下を使用して興味深い結果を見つけました。
Stream Copyを使用すると、特定のファイル(Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s)の最小シーク解像度が次のように表示されます。
- シーク ステップ : 1152 サンプル、26.122449 ミリ秒
- 最大 70 ミリ秒のシーク位置エラー