我有一个很大的 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.mp4
和2.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行:设置新的起点
编辑:
答案2
您可以使用无损剪辑但它是一个 GUI 应用程序。您可以一次导出多个输出文件。