Получение правильного расширения файла после конвертации нескольких файлов с помощью FFMPEG - PullRequest
1 голос
/ 15 мая 2019

У меня есть скрипт для преобразования *.flac в *.mp3.Преобразование происходит, как и должно быть, но файлы всегда заканчиваются расширением *.flac.mp3 вместо *.mp3.

find . -name "*.flac" -exec ffmpeg -i {} -vsync 0 -codec:a libmp3lame -qscale:a 0 -map_metadata 0 -id3v2_version 3 {}.mp3 \;

. Я уже пытался поместить ${i%.*}.mp3 в поле вывода, но это толькоприводит к созданию файла с именем .mp3, в котором нет ничего перед расширением.

Что я делаю не так?

1 Ответ

0 голосов
/ 15 мая 2019

{} - полное имя файла, найденное find, включая расширение .flac. Чтобы манипулировать им, вы можете вызвать оболочку в -exec:

find . -name '*.flac' \
    -exec bash -c '
        for f; do
            ffmpeg -i "$f" -vsync 0 -codec:a libmp3lame -qscale:a 0 \
                -map_metadata 0 -id3v2_version 3 "${f%.flac}".mp3
        done
    ' _ {} +

Используется синтаксис -exec <cmd> {} + для запуска <cmd> один раз 1 со всеми добавленными файлами; сама команда имеет вид

bash -c 'for f; do <something>; done' _

где for f перебирает все файлы, представленные в качестве параметров; _ - это фиктивный параметр, который будет использоваться как $0 в bash -c.


1 Точнее, «как можно меньше раз при соблюдении ограничений длины командной строки».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...