Вопрос или проблема
Команда ниже раньше работала, но перестала работать около 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 с текстовым файлом
-
Создайте текстовый файл, в котором будут перечислены все MP3-файлы, которые вы хотите объединить. Вы можете воспользоваться следующей командой:
for f in *.mp3; do echo "file '$PWD/$f'" >> filelist.txt; done
Эта команда создаст файл
filelist.txt
, который будет содержать пути к вашим MP3-файлам в требуемом формате дляffmpeg
. -
Используйте ffmpeg для объединения:
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp3
Здесь
output.mp3
— это имя конечного файла, который будет содержать все объединенные треки.
Способ 2: Использование mp3wrap
Если у вас возникают проблемы с ffmpeg
, вы можете использовать mp3wrap
, который объединяет MP3-файлы непосредственно:
-
Установите mp3wrap, если вы еще этого не сделали:
sudo apt install mp3wrap
-
Объедините файлы:
mp3wrap output.mp3 *.mp3
Этот способ создаст файл
output.mp3
, в который будут объединены все MP3-файлы из текущей директории.
Примечания
- Если вы используете
cat
для объединения MP3-файлов, это может работать, но не всегда корректно, так как в результирующем файле могут возникнуть проблемы с воспроизведением. Использованиеffmpeg
илиmp3wrap
предоставляет более надежные результаты. - Убедитесь, что все MP3-файлы, которые вы хотите объединить, имеют одинаковые параметры (например, частота дискретизации и битрейт), чтобы избежать проблем с воспроизведением.
- Если у вас есть проблемы с кодировкой или другие ошибки при объединении, проверьте, что файлы не повреждены и корректно воспроизводятся.
Следуя этим шагам, вы сможете успешно объединить MP3-файлы в одной директории без ошибок.