Я попробовал различные варианты от форумов, но большинство из них устарело (ffmpeg, говорит мне об этом, как с-sameq опцией). Я пытаюсь понять документы, но я не могу.
Я хочу знать, как преобразовать рекурсивно с ffmpeg от wma до mp3 с, например, макс. скоростью передачи 192 Кбит/с в выводе (но не 192 это, если оригинал составлял 128 Кбит/с),
Я имею если 14K wma распространение файлов во многих каталогах. Так, я не хочу перемещать их. Просто преобразуйте их сохраняющий имя файла и метаданные, и удалите их, если было бы возможно прочитать список файлов для преобразования из txt файла, который я могу создать, один файл на строку. С этим мне удалось бы сделать рекурсивный поиск, вставку в него.
Спасибо за любую справку. И еще больше спасибо за любое объяснение о Ffmpeg.
Caroxo
PS: Soundconverter раньше был хорошим, но медленным. Теперь никакой или другой. Не работает в 14,04 во многих случаях, как мой. Я использую Soundkonverter, но являюсь очень медленным. Так, все это для предотвращения этого рекомендации. И я хочу учиться использовать этот мощный ffmpeg! и CLI
Примечание: Сценарий ниже, работал в первом convertions. Но по любой причине, что я не могу объяснить, внезапно удалил wma's в преобразовании, не оставляя mp3. Так, я изменился снова на "нерешенный" (еще для предотвращения иногда проблемы к чьему-то). Проблема кажется прибытием из avconv "Приложение, предоставленное недопустимым, не монотонно увеличиваясь dts к muxer в потоке 0: 23606> = 21720" (существуют pastebins в комментариях, если существует кто-то заинтересованный разработкой этой ошибки). Так, никакой avconv в будущем.
Это - команда, я использую для ffmpeg все файлы в текущем каталоге (работы, если имена имеют пробелы в них) на Mac, где варево не имеет avconv:
for file in *.wma; do ffmpeg -i "${file}" -acodec libmp3lame -ab 192k "${file/.wma/.mp3}"; done
В терминальном, первом обзоре к папке, которая содержит все Ваше музыкальное использование cd
, например:
cd /home/username/music/wma-to-convert
Следующее войдет в список всех файлов в текущей папке и всех подпапок, заканчивающихся в "wma", и сохранит список в названном текстовом документе wma-files.txt
:
find . -type f | grep wma$ > wma-files.txt
Или Вы могли создать текстовый файл вручную, если Вы хотите. Затем введите следующее в текстовом редакторе и сохраните его в том же каталоге wma-files.txt
, например, именование его conv-script
:
#!/usr/bin/env bash
readarray -t files < wma-files.txt
for file in "${files[@]}"; do
out=${file%.wma}.mp3
probe=`avprobe -show_streams "$file" 2>/dev/null`
rate=`echo "$probe" | grep "^bit_rate" | sed "s:.*=\(.*\)[0-9][0-9][0-9][.].*:\1:" | head -1`
ffmpeg -i "$file" -ab "$rate"k "$out"
done
Вероятно, необходимо установить исполняемый файл, обдумал сценарий:
chmod +x conv-script
Затем просто выполнение это:
./conv-script
У Вас также есть опция добавления этого в конец ffmpeg
строка, но быть осторожным:
&& rm "$file"
Для тех, у кого нет доступа к avprobe, можно использовать ffprobe, который делает эквивалент (т.е. получение bit_rate). Сделать это:
Замена:
probe=`avprobe -show_streams "$file" 2>/dev/null`
rate=`echo "$probe" | grep "^bit_rate" | sed "s:bit_rate=\([0-9]\+\)[0-9]\{3\}:\1:" | head -1`
с:
rate=`ffprobe -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 "$file"`
После того как это сделано, все Ваши файлы должны начать преобразовывать, и wma оригиналы должны быть удалены! Это работало отлично для меня преобразовывающий flac файлы в mp3. К сожалению, у меня нет wma для тестирования, но я ожидаю, что он должен сделать прекрасный для тех также.
Примечание: В то время как я не предвижу проблем, это была бы хорошая идея скопировать несколько файлов в новый каталог и протестировать его на них.
Если Вы планируете часто преобразовать Wma в mp3, ниже сценария автоматически преобразовывают и удаляют все в папке, данной как аргумент, Это улучшает немного вышеупомянутое. Кроме того, команда ffmpeg несколько отличается, чем предложенное первое, если первый не работает, используйте ниже одного.
#!/usr/bin/env bash
cd "$1"
find . type f | grep wma$ > wma-files.txt
readarray -t files < wma-files.txt
for file in "${files[@]}"; do
out=${file%.wma}.mp3
ffmpeg -i "$file" -map_metadata 0:s:0 $out"
done
rm wma-files.txt
Затем Вы просто называете его путем ввода в Вас терминала как:
./convScript /home/username/music
Таким образом вся музыкальная папка и ее подпапки будут иметь свою wma музыку автоматически преобразованной в mp3.
Как прежде, можно добавить это к концу ffmpeg
строка для удаления файла:
&& rm "$file"
РЕДАКТИРОВАНИЕ (2017/06/23): не делать rm
значение по умолчанию
Для любой версии
я нашел аккуратный способ сделать это с mplayer. Этот сценарий переименует файлы для удаления всех пробелов на названия файлов и рекурсивно преобразует все .wma файлы в текущем каталоге к .mp3:
#!/bin/bash
for f in *.wma; do
newname=`echo $f | tr ' ' '_' `
mv "$f" $newname
f=$newname
mplayer $f -novideo -ao pcm:file=tmp.wav
lame -V 0 -q 0 tmp.wav ${f/.wma/.mp3}
rm -f tmp.wav
done
Вот одна версия лайнера:
for f in *.wma; do; newname=`echo $f | tr ' ' '_' `; mv "$f" $newname; f=$newname; mplayer $f -novideo -ao pcm:file=tmp.wav; lame -V 0 -q 0 tmp.wav ${f/.wma/.mp3}; rm -f tmp.wav; done
Я переписываю сценарий TheSchwa (благодарит TheSchwa!), с этими изменениями:
rm
(преобразователи обычно не удаляют файлы, это может быть большим удивлением!). #!/bin/bash
which ffmpeg > /dev/null || { echo "Install ffmpeg, with 'sudo apt-get install ffmpeg'" >&2; exit 1; }
which avprobe > /dev/null || { echo "Install libav-tools, with 'sudo apt-get install libav-tools'" >&2; exit 1; }
output_format=mp3
file=`mktemp`
find . -type f | grep -i wma$ > $file
readarray -t files < $file
for file in "${files[@]}"; do
out=${file%.wma}.$output_format
probe=`avprobe -show_streams "$file" 2>/dev/null`
rate=`echo "$probe" | grep "^bit_rate" | sed "s:bit_rate=\([0-9]\+\)[0-9]\{3\}:\1:" | head -1`
ffmpeg -i "$file" -ab "$rate"k "$out"
done
Примечание: следующее не относится 15.04, 15.10 или 16.04
Во-первых:
ffmpeg удерживается от использования в 14,04 во всяком случае, и необходимо теперь использовать avconv
вместо этого.
sudo apt-get install avconv
Используйте эту команду для преобразования wma файлов в mp3 рекурсивно:
for i in `find . -type f -name '*.wma'`; do avconv -i "$i" "${i/.wma/.mp3}"; done
Затем после того как Вы проверили качество файлов, можно выполнить эту команду, чтобы удалить или удалить исходные .wma версии рекурсивно:
for i in `find . -type f -name '*.wma'`; do rm "$i"; done
Далее:
Вот то, как использовать команду в сценарии вместо этого (названный "wma2mp3":
sudo nano /usr/local/bin/wma2mp3
скопируйте и вставьте это в файл:
#!/bin/bash
for i in `find . -type f -name '*.wma'`; do avconv -i "$i" "${i/.wma/.mp3}"; done
Нажмите ctrl + o и затем нажмите Enter, чтобы сохранить файл и использовать ctrl + x для выхода.
Затем сделайте исполняемый файл файла со следующей командой:
sudo chmod +x /usr/local/bin/wma2mp3
Теперь можно просто выполнить команду wma2mp3
к рекурсивно тайному все wma файлы к mp3.
Просто сделайте то же со сценарием для стирания всех wma файлов, и назвать его вообще Вы хотите.
BTW, если Вы просто хотите преобразовать все файлы в текущем каталоге только (не всюду по всем другим последующим рекурсивным каталогам), можно использовать эту команду вместо этого:
for i in *.wma; do avconv -i "$i" "${i/.wma/.mp3}"; done
и конечно, для удаления wma файлов в текущем каталоге только, просто используют эту команду:
rm *.wma
Это - сценарий удара, с помощью параллель :
#!/bin/bash
parallel -i -j$(nproc) ffmpeg -i {} -acodec libmp3lame -ab 192k {}.mp3 ::: ./*.wma
rename 's/.wma//' *.wma.mp3