使用 FFmpeg 自动将大型 mp3 文件分割为文本文件中提供的不同时间点的多个文件

使用 FFmpeg 自动将大型 mp3 文件分割为文本文件中提供的不同时间点的多个文件

我有一个很大的 mp3 文件;我想把它分成不同时间点的480个mp3文件。我想知道除了一一分割之外,是否有一种简单的方法可以做到这一点。我可以在一个文本文件中提供不同的分割时间并只在 FFmpeg 中执行一个命令吗?

答案1

使用这个脚本

#! /bin/bash
x="00:00:00"
z=0
filename=$(basename -- "$2")
ext="${filename##*.}"
filename="${filename%.*}"
initcmd="ffmpeg  -nostdin -hide_banner -loglevel error -i $2"
while read y
do
initcmd+=" -ss $x -to $y -c copy $filename$z.$ext"
let "z=z+1"
x=$y 
done < $1
$initcmd

使其可执行chmod +x

并让你的时间配置文件像这样,时间戳用空格分隔。

00:02:30 
00:05:40

请记住在最后输入后按 Enter 键。

然后语法是

./splitter.sh ./time ./Big_Buck_Bunny.mp4

它将产生两个文件1.mp42.mp4,第一个文件从 00:00:00 到 00:02:30,第二个文件从 00:02:30 到 00:05:40。如果您想在输出中保留文件,请运行此命令

ffprobe -v error -show_entries format=duration -sexagesimal -of default=noprint_wrappers=1:nokey=1 Big_Buck_Bunny.mp4 >> ./time

(这会获取文件的长度并添加到您的时间配置中)

解释

第 2 行:设置初始开始时间
第 3 行:设置输出文件名编号
第 4、5 和 6 行:设置扩展名(来自所以帖子)
第 7 行:带有初始参数的字符串
while 循环:逐行读取 (From所以)
ffmpeg 行:-nostdin阻止 ffmpeg 吃第一个字符
-hide_banner -loglevel panic抑制 ffmpeg 消息
-i设置输入文件
名 initcmd+= 行:添加输出名称和参数 -ss开始时间 -to结束时间 -c copy使用与输入相同的编解码器,无质量损失且速度最快。
第 10 行:增加文件名编号(从询问UbuntuPost)
第11行:设置新的起点

编辑:

  1. 现在它可以读取行分隔的文件。所以
  2. 不要重复调用 ffmpeg,而是执行最后一行中的所有操作多重输出

答案2

您可以使用无损剪辑但它是一个 GUI 应用程序。您可以一次导出多个输出文件。

相关内容