Как объединить все mp3-файлы, находящиеся в одной директории?

Вопрос или проблема

Команда ниже раньше работала, но перестала работать около ubuntu/kubuntu 20.04.

ls *.mp3 | sed -e "s/\(.*\)/file '\1'/" | ffmpeg -protocol_whitelist 'file,pipe' -f concat -i - -c copy output.mp3

Вывод, включая ошибку, приведен ниже:

adam@unix:~/TM/copy$ ls *.mp3 | sed -e "s/\(.*\)/file '\1'/" |  ffmpeg -protocol_whitelist 'file,pipe' -f concat -i - -c copy output.mp3

ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
  Собрано с помощью gcc 11 (Ubuntu 11.2.0-19ubuntu1)
  Конфигурация: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
[mp3 @ 0x601f4464d040] Формат mp3 обнаружен только с низким баллом 1, возможна ошибка в определении!
[mp3 @ 0x601f4464d040] Не удалось прочитать размер кадра: невозможно перейти к 1026.
[concat @ 0x601f4463a700] Невозможно открыть 'pipe:01.mp3'
pipe:: Неверный аргумент

Та же ошибка возникает с 20.04. Есть какие-нибудь предложения?

Ответ был основан на предыдущем посте, который упоминал –> Основываясь на ответе Майлза Уолба, вот однострочное решение, которое сработало для меня: опубликовано Энди Балаамом в оригинальном вопросе.

mp3wrap (из sudo apt install) отвергает первый файл, но объединяет все остальные файлы в этой папке. Похоже, что код не принимает первый входной файл, но mp3wrap пропускает ошибку и на втором запросе файла все работает?

Так что, я думаю, я мог бы поместить это в цикл внутри bash-скрипта, но не уверен, как это сделать. Python?

Я немного запоздал с ответом… Почему нельзя использовать:

cat *.mp3 > One_File_Output.mp3 # Объединяет mp3-файлы в папке.

Ответ или решение

Чтобы объединить все MP3-файлы в одной директории, вы можете использовать утилиту ffmpeg, которая позволяет работать с аудио и видеофайлами. На системах Ubuntu/Kubuntu, начиная с версии 20.04, подход с использованием pipe может давать ошибки, поэтому лучше следовать более современным методам.

Способ 1: Использование ffmpeg с текстовым файлом

  1. Создайте текстовый файл, в котором будут перечислены все MP3-файлы, которые вы хотите объединить. Вы можете воспользоваться следующей командой:

    for f in *.mp3; do echo "file '$PWD/$f'" >> filelist.txt; done

    Эта команда создаст файл filelist.txt, который будет содержать пути к вашим MP3-файлам в требуемом формате для ffmpeg.

  2. Используйте ffmpeg для объединения:

    ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp3

    Здесь output.mp3 — это имя конечного файла, который будет содержать все объединенные треки.

Способ 2: Использование mp3wrap

Если у вас возникают проблемы с ffmpeg, вы можете использовать mp3wrap, который объединяет MP3-файлы непосредственно:

  1. Установите mp3wrap, если вы еще этого не сделали:

    sudo apt install mp3wrap
  2. Объедините файлы:

    mp3wrap output.mp3 *.mp3

    Этот способ создаст файл output.mp3, в который будут объединены все MP3-файлы из текущей директории.

Примечания

  • Если вы используете cat для объединения MP3-файлов, это может работать, но не всегда корректно, так как в результирующем файле могут возникнуть проблемы с воспроизведением. Использование ffmpeg или mp3wrap предоставляет более надежные результаты.
  • Убедитесь, что все MP3-файлы, которые вы хотите объединить, имеют одинаковые параметры (например, частота дискретизации и битрейт), чтобы избежать проблем с воспроизведением.
  • Если у вас есть проблемы с кодировкой или другие ошибки при объединении, проверьте, что файлы не повреждены и корректно воспроизводятся.

Следуя этим шагам, вы сможете успешно объединить MP3-файлы в одной директории без ошибок.

Оцените материал
Добавить комментарий

Капча загружается...