Вопрос или проблема
У меня есть набор видео, записанных на 25 кадров в секунду. Это была изначальная скорость видео, и я хочу оставить её такой. Видео и аудио работают нормально.
У меня есть соответствующий набор файлов с субтитрами (SRT), которые были синхронизированы с этими видео кем-то, кто замедлил видео до 24 кадров в секунду перед синхронизацией. Когда вы смотрите видео, субтитры сначала синхронизированы, но со временем они всё больше отстают.
Как можно программно изменить синхронизацию субтитров так, чтобы они шли ускоренно в соотношении 25/24? Я работаю в среде Linux и ищу способ изменить файлы SRT, а не обходной путь в моем плеере.
Я могу задержать эти субтитры в FFmpeg, используя опцию itsoffset
, но задержка — это не совсем то, что нужно. Я вижу некоторые советы о том, как ускорить видео или аудио, но это также не требуется.
Subtitleedit может сделать это. Это не программный метод, но хотя бы что-то:
Если я найду программный или командный способ сделать это, я отредактирую этот ответ.
Ответ или решение
Чтобы поменять скорость субтитров в файле SRT, когда у вас есть видео, записанное на скорости 25 кадров в секунду (fps), а субтитры были синхронизированы с видео, замедленным до 24 fps, вам необходимо изменить временные метки в SRT файле. Это можно сделать программно в среде Linux, используя различные инструменты. В данном ответе мы рассмотрим процесс изменения временных меток в SRT файле для обеспечения синхронности субтитров с видео.
Подход к изменению временных меток
Понимание проблемы с временными метками
Каждый элемент субтитров в SRT файле имеет начало и конец время, в течение которого текст отображается. Если субтитры были созданы для видео при 24 fps, то их временные метки будут отставать при воспроизведении видео на 25 fps. Чтобы исправить это, вам нужно ускорить все временные метки субтитров на коэффициент 25/24.
Программа для изменения временных меток
Для изменения временных меток в SRT файле вы можете воспользоваться языком программирования Python, который широко используется для манипуляции текстами и подходит для задач такого рода. Вот шаги для реализации:
-
Установка Python: Убедитесь, что Python установлен на вашем компьютере. Вы можете установить его, используя пакетный менеджер вашей системы.
-
Создание скрипта: Создайте новый файл, например,
adjust_subtitles.py
и откройте его в вашем текстовом редакторе. -
Код скрипта:
import re
def adjust_time(time_str, factor):
Преобразуем время в миллисекунды
h, m, s = map(float, re.split('[:.,]', time_str))
total_ms = (h * 3600 + m * 60 + s) * 1000
adjusted_ms = total_ms * factor
# Преобразуем обратно в формат времени
hours = int(adjusted_ms // 3600000)
minutes = int((adjusted_ms % 3600000) // 60000)
seconds = int((adjusted_ms % 60000) // 1000)
milliseconds = int(adjusted_ms % 1000)
return f"{hours:02}:{minutes:02}:{seconds:02},{milliseconds:03}"
def adjust_srt_file(input_file, output_file, factor):
with open(input_file, ‘r’, encoding=’utf-8′) as f:
content = f.readlines()
with open(output_file, 'w', encoding='utf-8') as f:
for line in content:
# Ищем временные метки
match = re.search(r'(\d{2}:\d{2}:\d{2},\d{3}) --> (\d{2}:\d{2}:\d{2},\d{3})', line)
if match:
start_time = adjust_time(match.group(1), factor)
end_time = adjust_time(match.group(2), factor)
line = line.replace(match.group(1), start_time).replace(match.group(2), end_time)
f.write(line)
if name == "main":
Скорректируем субтитры с коэффициентом 25/24
factor = 25/24
adjust_srt_file('input.srt', 'output.srt', factor)
### Как использовать скрипт
1. **Подготовьте ваши SRT файлы**: Убедитесь, что у вас есть исходный файл `input.srt`.
2. **Запустите скрипт**: Откройте терминал и выполните команду:
```bash
python adjust_subtitles.py
- Проверьте вывод: После выполнения скрипта будет создан новый файл
output.srt
, который должен быть синхронизирован с вашим видео.
Заключение
Используя этот метод, вы сможете эффективно изменить временные метки в файле SRT, чтобы обеспечить правильную синхронизацию с видео, записанным на 25 fps. Этот подход автоматизирует процесс, позволяя вам экономить время и минимизировать ошибки. Программа Python предоставляет гибкость для будущих доработок, если это будет необходимо.