|  03.12.2023, 15:12 | #1 | 
| Заблокирован  Любитель |  Как миксовать обрезать растягивать сжимать субтитры в ffmpeg! ffmpeg умеет обрезать, сдвигать, клеить(миксовать) и растягить субтитры. (помимо того что умеет выдирать из файла с видео и вклеивать в файл с видео) Зачем обрезать? Чтобы потом склеить несколько разных участков. Например наложить субтитры из расширенной версии на обычную. Зачем сдвигать? Сдвиг субтитров можно задать и через параметр delay. И для субтитров большинство плееров понимают этот параметр(в отличие от delay в аудио). Но некоторые плееры не понимают. Поэтому лучше сдвинуть тайминги внутри субтитров. Есть и другие применения, о которых будет написано ниже. Зачем растягивать/сжимать? Один и тот же фильм может выходить с разной скоростью воспроизведения - 23.976, 24, 25 кадров в секунду. Чтобы использовать субтитры с одного источника на другом надо изменить их скорость воспроизведения - а попросту поменять тайминги. Как обрезать субтитры на 48 минуте 30.960 секундах по 70 минуту 56.450 секунду? Код: 
 При обрезке все тайминги сдвигаются в начало! То есть чтобы вернуть тайминги на место надо будет потом сдвинуть на ту величину с которой обрезали (в данном примере это 00:48:30.960) То есть чтобы просто отрезать первые 3 секунды надо сделать так: Код: 
 Чтобы в начале задать задержку на 5.5 секунд Код: 
 Чтобы растянуть(замедлить) в 2 раза Код: 
 сжать из 23.976 кадров в 25 кадров, то есть ускорить 25/23.976=1,042708333, надо "растянуть" на 0,959040959 Код: 
 Смешать субтитры друг с другом: Код: 
 при смешивании ffmpeg сравнивает тайминги(время начала каждого сообщения) и склеивает файлы друг с другом постепенно строчку за строчкой. Полезно будет например если хочется вставить в готовые субтитры какую нибудь недопереведенную фразу, словечко. Можно сделать текстовый файл и потом если замиксовать, то ffmpeg сам найдёт куда вставить и переставит нумерацию. То есть для того чтобы к существующим субтитрам вставить на 5ой минуте слово "Нет". А на 10 минуте слово "Собака" надо будет просто создать файл Код: 
 и этот файл просто внедрить так чтобы ffmpeg сам вставил куда надо: Код: 
 Это всё можно комбинировать. Давайте разберём пример как вырезать кусок с 20 ой минуты по 23ую. Надо сначала сделать первый кусок по 20ую минуту: Код: 
 потом сделать второй кусок с 23ей минуты Код: 
 потом подвинуть второй кусок туда, где остановился первый кусок(не забываем что при обрезке всё сдвинулось в начало) Код: 
 потом миксуем первый кусок и второй кусок: Код: 
 так как второй кусок у нас по таймингам подвинут в конец первого куска, то произойдёт не смешивание, а просто последовательное приклеивание кусков друг к другу. Готово - вырезали кусок размером в 3 минуты. Возможно это всё легко сделать в какой-нибудь программе, но иногда лень что-то скачивать. Хотя растягивать/сжимать даже проще в ffmpeg. Клеить куски друг к другу наверное проще в программе с GUI. | 
|   | 
|  09.05.2025, 05:14 | #2 | 
| Заблокирован  Любитель | Обратие внимание, что к работе с субтитрами в ffmpeg как бы немного другой подход нежели видео и аудио. Точнее более замороченный. Потому что субтитры имеют свойство - время каждой фразы. И если нарезать видео или аудио - то там просто будут куски. А куски субтитров сохраняют временные метки. Они могут подвигаться, сжиматься, но временные метки - неотъемлемая часть субтитров. То есть в ffmpeg разное поведение если вырезать субтитры вот так: Код: 
 Код: 
 И если склеивать субтитры, то разное поведение если делать вот так: Код: 
 Код: 
 | 
|   |