2016-06-28 5 views
1

ffmpegを使用すると、オーディオのレベルをどれくらいコントロールできますか?たとえば、プログラムのタイムラインに「M」の形をマッピングしたいと考えています。ffmpegで複雑な音量が変化する

t0 - t1 : fade in from 0 to 1 
t1 - t2 : play at full volume 
t2 - t3 : fade out to 25% 
t3 - t4 : play at 25% volume 
t4 - t5 : fade in (from 25%) to full volume 
t5 - t6 : play at full volume 
t6 - t7 : fade out from 1 to 0 

これはできますか?私が試した(アペイドとボリューム、そしてタイムライン編集を使用した)組み合わせはこれまで成功していません。

ina="infile.caf" 
out="outfile.mp3" 

time ffmpeg -i $ina -af \ 
"afade=enable='between(t,0,3)':t=in:ss=0:d=3, \ 
afade=enable='between(t,7,8)':t=out:st=7:d=1, \ 
volume=enable='between(t,8,12)':volume=.25:eval=frame, \ 
afade=enable='between(t,12,13)':t=in:st=12:d=1, \ 
afade=enable='between(t,15,18)':t=out:st=15:d=3" \ 
$out 

..しかし、2つの中間点(それは25%にフェードアウトポイントして、それがフルボリュームに再びフェードインポイント)であり:ここで

は近いものですグリッチ - 可聴音のクリックです。

+0

あなたはどのようなコマンドを試してみましたか? – Mulvya

+0

@Mulvya、私は私が試みてきたことの例を加えました。それは近いが、まだ受け入れられていない。 – coco

+0

フェードフィルタは0になるか0から開始します。ボリュームフィルタを使用して完全に行う必要があります。私はまもなく答えを出します。 – Mulvya

答えて

3

ボリュームフィルタを使って完全に行うことを提案していましたが、マイナーな変更を加えて現在の方法で行うことができます。

ffmpeg -i $ina -af \ 
"afade=enable='between(t,0,3)':t=in:ss=0:d=3, \ 
afade=enable='between(t,7,8)':t=out:st=7:d=1.333, \ 
volume=enable='between(t,8,12)':volume=.25:eval=frame, \ 
afade=enable='between(t,12,13)':t=in:st=11.6667:d=1.333, \ 
afade=enable='between(t,15,18)':t=out:st=15:d=3" \ 
$out 

フェードフィルタはに行くか、ゼロからのスタートなので、トリックは、範囲の開始と終了時に音量が所望のレベルになるように、あなたのフェード開始時間、期間、および有効範囲を設定することです。デフォルトのカーブは線形なので、計算は簡単でなければなりません。 @Mulvyaによって(偉大な)答えの代わりとして

+0

はい、それは驚くほどうまくいきます。私は想像しました、たとえ "afade"の曲線が異なっていても、挿入点が見つかると滑らかに見えます。しかし、私は容認しなければなりません、私は 'volume'フィルタだけを使ってどのようにすることができるのか楽しみにしていました!ボリュームパスがさらに複雑になった場合、私はそのような制御が可能かどうか疑問に思っていました。 – coco

+0

例です。 (t、7,8) ':volume =' 1 - 0.75 *(t - 7) ':eval = frame' – Mulvya

+0

これは、25%私は前に 'volume'フィルタを連鎖させるのに問題がありましたが、それを理解しました。私は上記のあなたのソリューションを書きますが、 'volume'を使用します。ありがとう! – coco

3

、ここで同じ出力を生成volumeフィルタを用いた方法である:

infile="infile.caf" 
outfile="outfile.mp3" 

ffmpeg -i $ina -af \ 
"volume=enable='between(t,0,3)':volume='t/3.0':eval=frame, \ 
volume=enable='between(t,3,7)':volume='1':eval=frame, \ 
volume=enable='between(t,7,8)':volume='1 - 0.75 * (t - 7)':eval=frame, \ 
volume=enable='between(t,8,12)':volume='0.25':eval=frame, \ 
volume=enable='between(t,12,13)':volume='.25 + 0.75 * (t - 12)':eval=frame, \ 
volume=enable='between(t,13,15)':volume='1':eval=frame, \ 
volume=enable='between(t,15,18)':volume='1 - (t - 15)/3.0':eval=frame" \ 
$out 
関連する問題