у меня есть несколько файлов ogg vorbis, закодированных с теми же свойствами, которые я хочу объединить в один файл.
Я знаю, что формат ogg vorbis поддерживает простое объединение нескольких файлов, таких как:
$ cat file1.ogg file2.ogg > output.ogg
но, к сожалению, не все игроки могут понять файлы, созданные таким образом, например, мой мобильный аудиоплеер, и я бы избежать, чтобы купить новый. Другие программы, которые этого не понимают-gstreamer. Этот метод также не работает, если входные файлы ogg имеют одинаковый идентификатор потока.
кроме того, поскольку я хотел бы выбросить исходные файлы и сохранить только конкатенированную версию, я хотел бы, чтобы конкатенация была выполнена без потерь, как и cat
решение.
Я также хочу избежать объединения файлов в формат без потерь, такой как flac, поскольку это излишне увеличит размер файла. Если это было бы хорошо, то я мог бы сохранить оригинальные файлы ogg и использовать меньше пространство.
кажется, что ffmpeg иногда может сделать это с помощью concat demuxer:
$ cat inputs.txt
file 'in1.ogg'
file 'in2.ogg'
$ ffmpeg -f concat -i inputs.txt -c copy out.ogg
если я смотрю на сырые вывести из входных файлов, то я могу найти ворбис пакеты представлены в выходном файле. Так что, думаю, никакого перекодирования не происходит.
но это, кажется, не работает на всех входных файлах. Иногда (не уверен, что вызывает это), ffmpeg даст предупреждение:
Non-monotonous DTS in output stream 0:0; previous: 5011328, current: 5011200; changing to 5011329. This may result in incorrect timestamps in the output file.
и тогда я услышу очень слабый "зазор" между двумя файлами. Таким образом, это, безусловно, не является глобальным решением.
так как я не мог найти один я попытался написать свой собственный инструмент в этот stackoverflow вопрос.
есть ли способ объединить несколько файлов ogg vorbis, но без их перекодирования и только с одним потоком на выход? Какой инструмент способен выполнить эту работу?