Предыстория
Случается такое - вроде всё нормально и хорошо, но не работает. Смотришь еще раз - аналогично. Сейчас у меня как раз такой случай.
Задача
Есть аудиофайлы. Ради неизвестно чего мне захотелось посмотреть waveform в подробностях (а файлов немало), и audacity для сего не очень оказался удобным и производительным. Решение - ffmpeg и gnuplot. Подготовим gnuplot к работе:
% cat ~/waveform.gnuplot
set terminal png transparent truecolor size 10000,1000;
set output ;
unset key;
unset tics;
unset border;
set lmargin 0;
set rmargin 0;
set tmargin 0;
set bmargin 0;
plot '<cat' binary filetype=bin format='%int16' endian=little array=1:0 with lines;
% cd ~/tests
% ls -1
A Return To The Sea (bonus track).flac
Angels Fall First.flac
alltoplot
% cat alltoplot
#!/usr/local/bin/bash
ls -1 | grep .flac | while read a; do
ffmpeg -i "$a" -ac 1 -filter:a aresample=11025 -map 0:a -c:a pcm_s16le -f data - | gnuplot ~/waveform.gnuplot | dd of="$a".png
echo "$a"
done
Что мы имеем в результате? А вот что. http://paste.ubuntu.com/10505481/
Для ленивых !Ъ: во второй итерации по неведомой причине пропадает несколько первых символов в переменной $a, что приводит к «all First.flac: No such file or directory».
Дополнительная информация
1) Не смущайтесь от #!/usr/local/bin/bash - это норма
2) bash самой последней версии. Хотя это ничего не изменило
3) FreeBSD ни при чем. Тестировал в linux предварительно поправив скрипт - поведение аналогичное, только символов съедает немного больше.
4) если убрать строку с «ffmpeg ...», то echo «$a» выдает правильные значения.