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

Витягти субтитри з відео

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

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

Ця сторінка бере відеофайл і повертає доріжки субтитрів, які вже лежать усередині, — один файл на доріжку, названий за мовою доріжки. Файл Matroska з англійською доріжкою SDH, китайською доріжкою й доріжкою PGS виходить трьома файлами: .srt, ще один .srt і .sup. Контейнер демуксується, а не перекодовується, тому текстова доріжка копіюється тими байтами, які вже були у файлі, — не передруковується з екрана й не отримує нових таймкодів.

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

Субтитри, впаяні в зображення, витягти неможливо, і жоден інструмент цього не зробить, бо доріжки для читання немає — ці слова є пікселями. Якщо у файлі немає жодного потоку субтитрів, сторінка так і каже замість того, щоб видати порожній файл; це стосується й випадку з випаленими субтитрами: відео з видимим текстом, але без доріжки, буде позначене як таке, з чого нічого витягти.

Перед записом сторінка перелічує всі знайдені потоки субтитрів: індекс, кодек, мову, назву й те, чи позначено потік як типовий або примусовий. Доріжки, які вже мають власний контейнер, зберігають свій формат — ASS лишається ASS, WebVTT лишається WebVTT, — бо перетворення на SRT тут мовчки викинуло б оформлення, а викидати оформлення без прохання цей сайт не робить. Доріжку, чий кодек не має окремого контейнера (наприклад, mov_text усередині MP4), перекодовують у SRT, і картка результату це позначає, а не видає за копію.

Растрові доріжки виходять зображеннями, а не текстом: потік PGS стає .sup, а доріжка DVD — .sub. Це навмисно: зображення — те, що було у файлі, а вгадувати його текст — окрема робота зі своєю сторінкою й своїм питанням про мову. Якщо потрібен текст, візьміть .sup і відкрийте сторінку PGS.

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

Які відеоконтейнери можна перетягнути?

MKV, MP4, M4V, AVI, MOV, TS, WebM, WMV, FLV, MPG і OGV. Це список демуксерів, які має вбудована збірка ffmpeg, а не список відеокодеків: що б не лежало в контейнері, доріжки субтитрів лишаються потоком того самого типу. Файл із незвичним розширенням, але нормальним тілом Matroska зазвичай читається, бо демуксер дивиться на заголовок, а не на назву; фрагментоване або недокачане відео часто не читається, бо немає індексу, яким ходити.

Чи покидає відео комп’ютер, поки його читають?

Ні. Єдине завантаження — сам рушій ffmpeg, близько 31 МБ, який сайт віддає й який браузер кешує після першого використання. Ваше відео монтують у віртуальну файлову систему рушія у вкладці й читають звідти; воно ніколи не потрапляє в тіло запиту. Це видно в панелі Network: поки файл обробляється, жоден запит його не несе. Саме заради цього сторінка й існує: більшість витягувачів спершу завантажують файл, а матеріал під юридичною або медичною забороною завантажувати не можна.

Чому я отримав .sup, а не .srt?

Бо ця доріжка зберігається зображеннями, а не текстом. Потоки PGS (кодек hdmv_pgs_subtitle) — це послідовність картинок, і чесне витягання потоку зображень дає потік зображень: .sup, який саме й чекають плеєри та редактори субтитрів. Перетворити його на текст означає розпізнати літери на кожній картинці, а це інша сторінка з питанням про мову й кроком вичитування. Витягувач ніколи не вигадує текст, якого не прочитав.

Що сторінка робить із доріжкою, чий формат не має окремого файлу?

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

Як називаються файли, коли доріжок кілька?

За назвою відео й кодом мови доріжки: файл documentary.mkv з англійською доріжкою дає documentary.eng.srt. Коли дві доріжки мають ту саму мову — звичайна англійська й англійська SDH, що буває часто, — друга стає documentary.eng-2.srt, а не перезаписує першу. Доріжка без мови відкочується до номера потоку, щоб її все одно можна було відрізнити. Якщо файлів більше одного, сторінка пропонує їх одним zip-архівом, бо браузер блокує кілька завантажень з однієї дії.

Чому перший запуск довший за другий?

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

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

Так. Кнопка скасування зупиняє витягання й припиняє робочий потік, який його виконує, тож великий файл не тримає ядро зайнятим після того, як ви вирішили не чекати. Скасування не є помилкою: елемент повертається в стан, з якого його можна повторити, а наступний запуск починає свіжий потік. Часткового файлу не пропонують, бо напівзаписаний .srt, який виглядає цілим, гірший за його відсутність.

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