об'єднання файлів ogg vorbis без втрат


12

У мене є пара файлів 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, але без їх перекодування і лише одним потоком на вихід? Який інструмент здатний виконати цю роботу?



@JoshRumbut так, і він страждає від того, щоб містити звукові прогалини, де файли об'єднуються для деякого вводу
josch

Ви можете спробувати скористатися PiTiVi та розмістити кліпи послідовно на часовій шкалі.
harrymc

1
ОП (і мені теж) хочеться програмного рішення, яке не передбачає взаємодії з користувачем після збору необхідних файлів.
Віллермен

2
@ RalphRönnquist Sox перекодує вхід.
Джош

Відповіді:


2

ffmpeg -i "concat:ogg1.ogg|ogg2.ogg|ogg3.ogg" -c copy out.oggстворює в моїй системі зв'язаний файл ogg, трохи менше, ніж окремі файли разом (можливо, через спільні метадані). Мені це звучить так само, так що конкатенація повинна бути без втрат. Однак це не додає невеликого зазору між файлами.

ffmpeg -f concat -safe 0 -i ogg1.ogg -i ogg2.ogg -c copy out.ogg повинен працювати, але це дає помилку на моєму Homebrew (macOS) ffmpeg від 3.3.2.

[concat @ 0x7f91e8800400] Line 1: unknown keyword 'OggS'
ogg1.ogg: Invalid data found when processing input

Джерело: https://trac.ffmpeg.org/wiki/Concatenate


Я отримую ту саму помилку
Housemd

0

Ви можете поглянути на FFmpeg . У ньому є багато інструментів, які я не зовсім розумію, але я пам’ятаю з документації, що є інструмент, щоб зробити саме це. В іншому випадку, я думаю , що ви можете використовувати VLC Media Player "s командного рядка .


1
Чи можете ви трохи розширити свою відповідь? Просто вказівка ​​на продукт та його документацію насправді не пояснює, як досягти рішення. Тут краще включити кілька інструкцій, як використовувати продукт для вирішення проблеми. Гарне керівництво за рекомендацією програмного забезпечення тут: meta.superuser.com/questions/5329 / ... . Дякую.
fixer1234

Просто використання ffmpeg -f concat -i inputs.txt -c copy out.oggне працює. Мені цікаво, як ви думаєте, це можна вирішити за допомогою ffmpeg.
Джош
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.