Как объединить звуковые файлы с помощью ffmpeg?

Здравствуйте. Я использую утилиту ffmpeg для объединения звуковых файлов с помощью следующей команды: <br/> <code>ffmpeg.exe -i "concat:1.ogg|2.ogg" -c copy a.ogg</code> <br/> Файлы в формате ogg я получаю из внешнего сервиса, и до недавнего времени все работало отлично. Однако мне понадобилось добавить другой звук в процесс объединения. Я нашел нужный звук и сохранил его в формате ogg, но теперь команда не работает с этим новым файлом. <br/> Вот ссылки на файлы: <a href="https://dropmefiles.com/nKiY0" rel="nofollow">https://dropmefiles.com/nKiY0</a> <br/> Интересно, что если я попытаюсь объединить файл с самим собой, то все работает, но при попытке объединить с другим звуком возникают проблемы. Подскажите, пожалуйста, как можно решить эту проблему? Или, возможно, вы могли бы порекомендовать другую утилиту для объединения звуков через командную строку?
  • 27 января 2025 г. 7:14
Ответы на вопрос 3
Здравствуйте!

Проблема, с которой вы сталкиваетесь, может быть связана с различиями в кодеке, громкости, частоте дискретизации или других параметрах нового файла OGG, который вы добавили для объединения. Для успешного объединения с помощью `ffmpeg` все файлы должны иметь одинаковые параметры.

Вот несколько способов, которые вы можете попробовать:

### 1. Перекодирование файла

Попробуйте перекодировать все ваши файлы в одинаковый формат и параметры. Например:

```bash
ffmpeg -i input1.ogg -ar 44100 -ac 2 -c:a libvorbis output1.ogg
ffmpeg -i input2.ogg -ar 44100 -ac 2 -c:a libvorbis output2.ogg
ffmpeg -i newfile.ogg -ar 44100 -ac 2 -c:a libvorbis output_new.ogg
```

После этого используйте `concat` для объединения:

```bash
ffmpeg -i "concat:output1.ogg|output2.ogg|output_new.ogg" -c copy final.ogg
```

### 2. Использование файла списка

Если метод с использованием `concat` не работает, вы можете создать текстовый файл, содержащий список звуковых файлов. Например, создайте файл `filelist.txt` со следующим содержимым:

```
file '1.ogg'
file '2.ogg'
file 'newfile.ogg'
```

Затем выполните команду:

```bash
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.ogg
```

### 3. Прямое объединение

Если вы знаете, что все файлы имеют совместимые параметры, вы можете попробовать объединять их поочередно, используя:

```bash
ffmpeg -i "1.ogg" -i "2.ogg" -i "newfile.ogg" -filter_complex "[0:a][1:a][2:a]concat=n=3:v=0:a=1[outa]" -map "[outa]" final.ogg
```

### Другие инструменты

Если вы ищете альтернативные утилиты, вы можете попробовать следующие:

- **SoX** (Sound eXchange) – мощная утилита для работы со звуковыми файлами, которая также поддерживает их объединение.
- **Audacity** – графический редактор, который также позволяет объединять звуковые файлы.

Если ни один из этих методов не решает проблему, возможно, стоит проверить звучание и параметры нового файла с помощью ffmpeg или других утилит, чтобы понять, почему он не совместим с остальными файлами.
concat протокол ( -i "concat:1.ogg|2.ogg" ) наиболее строг: требует файлы с идентичными кодеками и контейнерами. 

По сути это то же, что буквально склеить файлы один за другим командой cat в Linux. В вашем примере без перекодирования, наверное, можно вообще обойтись без ffmpeg и просто склеить файлы один за другим:
copy 1.ogg + 2.ogg a.ogg
Необходимо с помощью  ffmpeg посмотреть, что кодеки у файлов одинаковые. Перед слиянием перекодировать файлы к общему кодеку.
Похожие вопросы