从 mp3 文件中随机选择 10 秒

从 mp3 文件中随机选择 10 秒

tracks我有一个包含 3 个文件的目录track1.mp3,,track2.mp3track3.mp3我想从每个文件中随机选择一个 10 秒的块并将这些块合并到一个名为的新文件中sample.mp3。如何使用 ffmpeg 执行此操作?

我对 ffmpeg 还很陌生,到目前为止我所做的就是将文件分割成块

ffmpeg -i track1.mp3 -f segment -segment_time 10 -c copy out%03d.mp3

有人帮忙吧。我使用的是 Mac OSX high sierra 和 bash shell

答案1

您可以使用以下 bash 脚本:

numFiles=3
maxStart=10
idx=1
for randomStart in $(jot -r $numFiles 0 $maxStart); do
    ffmpeg -y -ss "$randomStart" -i "track${idx}.mp3" -t 10 -c:a copy "track${idx}-chunk.mp3"
    idx=$((idx + 1))
done

在这里,您必须指定文件数(track1track3)和最大起始位置(例如,如果您的文件只有 20 秒长,那么您最多应该从 00:00:10 开始)。

jot实用程序用于创建 0 到 之间的随机数$maxStart(即上例中的 10)。在 Linux 上,jot不可用;而是使用shuf -n $numFiles -i 0-$maxStart

然后,连接这些块(参见FFmpeg Wiki 条目):

ffmpeg -f concat -safe 0 -i <(for f in ./*-chunk.mp3; do echo "file '$PWD/$f'"; done) -c copy output.mp3

它使用特殊的 shell 语法来构建临时的连接文件。这将复制比特流,因此无需重新编码。

相关内容