Как использовать Ffmpeg для преобразования wma в mp3 рекурсивно, импортируя из txt файла?

Я попробовал различные варианты от форумов, но большинство из них устарело (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 в будущем.

6
задан 9 August 2014 в 23:10

6 ответов

Это - команда, я использую для ffmpeg все файлы в текущем каталоге (работы, если имена имеют пробелы в них) на Mac, где варево не имеет avconv:

for file in *.wma; do ffmpeg -i "${file}"  -acodec libmp3lame -ab 192k "${file/.wma/.mp3}"; done
16
ответ дан 17 November 2019 в 04:35

В терминальном, первом обзоре к папке, которая содержит все Ваше музыкальное использование 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 значение по умолчанию

9
ответ дан 17 November 2019 в 04:35

Для любой версии

я нашел аккуратный способ сделать это с 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
3
ответ дан 17 November 2019 в 04:35

Я переписываю сценарий TheSchwa (благодарит TheSchwa!), с этими изменениями:

  • avprobe работы обнаружения (по крайней мере, на ffprobe версии 2.5.2 от текущего нестабильного Debian).
  • не удаляют файлы с rm (преобразователи обычно не удаляют файлы, это может быть большим удивлением!).
  • Загрузка wma файлы в сценарии.
  • Справка, когда недостающие двоичные файлы.
#!/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
3
ответ дан 17 November 2019 в 04:35

Примечание: следующее не относится 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
1
ответ дан 17 November 2019 в 04:35

Это - сценарий удара, с помощью параллель :

#!/bin/bash

parallel -i -j$(nproc) ffmpeg -i {} -acodec libmp3lame -ab 192k {}.mp3 ::: ./*.wma
rename 's/.wma//' *.wma.mp3
1
ответ дан 17 November 2019 в 04:35

Другие вопросы по тегам:

Похожие вопросы: