Обычно конверчу любые аудио файлы с помощью perl audio converter(pacpl) .И раньше он справлялся без проблем.
А тут выдал ошибку.Оказывается библиотека faad, которую pacpl использует, не поддерживает данный тип конвертации.Поэтому набросал небольшой скрипт, который перегоняет файл в wav, а затем скармливает уже его pacpl.На вход скрипт принимает директорию где лежат m4a файлы, или один m4a файл.Если есть вложенные поддиректории с m4a,со скрипт их тоже сконвертирует.В результате mp3 файлы будут сложены в директории где лежат оригинальные m4a файлы.
Требует:
1.lame
2.mplayer
#!/bin/bash
IFS=$'\n'
#read parent directory/file to scan the m4a files inside.Possible values are directory/single m4a file
dir="$1"
#set source,temp and destination file extensions
sExt="m4a"
tExt="wav"
dExt="mp3"
echo "scan $dir"
tmp1=`tempfile`
find "$1"|grep $sExt > $tmp1
for i in `cat $tmp1`
do
dir=`dirname "$i"`
filename=`basename "$i" .$sExt`
fullname=$dir"/"$filename"."$tExt
fullmp3name=$dir"/"$filename"."$dExt
#remove the old files and pipe if exist
if [ -e $fullmp3name ] ;then
rm -fr $fullmp3name
fi
if [ -e $fullname ] ;then
rm -fr $fullname
fi
#make pipe for conversation
mkfifo $fullname
echo "converting $i"
lame -b 320 "$fullname" "$fullmp3name"&
mplayer -ao pcm "$i" -ao pcm:file="$fullname"
#pacpl --to MP3 --bitrate 320 --freq 48000 "$fullname"
#remove named pipe
rm -fr "$fullname"
done
rm -fr $tmp1
Ну или можно скачать тут
Update:
По совету ffsdmad изменил скрипт таким образом, чтобы он использовал пайпы. Это избавило от создания временного wav файла большого размера.Также заменил использование pacpl для конвертации в mp3 на lame.Ибо последний корректно поддерживает работу с пайпами.Для mp3 используется битрейт 320.Заменил в посте и в линке старый скрипт на новый.Старый скрипт для сравнения лежит тут
Update 2
По совету arseny попробывал кодирование с помощью ffmpeg.Тоже отлично работает.
Следующая команда перегоняет lossless m4a в mp3 в качестве 320kb/s
ffmpeg -i "/mnt/multi/music/Pop Rock/Brainstorm [ALAC]/2000 - Among the Suns/02 Weekends Are Not My Happy Days.m4a" -ab 320k -ac 2 "/mnt/multi/music/Pop Rock/Brainstorm [ALAC]/2000 - Among the Suns/02 Weekends Are Not My Happy Days.mp3"
Сделаю позже новую версию скрипта, чтобы можно было выбирать чем кодировать
Привет, я подобным образом пробовал конвертить большме аудиокниги, но вылезли проблемы - генерировались слишком большие WAV файлы
ОтветитьУдалитьи вот что у меня получилось http://breys.ru/blog/240.html
Cпасибо!
ОтветитьУдалитьПросто великолепное решение.
Сейчас будет апдейт скрипта :)
% ffmpeg -i <входной файл> <параметры кодирования> <выходной файл>
ОтветитьУдалить?
спасибо, попробую ffmpeg,
ОтветитьУдалитьтут вся фишка будет в том держит ли он lossless m4a
спасибо, решение с ffmpeg тоже работает
ОтветитьУдалитьпроапдейтил свою статью
Супер :) Как раз мобила не поддерживает lossless-форматы, а вся музыка на компьютере в нем.
ОтветитьУдалитьСкрипт достаточно универсальный, в нем достаточно заменить sExt="m4a" на sExt="flac" или любой другой формат , поддерживаемый mplayer .Либо просто передавать расширение как параметр
ОтветитьУдалитьsExt="m4a" на sExt="flac"
ОтветитьУдалитькак страшно жить
давно с MFC слезли?
никогда не писал вод виндовс на mfc)
ОтветитьУдалитьконечно надо просто передавать расширение параметром.
а что там в mfc похожего на sExt="m4a" на sExt="flac" ?