Dri*_*Boy 23 ffmpeg mp3 audio-recording
我有一个包含更多歌曲的大 mp3 文件。有没有办法通过检测无声部分来拆分文件?我更喜欢命令行工具(例如 ffmpeg)。
尝试:
youtube-dl --ignore-errors --format bestaudio --extract-audio --audio-format mp3 --audio-quality 160K --output "%(title)s.%(ext)s" --yes-playlist
Rin*_*ind 17
您可能无法获得现成的解决方案,但需要自己创建脚本。
pydub就是为此而制作的(它在内部使用ffmpeg或 libav)并且它有一个函数,它split_on_silence()使用一些设置调用,例如keep_silence=100.
从计算器有些引用的是例子:37725416和45526996 而且从创作者pydub。
从第一个链接有趣的部分:
# Load your audio.
song = AudioSegment.from_mp3("your_audio.mp3")
chunks = split_on_silence (
# Use the loaded audio.
song,
# Specify that a silent chunk must be at least 2 seconds or 2000 ms long.
min_silence_len = 2000,
# Consider a chunk silent if it's quieter than -16 dBFS.
# (You may want to adjust this parameter.)
silence_thresh = -16
)
Run Code Online (Sandbox Code Playgroud)
llo*_*gan 14
您可以使用 手动执行此操作ffmpeg,当然,如果您愿意,也可以全部编写脚本。
使用Silencedetect 过滤器获得静音:
ffmpeg -i input.mp3 -af silencedetect -f null -
Run Code Online (Sandbox Code Playgroud)
请注意,静音的默认最小长度设置为 2 秒,但可以调整。见ffmpeg -h filter=silencedetect。
还有一个silenceremove 过滤器。
示例输出使用awk:
$ ffmpeg -i input.mp3 -af silencedetect=d=0.5 -f null - |& awk '/silencedetect/ {print $4,$5}'
silence_start: 1.20837
silence_end: 1.92546
silence_start: 3.51778
silence_end: 4.0881
silence_start: 6.40315
silence_end: 7.7922
Run Code Online (Sandbox Code Playgroud)
有几种拆分方法。
使用段复用器进行拆分的示例:
ffmpeg -i input.mp3 -f segment -segment_times 1.20837,1.92546,3.51778,4.0881,6.40315,7.7922 -reset_timestamps 1 -map 0:a -c:a copy output_%03d.mp3
Run Code Online (Sandbox Code Playgroud)
您将需要删除静默段。您可以对输出文件执行Bash 循环,使用 Silencedetect 查找这些段,然后删除/移动它们(如果要编写该过程的脚本)。
请注意使用-c:a copywhich 启用流复制模式,因此您的 MP3 不会被重新编码以避免生成丢失。
-ss和-t或-to使用这些选项将省略静默段,但需要更多的工作来制作命令:
ffmpeg -i input.mp3 -to 1.20837 -c copy output_01.mp3
ffmpeg -i input.mp3 -ss 1.92546 -to 3.51778 -c copy output_02.mp3
Run Code Online (Sandbox Code Playgroud)
…等等。
或者在一个命令中执行:
ffmpeg -i input.mp3 -to 1.20837 -c copy output_01.mp3 -ss 1.92546 -to 3.51778 -c copy output_02.mp3
Run Code Online (Sandbox Code Playgroud)
与在 segment muxer 命令中一样,这也使用流复制。
mp3splt是一个用于分割mp3的命令,我相信 mp3splt 有一个静音检测器(以及其他检测方法)......无需重新编码。安装:
sudo apt install mp3splt
Run Code Online (Sandbox Code Playgroud)
使用静音模式 ( -s) 的用法:
mp3splt -s your.mp3
Run Code Online (Sandbox Code Playgroud)
Mp3splt 将尝试使用静音检测自动检测分割点,并将分割所有使用默认参数找到的曲目。
或者
mp3splt -s -p th=-50,nt=10 your.mp3
Run Code Online (Sandbox Code Playgroud)
传递所需的参数,以 -50 dB 的阈值分割 10 个音轨(如果太多,则更少)与最可能的静音点。