Audio 如何按无声部分分割视频或音频

Audio 如何按无声部分分割视频或音频,audio,video,ffmpeg,media,video-processing,Audio,Video,Ffmpeg,Media,Video Processing,我需要自动分割视频讲话的话,所以每个字是一个单独的视频文件。你知道怎么做吗 我的计划是检测无声部分,并将它们用作单词分隔符。但是我没有找到任何工具来做这件事,看起来ffmpeg不是合适的工具 ffmpeg -i "input.mov" -af silencedetect=noise=-30dB:d=0.5 -f null - 2> vol.txt 这将产生控制台输出,其读数如下所示: [silencedetect @ 00000000004b02c0] silence

我需要自动分割视频讲话的话,所以每个字是一个单独的视频文件。你知道怎么做吗


我的计划是检测无声部分,并将它们用作单词分隔符。但是我没有找到任何工具来做这件事,看起来ffmpeg不是合适的工具

ffmpeg -i "input.mov" -af silencedetect=noise=-30dB:d=0.5 -f null - 2> vol.txt
这将产生控制台输出,其读数如下所示:

[silencedetect @ 00000000004b02c0] silence_start: -0.0306667
[silencedetect @ 00000000004b02c0] silence_end: 1.42767 | silence_duration: 1.45833
[silencedetect @ 00000000004b02c0] silence_start: 2.21583
[silencedetect @ 00000000004b02c0] silence_end: 2.7585 | silence_duration: 0.542667
[silencedetect @ 00000000004b02c0] silence_start: 3.1315
[silencedetect @ 00000000004b02c0] silence_end: 5.21833 | silence_duration: 2.08683
[silencedetect @ 00000000004b02c0] silence_start: 5.3895
[silencedetect @ 00000000004b02c0] silence_end: 7.84883 | silence_duration: 2.45933
[silencedetect @ 00000000004b02c0] silence_start: 8.05117
[silencedetect @ 00000000004b02c0] silence_end: 10.0953 | silence_duration: 2.04417
[silencedetect @ 00000000004b02c0] silence_start: 10.4798
[silencedetect @ 00000000004b02c0] silence_end: 12.4387 | silence_duration: 1.95883
[silencedetect @ 00000000004b02c0] silence_start: 12.6837
[silencedetect @ 00000000004b02c0] silence_end: 14.5572 | silence_duration: 1.8735
[silencedetect @ 00000000004b02c0] silence_start: 14.9843
[silencedetect @ 00000000004b02c0] silence_end: 16.5165 | silence_duration: 1.53217
然后生成从每个静默结束到下一个静默开始的分割命令。您可能需要添加一些句柄,例如250毫秒,这样音频的持续时间将为250毫秒*2秒

ffmpeg -ss <silence_end - 0.25> -t <next_silence_start - silence_end + 2 * 0.25> -i input.mov word-N.mov
ffmpeg-ss-t-i input.mov word-N.mov
(我已跳过指定音频/视频参数)


您需要编写一个脚本来刮取控制台日志并生成一个带有时间码的结构化(可能是CSV)文件——每行一对:静默结束和下一个静默开始。然后用另一个脚本生成每对数字的命令。

作为一行:
ffmpeg-i input.mkv-filter_complex“[0:a]sileneedetect=n=-90dB:d=0.3[outa]”-map[outa]-fs16le-y/dev/null |&f='-aq 70-v警告'perl-ne'INIT{$ss=0;$se=0;}如果(/silence\u start:(\S+/)$ss=$1;$ctr 1;$printf“ffmpeg-nostdin-i input.mkv-ss%f-t%f$ENV{f}-y%03d.mkv\n”、$se、($ss-$se)、$ctr;}if(/silence_end:(\S+/){$se=$1;}end{printf”ffmpeg-nostdin-i input.mkv-ss%f$ENV}-y%03d.mkv\n”、$se、$ctr 1;}'bash-x
@JohnSmith默认情况下使用bash。将
|和
替换为
2>&1
@giaceco以跳过重新编码将
-c copy
添加到最后一个ffmpeg命令行。其他效果需要更复杂的脚本。也许有一天我会实现它并作为答案发布…如何调整噪声参数,
噪声=-30dB:d=0.5
?我已经尝试了diff不同的值,但我没有得到
silent\u start
silent\u end
对,即有时缺少一对。@Vi.回答这个问题似乎可以获得100分,请看一看。