gpt4 book ai didi

android - 当某些其他声音插入到ffmpeg的混音中时,如何停止声音?

转载 作者:行者123 更新时间:2023-12-04 23:01:15 30 4
gpt4 key购买 nike

我正在使用一个 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
目的是生成鼓录音,所以我想模拟踩镲声音的动态: 演奏关闭的踩镲时,如果打开的踩镲还在发声,则会立即停止播放。任何其他声音都不会发生相同的行为。
让这更具挑战性的一点是,在打开踩镲和闭合踩镲之间也可以播放其他声音,理论上声音中断行为应该正常工作。
下面是一段录音,展示了预期的结果。 (我的应用已经在内部重现了我需要的声音结果,所以我只是用麦克风做了一个简单的录音来说明)
麦克风录音.wav https://drive.google.com/file/d/19x19Fd_URQVo-MMCmGEHIC1SjaQbpWrh/view?usp=sharing
请注意,在第一个音频 (ffmpeg record.wav) 中,第一个声音 (open hi-hat) 在播放第二个声音后继续播放。
在第二个音频 (mic record.wav) 中,第一个声音在播放第二个声音后立即停止。
ffmpeg 命令应该如何得到预期的结果?

最佳答案

虽然我不确定 FFmpeg 是合成音乐的正确工具,但这里有几种方法可以实现您的目标。首先,我建议一次“创作”一种乐器(在鼓组的情况下,一个鼓/钹),如下图所示,然后将所有乐器的音轨混合在一起。
现在,让我们使用前 3 个踩镲 fragment 来展示如何构建过滤器图来形成踩镲音轨。
(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 ms 的重叠就足够了,那么您希望将每个段拉长 10 ms (0.01 s)。
[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];
c1c2是衰落曲线轮廓。 See this Wiki page for the available fade curves .
最后,我随意选择了 10 ms,可能太短了,所以尝试选择最佳的重叠持续时间。

关于android - 当某些其他声音插入到ffmpeg的混音中时,如何停止声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71714541/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com