Tarefa : Divida um arquivo mp3 em vários arquivos mp3, use um arquivo CSV com hora de início, hora de término e título.
Erros : Peças ignoradas, algumas peças com nomenclatura errada, erros acumulados aleatoriamente:
- Especificação de duração inválida para ss: :05
- Especificação de duração inválida para t: Name4
Feito até agora : Verificação tripla do CSV FILe, alterou o Script-Code.
Arquivos :
- data.csv
00:01:14,00:08:42,Name1
00:08:42,00:17:17,Name2
[...]
- Script.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"
a propósito : ao usar apenas echo "$i $f1 $f2 $f3" em vez do comando ffmpeg, a saída do arquivo CSV está correta.
Isso é abordado em BashFAQ/089 . O problema é
ffmpeg
consumir (partes de) stdin, então nem tudodata.csv
vai pararead
.A maneira mais fácil de resolver isso é
ffmpeg
ler de/dev/null
:Essa abordagem requer um shell, então está tudo bem no seu caso. Se você precisar de algo semelhante sem um shell, use a
-nostdin
opção (que também deve funcionar em um shell):Ao usar apenas
echo
, não háffmpeg
eecho
não lê de seu stdin. Nesse caso, apenasread
lê dedata.csv
, portanto, todo o loop se comporta conforme o esperado.