使用 `ffmpeg` 可以将 MP3 文件分割成多个小文件

16 min read

以下是一个基本的示例,该示例将一个 MP3 文件分割为多个文件,每个文件的长度为30秒:

#!/bin/bash
input=input.mp3
duration=$(ffprobe -i "$input" -show_entries format=duration -v quiet -of csv="p=0")
duration=${duration%.*}
segments=$(($duration / 30))
remainder=$(($duration % 30))

for ((i=0; i<$segments; i++))
do
    ffmpeg -i "$input" -ss $(($i * 30)) -t 30 -acodec copy "output$i.mp3"
done

if [ "$remainder" -gt 0 ]
then
    ffmpeg -i "$input" -ss $(($segments * 30)) -t $remainder -acodec copy "output$segments.mp3"
fi

这个脚本首先使用 ffprobe 命令来获取输入文件的总持续时间。然后计算出应该分割成多少个30秒的片段,并且是否有余数。接着,对于每一个30秒的片段,使用 ffmpeg 命令分割出一个单独的文件。如果还有余数(即,总时间不是30的整数倍),那么将剩余的时间作为最后一个文件。

请注意这个脚本假设你想要分割的文件长度都是30秒。如果你需要不同的长度,你可以更改脚本中的 30 为你需要的长度。

此外,这个脚本将生成名为 output0.mp3, output1.mp3, output2.mp3 ...的文件。如果你需要不同的文件名,可以在脚本中修改。

最后,请确保你已经安装了 ffmpegffprobe。如果没有,你可以通过你的包管理器(如 aptbrewyum)来安装。