FFmpegを使用してオーディオに1秒の無音を追加します


14

AC3 5.1オーディオファイルがあるので、最初にx秒のサイレントオーディオを挿入します。これは、ビデオの多重化とは関係ありません。そのため、ビデオストリームに付随するオーディオストリームでのみ機能するように見えるため、そのオフセットは役に立ちません。私はffmpegでこれを達成したいと思います。何か案は?


ffmpegは同じコーデックの同じレートのものを追加または結合しますか?
サイコギーク

どうやら... @Psycogeek
Makaveli84

また、まったく同じコーデックレートとチャネルのサイレントオーディオファイルを生成できますか?ffmpeg.org/ffmpeg-filters.html#Examples-34?私自身はGUIメソッドを使用しますが、パラメーターがすべて同じである限り、あなたの質問はかなり簡単で非常に高速でなければなりません。ここに、Movに追加する場所が示されています。stackoverflow.com/questions/12368151
...

Ardourを使用して、必要なものを追加します。効果も必要な場合は、Calfプラグインもダウンロードしてください。–
ダッシュボード

回答:


23

concat demuxerの使用(開始および/または終了に無音を追加)

メインセグメントの再エンコードを回避する場合は、concat demuxerを使用します。このメソッドは、開始または終了(またはその両方)に無音を追加するために機能します。

  1. 使用anullsrcサイレントオーディオを作成することで、オーディオソースフィルタを。メインオーディオファイルの形式、チャンネルレイアウト、サンプルレートを一致させる必要があります。5.1チャンネル、48000 Hzのサンプルレート、1秒のサイレントAC3オーディオファイルを作成する例(これは質問の形式でした):

    ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
    
  2. 次に、input.txt連結するファイルをリストした名前のテキストファイルを作成します。

    file 'silent.ac3'
    file 'main.ac3'
    

    代わりに最後に無音が必要な場合は、でファイルの順序を切り替えるだけですinput.txt

  3. これで、concat demuxerを使用してファイルを連結できます。

    ffmpeg -f concat -i input.txt -codec copy output.ac3
    

concatフィルターの使用(最初と最後に無音を追加)

1つのコマンドですべてを実行する場合、または入力とは異なる形式で出力する場合(このメソッドはとにかく再エンコードされるため)、concatフィルターを使用します。このメソッドは、開始または終了、またはその両方に無音を追加するために機能します。

ステレオ、44100 Hzのサンプルレート入力の先頭に1秒の無音を追加する例:

ffmpeg -f lavfi -t 1 -i anullsrc=channel_layout=stereo:sample_rate=44100 -i audio.oga -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" output.m4a
  • フィルタリングにより、再エンコードが行われますが、連結デマルチプレクサは行われません。

  • anullsrcでは、チャネルレイアウトと入力のサンプルレートを一致させることをお勧めします。

  • 代わりに無音を最後に追加したい場合は、concatフィルターに与えられた入力の順序を切り替えるだけです[1:a][0:a]concat=n=2:v=0:a=1


遅延フィルターの使用(最初に無音を追加)

1つのコマンドですべてを実行する場合、または入力とは異なる形式で出力する場合(このメソッドはいずれにしても再エンコードするため)、遅延オーディオフィルターを使用します。これは、ファイルの先頭に無音を追加する場合にのみ機能します。

この例では、ステレオ入力の先頭に1秒の無音を追加します。

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • フィルタリングにより、再エンコードが行われますが、連結デマルチプレクサは行われません。
  • 値はミリ秒単位です。最近のバージョン(現在のgit masterまたはFFmpeg 4.1より新しいもの)のユーザーは、代わり1sに1秒間使用できます。
  • 各チャネルには独自の遅延が必要です。たとえば、モノラル入力ではを使用adelay=1000し、5.1入力ではを使用しますadelay=1000|1000|1000|1000|1000|1000

apadフィルターの使用(最後に無音を追加)

1つのコマンドですべてを実行する場合、または入力とは異なる形式に出力する場合(このメソッドはいずれにしても再エンコードするため)、apadオーディオフィルターを使用します。これは、ファイルの最後に無音を追加する場合にのみ機能します。

この例では、最後に1秒の無音が追加されます。

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
  • フィルタリングにより、再エンコードが行われますが、連結デマルチプレクサは行われません。

  • このpad_durオプションはFFmpeg 4.1のリリース後に追加されたため、git masterブランチからの最近のビルドを使用するか、FFmpeg 4.2を待つ必要があります。


5
[Parsed_aevalsrc_0 @ 000000000195fec0] This syntax is deprecated. Use '|' to sep arate the list items.新しい構文は-i "aevalsrc=0|0|0|0|0|0:d=1"
スティーブンペニー14年

一度に複数のファイルに対してこれを行うことはできますか?
アーロンフランケ

@AaronFrankeはい、しかしffmpegにはそのような機能はありません。コマンドをループするには、シェルまたはスクリプト言語を使用する必要があります。お使いのOSは不明なので、ターンキーソリューションを提供することはできませんが、ffmpegを使用してディレクトリ全体を変換する方法を参照してください一般的な情報については(不必要に複雑で非効率的であるため、受け入れられた回答をスキップしてください)。
llogan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.