У мене є пара файлів 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
Якщо я подивлюся на неочищений гексадп моїх вхідних файлів, то зможу знайти пакети vorbis, точно представлені у вихідному файлі. Тож я гадаю, що перекодування дійсно не відбувається.
Але це, здається, не працює на всіх вхідних файлах. Іноді (не впевнений, що викликає це), 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, але без їх перекодування і лише одним потоком на вихід? Який інструмент здатний виконати цю роботу?