Как миксовать обрезать растягивать сжимать субтитры в 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 При обрезке все тайминги сдвигаются в начало! То есть чтобы вернуть тайминги на место надо будет потом сдвинуть на ту величину с которой обрезали (в данном примере это 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 и этот файл просто внедрить так чтобы 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. |
Часовой пояс GMT +3, время: 17:05. |
vBulletin v3.0.1, Copyright ©2000-2024, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co