Перейти до основного вмісту
SubtitleMatrix

Синхронізувати субтитри з аудіо

МедіавхідСинхронізація з аудіо

Перший запуск завантажує відеодвигун — близько 31 МБ, віддається цим сайтом і після цього кешується браузером. Він використовується лише для читання аудіодоріжки; субтитри зіставляються із самим звуком, без мовної моделі й без жодного надсилання.

Параметри

Наскільки субтитри можуть бути далеко від того, де вони мають бути, в будь-який бік. Це налаштування ціни й ризику, а не точності: ширше вікно знаходить більший дрейф, але й дає пошуку більше шансів осісти на збігу, що випадково добре оцінюється. Ніщо понад приблизно хвилину не походить від обрізки чи логотипу — така величина зазвичай означає інший монтаж фільму або невідповідність частоти кадрів, яку ця сторінка вирішує окремо. Вибирайте найменше вікно, що покриває вашу здогадку.

Ця сторінка виправляє субтитри, які стоять у правильному порядку, але в неправильний час. Ви даєте їй дві речі — файл субтитрів і відео або аудіо, до якого він належить, — і вона з’ясовує, наскільки текст з’їхав, а потім переписує файл, зсунувши кожну репліку. Зсув на кілька секунд походить від обрізок і логотипів; зсув, який росте протягом фільму, — від невідповідності частоти кадрів, коли майстер 23,976 fps поєднали з субтитрами, виставленими на 25 fps, і помилка вже півтори хвилини наприкінці першої години.

Вимірювання роблять по самому звуку. Сторінка витягує моно-доріжку, складає її у двадцятимілісекундні кадри гучності й позначає, які кадри містять мовлення. Далі вона раз за разом ставить одне питання: за цього зсуву й цієї зміни швидкості яка частка тексту субтитрів припадає на мовлення, а не на тишу? Відповідь рахують за кожною реплікою й усереднюють, а застосовують ту пару, яка перемогла. Розпізнавання мовлення тут немає, тому воно працює за кілька секунд і працює, коли субтитри мовою, для якої у вас немає моделі.

Оскільки оцінка — це вимірювання, а не гарантія, сторінка зроблена так, щоб нічого не робити, коли вимірювання слабке. П’ять реплік або менше, звукова доріжка без виявленого мовлення, найкраща оцінка, яка все ще здебільшого падає на тишу, або два дуже різні вирівнювання з майже однаковою оцінкою — кожен із цих випадків закінчується звітом і без переписаного файлу субтитрів. Тихе невдале завершення тут значно краще за впевнене: субтитри, зсунуті на п’ять секунд, виглядають неохайно, але субтитри, зсунуті на п’ять секунд інструментом, який заявив про успіх, важко помітити й важко пояснити.

Коли вирівнювання добре, ви отримуєте два файли, бо вони відповідають на різні питання. Виправлений файл субтитрів зберігає свій формат і називається film.synced.srt або з тим розширенням, яке було, — його можна одразу грати. Звіт — невеликий текстовий файл зі зсувом у мілісекундах, фактично застосованим відношенням, оцінкою, впевненістю й одним рядком про те, чи файл узагалі чіпали. Обидва виходять з одного запуску, тому партія серій дає узгоджену пару для кожної.

Робота локальна. Звук декодує ffmpeg, скомпільований у WebAssembly, завантажений один раз із цього сайту й закешований далі; субтитри розбирають у вкладці. Нічого про ваш фільм чи субтитри нікуди не надсилають — кроку завантаження, який можна пропустити, немає, і це важливо для матеріалу, якому не можна залишати машину.

Часті запитання

Чим виміряний зсув відрізняється від фіксованого, який я вводжу на сторінці зсуву?

Сторінка зсуву застосовує число, яке ви вже знаєте, тому лишається правильною, незалежно від того, чи згоден звук. Ця сторінка починає з протилежного кінця: вона припускає, що числа ви не знаєте, читає мовленнєву активність зі звуку й розв’язує зсув і зміну швидкості разом. Тому вона й може виправити проблему частоти кадрів, яку жоден окремий зсув не виражає: при 25 проти 23,976 помилка на початку нульова й росте приблизно на 3,6 секунди за годину, тож зсув, який лагодить початок, робить кінець гіршим.

Чому сторінка іноді відмовляється писати новий файл субтитрів?

Бо неправильне виправлення помітити важче, ніж відсутнє. Пошук повідомляє чотири речі: скільки реплік було в роботі, чи містив звук мовлення, яка частка часу субтитрів припала на мовлення і наскільки переможець був кращий за найкращу справді іншу альтернативу. Якщо хоч одна з них слабка, запуск дає лише звіт, у рядку стану якого написано not-found разом із причиною. Ви нічого не втрачаєте — початковий файл недоторканий — і отримуєте число, яке можна перевірити, перш ніж щось робити руками.

Що означає відношення у звіті для розбіжності 23,976 і 25 fps?

Час реплік множать на відношення, а потім зсувають на зміщення, тому відношення 1,0427 означає, що субтитри виставляли на швидшу кадрову основу й кожну репліку треба розтягнути пізніше. Сторінка пробує обидва напрями кожної поширеної пари, бо те, як воно читається, залежить від того, який файл у вас у руках: 1,0427 і 0,9590 — та сама розбіжність, побачена з різних кінців. Якщо повідомлене відношення 1,000000, а зсув менший за кадр, файл уже збігається його не чіпають.

Чи збереже виправлений файл оформлення, чи лише таймкоди?

Змінюються таймкоди, і більше нічого. Субтитри розбирають у те саме внутрішнє подання, яке використовує кожна інша сторінка сайту, переписують початок і кінець кожної репліки й серіалізують назад у формат, у якому файл прийшов. Оформлення ASS, позиціювання й вбудовані теги виживають; структура файлу теж, тому .ass на вході дає .ass на виході, а не сплющений .srt. Єдиний видимий виняток — репліка, стиснута великим відношенням до менш ніж мілісекунди: її тримають на одній мілісекунді й рахують у списку втрат.

Чи працює це, коли субтитри мовою, відмінною від звуку?

Так, і в цьому суть вимірювання гучності замість розпізнавання слів. Мовленнєва активність — це форма: речення є сплеском енергії, за яким іде проміжок, і ця форма однакова, чи голос говорить німецькою, чи іспанською. Німецький дубляж під іспанськими субтитрами вирівнюється так само добре, як збігна пара. Чого сторінка не вміє — відрізнити дубльований рядок від оригінального, тому якщо дубляж додає репліки, загальне вирівнювання все одно знайдеться, але окремі репліки у вставлених місцях можуть стояти не на тому рядку.

Чи можна скасувати обробку і коли саме вона спиниться?

Під час витягання звуку скасування зупиняє ffmpeg, тож доріжка не декодується далі. Сам пошук зсуву триває секунди, тому проміжок для скасування в ньому малий; сторінка не обіцяє миттєвої реакції там, де її немає. Часткових файлів не пропонують: або ви маєте пару «виправлені субтитри й звіт», або не маєте нічого, крім звіту про відмову.

Споріднені інструменти