Bash 如何在每次音量为零时使用ffmpeg分割mp4视频?
我需要将一个视频分割成许多较小的视频。 我试过PySceneDetect,它的两种场景检测方法不适合我的需要 这个想法是在每次音量很低、音频级别低于给定参数时触发场景剪切/中断。我认为总体RMS dB音量水平就是我的意思 其目的是将mp4视频分割为多个短视频,每个小视频带有简短的对话短语 到目前为止,我有一个命令,以获得总体RMS音频音量水平Bash 如何在每次音量为零时使用ffmpeg分割mp4视频?,bash,ffmpeg,sh,Bash,Ffmpeg,Sh,我需要将一个视频分割成许多较小的视频。 我试过PySceneDetect,它的两种场景检测方法不适合我的需要 这个想法是在每次音量很低、音频级别低于给定参数时触发场景剪切/中断。我认为总体RMS dB音量水平就是我的意思 其目的是将mp4视频分割为多个短视频,每个小视频带有简短的对话短语 到目前为止,我有一个命令,以获得总体RMS音频音量水平 ffprobe -f lavfi -i amovie=01x01TheStrongestMan.mp4,astats=metadata=1:reset=1
ffprobe -f lavfi -i amovie=01x01TheStrongestMan.mp4,astats=metadata=1:reset=1 -show_entries frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.RMS_level,lavfi.astats.1.RMS_level,lavfi.astats.2.RMS_level -of csv=p=0
如何仅获取RMS级别及其相应帧或时间的最小值
然后,我如何使用ffmpeg将视频分割为每个帧上的多个视频,每个帧对应一个最小RMS
谢谢。使用
静音检测
音频过滤器,并将其调试输出馈送至段
输出格式参数
下面是一个现成的脚本:
#!/bin/bash
IN=$1
OUT=$2
true ${SD_PARAMS:="-55dB:d=0.3"};
true ${MIN_FRAGMENT_DURATION:="20"};
export MIN_FRAGMENT_DURATION
if [ -z "$OUT" ]; then
echo "Usage: split_by_silence.sh input_media.mp4 output_template_%03d.mkv"
echo "Depends on FFmpeg, Bash, Awk, Perl 5. Not tested on Mac or Windows."
echo ""
echo "Environment variables (with their current values):"
echo " SD_PARAMS=$SD_PARAMS Parameters for FFmpeg's silencedetect filter: noise tolerance and minimal silence duration"
echo " MIN_FRAGMENT_DURATION=$MIN_FRAGMENT_DURATION Minimal fragment duration"
exit 1
fi
echo "Determining split points..." >& 2
SPLITS=$(
ffmpeg -nostats -v repeat+info -i "${IN}" -af silencedetect="${SD_PARAMS}" -vn -sn -f s16le -y /dev/null \
|& grep '\[silencedetect.*silence_start:' \
| awk '{print $5}' \
| perl -ne '
our $prev;
INIT { $prev = 0.0; }
chomp;
if (($_ - $prev) >= $ENV{MIN_FRAGMENT_DURATION}) {
print "$_,";
$prev = $_;
}
' \
| sed 's!,$!!'
)
echo "Splitting points are $SPLITS"
ffmpeg -v warning -i "$IN" -c copy -map 0 -f segment -segment_times "$SPLITS" "$OUT"
如果指定输入文件、输出文件模板、静音检测参数和最小片段大小,则会写入多个文件
可能需要调整静音检测参数:
环境变量包含两个参数:噪声容忍度和最小静音持续时间。默认值为SD_PARAMS
-55dB:d=0.3
- 如果一些微弱的非静音声音在不应该的情况下触发吐痰,则将
降低至例如-55dB
。如果由于其中存在一些噪音而未在静音状态下分割,则将其增加到例如-70dB
,使其不完全静音-40dB
是被视为分割点的最小静默时间。如果只有严重的(如3秒钟)静默才被视为真实的、值得分割的静默,则增加该值d=0.3
- 另一个环境变量
定义了每次拆分后忽略静默事件的时间量。这将设置最小片段持续时间MIN\u FRAGMENT\u DURATION
有一个问题,但有一个用户遇到了问题。我对这个特定主题不太熟悉,但可能会有帮助。回答可能会有帮助。Let us.license=MIT