I have three .wav
files in my folder and I want to convert them into .mp3
with ffmpeg.
I wrote this bash script, but when I execute it, onl
If you do need find
(for looking in subdirectories or performing more advanced filtering), try this:
find ./ -name "*.wav" -exec ffmpeg -i "{}" -ab 320k -ac 2 '$(basename {} wav)'.mp3 \;
Piping the output of find
to the while
loop has two drawbacks:
ffmpeg
, for some reason unknown to me, will read from standard input, which interferes with the read
command. This is easy to fix, by simply redirecting standard input from /dev/null
, i.e. find ... | while read f; do ffmpeg ... < /dev/null; done
.In any case, don't store commands in variable names and evaluate them using eval
. It's dangerous and a bad habit to get into. Use a shell function if you really need to factor out the actual command line.
No reason for find, just use bash wildcard globbing
#!/bin/bash
for name in *.wav; do
ffmpeg -i "$name" -ab 320k -ac 2 "${name%.*}.mp3"
done
Use the -nostdin
flag in the ffmpeg command line:
ffmpeg -nostdin -i "$name.wav" -ab 320k -ac 2 "$name.mp3"
See the -stdin
/-nostdin
flags in the ffmpeg documentation ➠ https://ffmpeg.org/ffmpeg.html