ffmpeg should be able to do this, e.g.
ffmpeg -i song_with_png.mp3 -acodec copy -vcodec mjpeg song_with_mjpeg.mp3
A bash script could then be
DESTINATION="dest"
mkdir -p ${DESTINATION}
shopt -s nullglob
for i in *.mp3 *.MP3;
do
name=`echo ${i} | cut -d'.' -f1`;
echo ${name};
ffmpeg -i "${i}" -acodec copy -vcodec mjpeg "${DESTINATION}/${name}.mp3";
done
I used the script to convert my aac encoded files playing in my cars audio system, leaving out the "-acodec copy" option so the audio gets converted as well, not only copied.
ffmpeg output should the contain something like this at the end:
...
Stream mapping:
Stream #0:1 -> #0:0 (png (native) -> mjpeg (native))
Stream #0:0 -> #0:1 (copy)