Вернуться   Форум > Университет > Видеораздел > Школа релизеров
Регистрация Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2023, 15:12   #1
tlya85
Главный Кинооператор
Медаль пользователю. ЗОЛОТО Новичок
Регистрация: 06.02.2023
Сообщения: 45
Репутация: 7
Счастье Как миксовать обрезать растягивать сжимать субтитры в ffmpeg!

ffmpeg умеет обрезать, сдвигать, клеить(миксовать) и растягить субтитры. (помимо того что умеет выдирать из файла с видео и вклеивать в файл с видео)

Зачем обрезать? Чтобы потом склеить несколько разных участков. Например наложить субтитры из расширенной версии на обычную.

Зачем сдвигать? Сдвиг субтитров можно задать и через параметр delay. И для субтитров большинство плееров понимают этот параметр(в отличие от delay в аудио). Но некоторые плееры не понимают. Поэтому лучше сдвинуть тайминги внутри субтитров. Есть и другие применения, о которых будет написано ниже.

Зачем растягивать/сжимать? Один и тот же фильм может выходить с разной скоростью воспроизведения - 23.976, 24, 25 кадров в секунду. Чтобы использовать субтитры с одного источника на другом надо изменить их скорость воспроизведения - а попросту поменять тайминги.




Как обрезать субтитры на 48 минуте 30.960 секундах по 70 минуту 56.450 секунду?
Код:
ffmpeg -i source.srt -ss 00:48:30.960 -to 01:10:56.450 cutted.srt
где -ss -начало, -to - конец
При обрезке все тайминги сдвигаются в начало! То есть чтобы вернуть тайминги на место надо будет потом сдвинуть на ту величину с которой обрезали (в данном примере это 00:48:30.960)

То есть чтобы просто отрезать первые 3 секунды надо сделать так:
Код:
ffmpeg -i source.srt -ss 00:00:03.000 cutted.srt

Чтобы в начале задать задержку на 5.5 секунд
Код:
ffmpeg -itsoffset 00:00:05.500 -i source.srt offseted.srt

Чтобы растянуть(замедлить) в 2 раза
Код:
ffmpeg -itssclale 2.0 -i source.srt scaled_2.srt

сжать из 23.976 кадров в 25 кадров, то есть ускорить 25/23.976=1,042708333, надо "растянуть" на 0,959040959

Код:
ffmpeg -itssclale 0.959040959 -i source.srt scaled_23.976fps_to_25.000fps.srt


Смешать субтитры друг с другом:
Код:
ffmpeg -i "concat:1first_source.srt|2second_source.srt" mixed.srt

при смешивании ffmpeg сравнивает тайминги(время начала каждого сообщения) и склеивает файлы друг с другом постепенно строчку за строчкой. Полезно будет например если хочется вставить в готовые субтитры какую нибудь недопереведенную фразу, словечко. Можно сделать текстовый файл и потом если замиксовать, то ffmpeg сам найдёт куда вставить и переставит нумерацию.
То есть для того чтобы к существующим субтитрам вставить на 5ой минуте слово "Нет". А на 10 минуте слово "Собака" надо будет просто создать файл

Код:
"1 00:05:00,000 --> 00:05:01,439 Нет 2 00:10:00,000 --> 00:10:02,000 Собака"

и этот файл просто внедрить так чтобы ffmpeg сам вставил куда надо:
Код:
ffmpeg -i "concat:full.srt|da_sobaka.srt" full_plus_da_sobaka.srt





Это всё можно комбинировать.
Давайте разберём пример как вырезать кусок с 20 ой минуты по 23ую. Надо сначала сделать первый кусок по 20ую минуту:
Код:
ffmpeg -i init_full.srt -to 00:20:00.000 first_part.srt

потом сделать второй кусок с 23ей минуты
Код:
ffmpeg -i init_full.srt -ss 00:23:00.000 second_part.srt

потом подвинуть второй кусок туда, где остановился первый кусок(не забываем что при обрезке всё сдвинулось в начало)
Код:
ffmpeg -itsoffset 00:20:00.000 -i second_part.srt second_part_moved.srt

потом миксуем первый кусок и второй кусок:
Код:
ffmpeg -i "concat:first_part.srt|second_part_moved.srt" result_with_gap.srt

так как второй кусок у нас по таймингам подвинут в конец первого куска, то произойдёт не смешивание, а просто последовательное приклеивание кусков друг к другу.
Готово - вырезали кусок размером в 3 минуты.




Возможно это всё легко сделать в какой-нибудь программе, но иногда лень что-то скачивать. Хотя растягивать/сжимать даже проще в ffmpeg. Клеить куски друг к другу наверное проще в программе с GUI.
  Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей - 0 , гостей - 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск



Часовой пояс GMT +3, время: 16:30.