Як витягнути підзаголовки з відео за допомогою ffmpeg?


34

Я намагаюся витягнути підзаголовки з відео як .srtфайл, я використав таку команду:

FFMPEG -i mytestmovie.mkv -vn -an -codec:s:0.1 srt sub.srt

Але я отримав помилку як нерозпізнаний варіант. codec:s:0:1 Тож чи можете ви сказати мені точну команду і як витягнути підзаголовки як .srtфайл у відео?


umair: скажи мені у командному рядку
vijay

У мене така ж проблема. Ви отримали це, щоб врешті-решт спрацювати?
Maxime Labelle

Відповіді:


51

Простий:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
  • -i : URL / шлях вхідного файлу.
  • -map : Позначте один або кілька вхідних потоків як джерело для вихідного файлу.
  • s: 0 : Виберіть потік субтитрів.

2
Це працювало для мене з файлом MP4 із вбудованими субтитрами.
Рубенс Маріуццо

11
Це завантажило б перший трек субтитрів. Якщо їх декілька, використовуйте 0:s:1для завантаження другого, 0:s:2для завантаження третього тощо.
Fabien Snauwaert

5
@ jm3 Чи трапляється вам знати який-небудь спосіб автоматично витягувати всі потоки субтитрів з файлу, називаючи їх за їх ідентифікатором мови (наприклад, eng, fre, dut тощо)?
о.

чому це так повільно при витягуванні з великого MKV-контейнера (~ 4 гб)?
користувач25

Щоб витягнути більше субтитрів відразу, вам потрібно дублювати -mapпараметри для кожного файлу. Крім того, включати , -c copyтак що він просто витягує файл , не намагаючись обробити його: ffmpeg -i Movie.mkv -c copy -map 0:s:0 subs.01.srt -c copy -map 0:s:1 subs.02.srt. У будь-якому випадку пройде багато часу, оскільки ffmpeg повинен прочитати весь відеофайл, щоб знайти всі частини потоків підзаголовків.
Радек Печ

8

-codec:s:0:1невірно. Якщо ви використовуєте, -codec:s:0тоді ffmpeg використовуватиме вказаний кодек для першого потоку субтитрів, що передається на вихід, якщо ви використовуєте, -codec:s:1він буде використовувати його для другого потоку субтитрів тощо.

Ви також -codec:sможете вибрати всі потоки вихідних субтитрів або -codec:2вибрати третій вихідний потік, незалежно від того, що це.

Ви, мабуть, заплутані, оскільки -mapпараметр поводиться по-іншому - там ви повинні вибрати, з якого входу надходить вибраний потік. (значить, -map 0:s:0буде взято перший потік субтитрів з першого вводу та подати його на вихід). Однак, -mapце для вибору потоків, які ви бажаєте взяти з входів; тоді як більшість інших параметрів, які використовують відображення потоків, використовуються в потоках після їх вибору (тому немає необхідності вказувати, з якого вхідного файлу вони перебувають), оскільки вони передаються на вихід.


evilsoup: я використовував би таку команду E: \ FFMpeg_Latest> ffmpeg -i E: \ Routine \ rut.mkv -vn -an -map 0: s: 0 srt E: \ Routine \ sub.srt, здається, помилка i Не вдалося знайти відповідний вихідний формат для 'srt', можете сказати мені команду для вилучення підзаголовків у відео ...
vijay

2
Спробуйте: ffmpeg -i E:\Routine\routine.mkv -map 0:s:0 E:\Routine\sub.srt(ffmpeg повинен виявити, що ви хочете srt субтитри від виводу вихідного файлу)
evilsoup

Я використав: ffmpeg -i film.mp4 -vn -an -codec:s srt film.srtщо має скопіювати всі субтитри до файлу srt.
Стюарт

@Stuart він не витягує всіх субтитрів
користувач25

1
@evilsoup -codec:sдорівнює -codec:s:0тому він не вибирає всі субтитри ... він витягне першу текстову доріжку
користувач25
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.