使用macOS上的ffmpeg将音频文件拆分为多个文件

时间:2018-03-28 19:04:21

标签: unix audio ffmpeg

我的想法是节省一些时间并将长音频文件分割成多个音频文件并从文本文件中读取数据(startTime,endTime,artist,title)。 在MacOS(UNIX)和ffmpeg(音频)上使用终端。

用3行输入put文件示例:

00:00 - 06:16 - art - tit
06:16 - 09:22 - arti - titl
09:22 - 13:13 - artist - title

我的unix代码,shell文件:“split.command”

inputFileName=audiofile
input=test.txt


while IFS= read -r var
do

startTime=$(echo "$var" | cut -f1 -d"-")
endTime=$(echo "$var" | cut -f2 -d"-")
artist=$(echo "$var" | cut -f3 -d"-")
title=$(echo "$var" | cut -f4 -d"-")

echo ffmpeg -i ~/Downloads/$inputFileName.mp3 -metadata artist="$artist" -metadata title="$title" -ss $startTime -to $endTime -acodec copy "$title".mp3 -vsync 2

wait 

done < "$input"

当我回复它时,一切看起来都很好。

$ sh split.command
ffmpeg -i /Users/tony/Downloads/audiofile.mp3 -metadata artist= art  -metadata title= tit -ss 00:00 -to 06:16 -acodec copy  tit.mp3 -vsync 2
ffmpeg -i /Users/tony/Downloads/audiofile.mp3 -metadata artist= arti  -metadata title= titl -ss 06:16 -to 09:22 -acodec copy  titl.mp3 -vsync 2
ffmpeg -i /Users/tony/Downloads/audiofile.mp3 -metadata artist= artist  -metadata title= title -ss 09:22 -to 13:13 -acodec copy  title.mp3 -vsync 2

删除ECHO后,它应该作为命令工作。第一个音频很好,第二个音频输出错误,第三个音响但缺少艺术作品。

1st *works*
2nd *error* Invalid duration specification for to: arti
3rd *works but..* [mp3 @ 0x7ff7e1800000] No packets were sent for some of the attached pictures.

1 个答案:

答案 0 :(得分:0)

有两个主要问题,第一个在读取文件时有空格,第二个在输出名称中有空格。在这里,它首先将所有属性转换为字符串,然后通过ffmpeg将所有属性转换为。

read input        

inputFileName=$input
mkdir $input    
inputText=${inputFileName}.txt
i=0

function toString {
while IFS=- read -r startTime endTime artist title3; do
((i++))
title2="${title3// }"

str[i]=$(echo " -i "$PWD"/"${inputFileName}".mp3 -metadata artist="${artist// }" -metadata title="${title2// }" -ss "${startTime// }" -to "${endTime// }" -acodec copy "$input/${title2}".mp3 -vsync 2 ")
done< "$inputText"
}

function toSplit {
for j in $(seq 1 $i);
do
    ffmpeg ${str[$j]}
done
}

toString
toSplit

在macOS上,它仅适用于终端:

sh file.command

用作可执行文件时不起作用!

相关问题