任务:将一个 mp3 文件拆分为多个 mp3 文件,使用包含开始时间、结束时间和标题的 CSV 文件。
错误:跳过的部分,一些命名错误的部分,随机产生的错误:
- ss 的持续时间规范无效::05
- t 的持续时间规范无效:Name4
到目前为止完成:三次检查 CSV 文件,更改脚本代码。
文件:
- 数据.csv
00:01:14,00:08:42,Name1
00:08:42,00:17:17,Name2
[...]
- 脚本.sh
#!/bin/bash
inputCSV="data.csv"
inputMP3="audioFile.mp3"
i=0
#ffmpeg -i $inputMP3 -f null -
while IFS=',' read -r f1 f2 f3
do
((i++))
#echo "$i $f1 $f2 $f3"
ffmpeg -i "$inputMP3" -vn -acodec copy -ss "$f1" -t "$f2" "$i|25 - $f3.mp3"
done < "$inputCSV"
顺便说一下:当只使用 echo "$i $f1 $f2 $f3" 而不是 ffmpeg 命令时,CSV 文件的输出是正确的。
BashFAQ/089中对此进行了介绍。问题是
ffmpeg
消耗了(部分)stdin,所以并不是所有的data.csv
都转到read
.解决此问题的最简单方法是从以下位置
ffmpeg
读取/dev/null
:这种方法需要一个 shell,所以在你的情况下没问题。如果您在没有 shell 的情况下需要类似的东西,请使用该
-nostdin
选项(它也应该在 shell 中工作):仅使用
echo
时,没有ffmpeg
也echo
不会从其标准输入中读取。在这种情况下,只read
从 中读取data.csv
,因此整个循环的行为与您预期的一样。