57

この質問に続いて、私はffmpegを使用してMP3をトリミングすることにしました。別の質問で、私はそれを行うこの方法を見つけました:

ffmpeg -t 30 -acodec copy -i inputfile.mp3 outputfile.mp3

問題は、最初の30秒間はトリミングしたくないということです。つまり、30秒から100秒のように、xからx+nまでトリミングしたいのです。どうすればこれを行うことができますか?

私はffmpegの男性を読んでいますが、特にffmpegについて発見したばかりで、オーディオ/ビデオ編集ソフトウェアに精通していないため、これは実際には簡単ではありません。

4

2 に答える 2

99

-tおよび-ss引数を見てください。彼らはあなたが望むことをするべきです。

-t期間

トランスコード/キャプチャされたビデオシーケンスを秒単位で指定された期間に制限します。hh:mm:ss[.xxx]構文もサポートされています。

-ss位置 '

秒単位で指定された時間位置を探します。hh:mm:ss[.xxx]構文もサポートされています。

たとえば、ffmpeg -ss 30 -t 70 -i inputfile.mp3 -acodec copy outputfile.mp3あなたが言及した範囲(30s-100s)のトリックを実行する必要があります。

于 2009-09-07T19:48:58.687 に答える
10

Michael Madsens の Answer を少し拡張するには、次のようにします。

オーディオ ファイルをトリミングするには、次のいずれかで十分であることがわかりました。

  • ffmpeg -ss <開始位置> -t<期間> -i inputfile -c:a copy outputfile
  • ffmpeg -ss <開始位置> -i inputfile -t<期間> -c:a copy outputfile

注:は、次のようにも指定できる-acodecエイリアスです。codec:ac:a

メイン オプション FFMPEG ドキュメントで指定されているとおり

-t duration (input/output)

  • 入力オプションとして (-i の前に) 使用すると、入力ファイルから読み取られるデータの期間を制限します。
  • 出力オプションとして (出力 URL の前に) 使用すると、継続時間が継続時間に達した後に出力の書き込みを停止します。

-ss position (input/output)

  • 入力オプションとして (-i の前に) 使用すると、この入力ファイル内の位置をシークします。
  • 出力オプションとして (出力 URL の前に) 使用すると、タイムスタンプが position に達するまで、入力をデコードしますが破棄します。

durationTime Duration Syntaxposition従います。

  • [-][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)

シーク ジャンプを確認しようとして、以下を使用して興味深い結果を見つけました。

  • ffmpeg -ss <秒> -i test16s.mp3 -t 5 -c:a copy out.mp3

    • <秒> = 3、2.99、2.98、2.97
      • 開始: 3 秒 + 00756 サンプル (3.017142857 秒)、持続時間: 5 秒 + 00154
    • <秒> = 2.96
      • 開始: 同上、持続時間: 4s+41951
    • <秒> = 2.95
      • 開始: 2 秒 + 43704 (2.991020408)、終了: 7 秒 + 42707 持続時間: 4 秒 + 43103
    • <秒> = 2.94,2.93
      • 開始: 同上、持続時間: 4s+41951
    • <秒> = 2.92
      • 開始: 2 秒 + 42552 (2.964897959 秒)、持続時間: 4 秒 + 43103
  • ffmpeg -ss <秒> -t 5 -i test16s.mp3 -c:a copy out.mp3

    • <秒> = 3
      • 開始: 3 秒 + 00756 (3.017142857 秒)、持続時間: 5 秒 + 01306 (5.029614512 秒)
    • <秒> = 2.99、2.98、2.97
      • 開始: 同じ、持続時間: 5s+00155
    • <秒> = 2.96
      • 開始: 同じ、持続時間: 4s+43103
    • <秒> = 2.95
      • 開始: 2 秒 + 43704 (2.991020408)、終了: 7 秒 + 43859 持続時間: 5 秒 + 00155
    • <秒> = 2.94,2.93
      • 開始: 同じ、持続時間: 4s+43103
    • <秒> = 2.92
      • 開始: 2 秒 + 42552 (2.964897959 秒)、持続時間: 5 秒 + 00155

Stream Copyを使用すると、特定のファイル(Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s)の最小シーク解像度が次のように表示されます。

  • シーク ステップ : 1152 サンプル、26.122449 ミリ秒
  • 最大 70 ミリ秒のシーク位置エラー
于 2020-12-01T22:41:30.203 に答える