[英]How to stop a sound when certain other sound is inserted in the mix in ffmpeg?
我正在使用 ffmpeg 命令獲取一組聲音,將它們混合到一個文件中,按特定時間間隔將它們分開。
以下是我今天的命令。
ffmpeg -i
close_hh.wav -i \
crash_l.wav -i \
crash_r.wav -i \
floor.wav -i \
kick_l.wav -i \
kick_r.wav -i \
open_hh.wav -i \
ride.wav -i \
snare.wav -i \
splash.wav -i \
tom_1.wav -i \
tom_2.wav -i \
tom_3.wav -filter_complex " [6]adelay=0|0[note_0]; [0]adelay=360|360[note_1]; [6]adelay=1260|1260[note_2]; [0]adelay=1537|1537[note_3]; [6]adelay=2494|2494[note_4]; [5]adelay=2767|2767[note_5]; [0]adelay=2969|2969[note_6]; [6]adelay=3673|3673[note_7]; [5]adelay=3924|3924[note_8]; [0]adelay=4132|4132[note_9]; [0][note_0][note_1][note_2][note_3][note_4][note_5][note_6][note_7][note_8][note_9]amix=inputs=11:normalize=0" record.wav
這是此命令生成的結果音頻:
ffmpg 記錄.wav: https://drive.google.com/file/d/1LFV4ImLKLnRCqZRhZ7OqZy4Ecq5fwT3j/view?usp=sharing
目的是生成鼓錄音,所以我想模擬踩鑔聲音的動態:當關閉的踩鑔演奏時,打開的踩鑔如果還在響,會立即停止播放。 任何其他聲音都不會發生相同的行為。
使這更具挑戰性的一點是,在打開踩鑔和關閉踩鑔之間也可以播放其他聲音,理論上聲音中斷行為應該正常工作。
以下是演示預期結果的錄音。 (我的應用程序已經在內部再現了我需要的聲音結果,所以我只是用麥克風做了一個簡單的錄音來說明)
mic record.wav https://drive.google.com/file/d/19x19Fd_URQVo-MMCmGEHIC1SjaQbpWrh/view?usp=sharing
請注意,在第一個音頻 (ffmpeg record.wav) 中,第一個聲音(打開踩鑔)在第二個播放后繼續播放。 在第二個音頻 (mic record.wav) 中,第一個聲音在第二個聲音播放后立即停止。
ffmpeg命令應該如何得到預期的結果?
雖然我不確定 FFmpeg 是合成音樂的正確工具,但這里有幾種方法可以幫助您實現目標。 首先,我建議如下圖所示一次“創作”一種樂器(在鼓組的情況下,一種鼓/鐃鈸),然后將樂器的完整音軌混合在一起。
現在,讓我們以前 3 個踩鑔片段來展示如何構建濾波器圖以形成踩鑔音軌。
(1) 將每個文件修剪到一定長度並連接所有流:
[0]atrim=duration=0.36[note_0]; \
[6]atrim=duration=0.9[note_1]; \
[0]atrim=duration=0.277[note_2]; \
[note_0][note_1][note_2]concat=3:0:1[aout]
雖然這有效,但如果在修剪的時刻有任何可聽見的聲音,您可能會聽到聲音突然中斷。 這帶來了替代...
(2) 將每個文件修剪到長度 + 額外和交叉淡入淡出:
假設 10 毫秒的重疊就足夠了,那么您希望將每個片段延長 10 毫秒(0.01 秒)。
[0]atrim=duration=0.37[note_0]; \
[6]atrim=duration=0.91[note_1]; \
[0]atrim=duration=0.277[note_2]; \ # last file remain same length
[note_0][note_1]acrossfade=d=0.01:c1=exp:c2=exp[notes_01] \
[note_01][note_2]acrossfade=d=0.01:c1=exp:c2=exp[notes_012]
這會變得很長,所以你可以縮短一點
[0]atrim=duration=0.37[note_0]; \
[6]atrim=duration=0.91,[note_0]acrossfade=d=0.01:c1=exp:c2=exp[notes_01]; \
[0]atrim=duration=0.277,[note_01]acrossfade=d=0.01:c1=exp:c2=exp[notes_012];
c1
和c2
是衰落曲線配置文件。 有關可用的淡入淡出曲線,請參閱此 Wiki 頁面。
最后,我隨意選擇了 10 毫秒,它可能太短了,因此請試驗並選擇最佳重疊持續時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.