2

I have a text file that contains a list of paths to flac files I want to convert to wav. Here is a small section of it:

/mnt/nfs/Music/Rob D/1995 - Clubbed To Death/Rob D - 02 - Clubbed To Death _Kurayamino Variation_.flac
/mnt/nfs/Music/Blonde Redhead/2000 - Melody of Certain Damaged Lemons/11 - For the Damaged Coda.flac
/mnt/nfs/Music/I Monster/2001 - Daydream In Blue/01 - Daydream In Blue.flac
/mnt/nfs/Music/Moby/2002 - Extreme Ways/01 - Extreme Ways.flac
/mnt/nfs/Music/RJD2/2002 - Deadringer/01 - The Horror.flac
/mnt/nfs/Music/RJD2/2002 - Deadringer/03 - Smoke & Mirrors.flac
/mnt/nfs/Music/RJD2/2002 - Deadringer/06 - Ghostwriter.flac
/mnt/nfs/Music/RJD2/2002 - Deadringer/10 - Chicken-Bone Circuit.flac
/mnt/nfs/Music/FC Kahuna/2003 - Hayling/01 - Hayling _Original_.flac
/mnt/nfs/Music/Lamb/2003 - Between Darkness and Wonder/04 - Angelica.flac

I'm trying to loop through it like so:

while read -r line; do
 wavfile=$(basename "$line")
 wavfile="${wavfile%.*}"
 ffmpeg -i "$line" "$2/$wavfile.wav"
done <$1

...where $1 is where I would pass the name of the text file and $2 is the destination directory.

Here is the output with the irrelevant ffmpeg junk pruned out:

Input #0, flac, from '/mnt/nfs/Music/Rob D/1995 - Clubbed To Death/Rob D - 02 - Clubbed To Death _Kurayamino Variation_.flac':
...
Output #0, wav, to '/mnt/gray/Clubbed To Death/Rob D - 02 - Clubbed To Death _Kurayamino Variation_.wav':
...
/nfs/Music/Blonde Redhead/2000 - Melody of Certain Damaged Lemons/11 - For the Damaged Coda.flac: No such file or directory
...
Input #0, flac, from '/mnt/nfs/Music/I Monster/2001 - Daydream In Blue/01 - Daydream In Blue.flac':
...
Output #0, wav, to '/mnt/gray/Clubbed To Death/01 - Daydream In Blue.wav':
...
nt/nfs/Music/Moby/2002 - Extreme Ways/01 - Extreme Ways.flac: No such file or directory
...
Input #0, flac, from '/mnt/nfs/Music/RJD2/2002 - Deadringer/01 - The Horror.flac':
...
Output #0, wav, to '/mnt/gray/Clubbed To Death/01 - The Horror.wav':
...
nt/nfs/Music/RJD2/2002 - Deadringer/03 - Smoke & Mirrors.flac: No such file or directory
...
Input #0, flac, from '/mnt/nfs/Music/RJD2/2002 - Deadringer/06 - Ghostwriter.flac':
...
Output #0, wav, to '/mnt/gray/Clubbed To Death/06 - Ghostwriter.wav':
...
nt/nfs/Music/RJD2/2002 - Deadringer/10 - Chicken-Bone Circuit.flac: No such file or directory
...
Input #0, flac, from '/mnt/nfs/Music/FC Kahuna/2003 - Hayling/01 - Hayling _Original_.flac':
...
Output #0, wav, to '/mnt/gray/Clubbed To Death/01 - Hayling _Original_.wav':
...
/nfs/Music/Lamb/2003 - Between Darkness and Wonder/04 - Angelica.flac: No such file or directory

If you pay attention to the paths that ffmpeg reports don't exist, you'll see that a seemingly random number of characters has been removed from the beginning. This appears to happen on even numbered lines, but odd numbered lines work. I can only reproduce this behavior when using ffmpeg. If I replace the ffmpeg line with a simple echo statement, every file path is shown to be correct. How can this be?

Other suggestions of accomplishing this are also welcome, however I do need the files processed in the order by which I have them listed in the file.

Brad Johnson
  • 113
  • 1
  • 7
  • 2
    THis might help: [Bash while loop stops for no reason?](https://stackoverflow.com/q/28159381/3776858) – Cyrus Oct 09 '18 at 05:10

1 Answers1

1

Cyrus' link did lead me to find the solution. Sending /dev/null to stdin when calling ffmpeg solved my problem. This is what the functioning loop looks like:

while read -r line; do
 wavfile=$(basename "$line")
 wavfile="${wavfile%.*}"
 ffmpeg -i "$line" "$2/$wavfile.wav" </dev/null
done <$1
Brad Johnson
  • 113
  • 1
  • 7