FFMPEG 在 Shell 中使用 CSV 拆分 Mp3,解析似乎不起作用

FFMPEG 在 Shell 中使用 CSV 拆分 Mp3,解析似乎不起作用

任务:将一个 mp3 文件拆分为多个 mp3 文件,使用带有开始时间、结束时间和标题的 CSV 文件。

错误:跳过的部分,一些部分命名错误,随机累积错误:

  • ss 的持续时间规范无效::05
  • t 的持续时间规范无效:Name4

迄今已完成:仔细检查了 CSV 文件,更改了脚本代码。

文件

  • 数据.csv
   00:01:14,00:08:42,Name1
   00:08:42,00:17:17,Name2
  [...]
  • 脚本
    #!/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 文件的输出是正确的。

答案1

这涵盖Bash常见问题/089。问题是ffmpeg消耗了(部分)stdin,所以不是所有的都data.csv进入了read

解决这个问题最简单的方法是ffmpeg读取/dev/null

</dev/null ffmpeg …

这种方法需要 shell,所以对你来说没问题。如果你需要类似的东西而不需要 shell,请使用该-nostdin选项(在 shell 中也应该有效):

ffmpeg -nostdin …

当仅使用 时echo,没有ffmpeg并且echo不会从其标准输入读取。在这种情况下,仅从read读取data.csv,因此整个循环的行为符合您的预期。

相关内容