Вопрос или проблема
*.srt файл субтитров
00:00:00;00 —-> 00:00:00;01
Текст 01 субтитра
Другой текст 02
- Я хотел бы вставить текст в начале строки:
Текст 01 субтитра
и - Другой текст в конце строки:
Другой текст 02
Все, что я нашел, показывает, как
добавить спереди или сзади.
Я не хочу добавлять строки.
Просто вставить текст (но сохраняя строки)
Используя Raku (ранее известный как Perl_6)
~$ raku -e 'my @array = slurp.chomp.split("\n\n"); \
for @array { \
put S/^ [\N+]**2 %% "\n" <( ^^ .* $/PREPENDED<--$/-->APPENDED\n/ \
};' file.srt
Пример ввода (из gist.github.com/matibzurovski/d690d5c14acbaa399e7f0829f9d6888e ):
1
00:00:00,000 --> 00:00:02,500
Welcome to the Example Subtitle File!
2
00:00:03,000 --> 00:00:06,000
This is a demonstration of SRT subtitles.
3
00:00:07,000 --> 00:00:10,500
You can use SRT files to add subtitles to your videos.
4
00:00:12,000 --> 00:00:15,000
Each subtitle entry consists of a number, a timecode,
and the subtitle text.
5
00:00:16,000 --> 00:00:20,000
The timecode format is hours:minutes:seconds,milliseconds.
6
00:00:21,000 --> 00:00:25,000
You can adjust the timing to match your video.
7
00:00:26,000 --> 00:00:30,000
Make sure the subtitle text is clear and readable.
8
00:00:31,000 --> 00:00:35,000
And that's how you create an SRT subtitle file!
9
00:00:36,000 --> 00:00:40,000
Enjoy adding subtitles to your videos!
Пример вывода:
1
00:00:00,000 --> 00:00:02,500
PREPENDED<--Welcome to the Example Subtitle File!-->APPENDED
2
00:00:03,000 --> 00:00:06,000
PREPENDED<--This is a demonstration of SRT subtitles.-->APPENDED
3
00:00:07,000 --> 00:00:10,500
PREPENDED<--You can use SRT files to add subtitles to your videos.-->APPENDED
4
00:00:12,000 --> 00:00:15,000
PREPENDED<--Each subtitle entry consists of a number, a timecode,
and the subtitle text.-->APPENDED
5
00:00:16,000 --> 00:00:20,000
PREPENDED<--The timecode format is hours:minutes:seconds,milliseconds.-->APPENDED
6
00:00:21,000 --> 00:00:25,000
PREPENDED<--You can adjust the timing to match your video.-->APPENDED
7
00:00:26,000 --> 00:00:30,000
PREPENDED<--Make sure the subtitle text is clear and readable.-->APPENDED
8
00:00:31,000 --> 00:00:35,000
PREPENDED<--And that's how you create an SRT subtitle file!-->APPENDED
9
00:00:36,000 --> 00:00:40,000
PREPENDED<--Enjoy adding subtitles to your videos!-->APPENDED
ПРИМЕЧАНИЕ: Для лучшего понимания происходящего, знайте, что slurp
читает файл целиком, включая новые строки. Затем вы используете “большую-S” S///
для замены, пропуская две строки с помощью ^ [\N+]**2 %% "\n"
. Маркер захвата Raku <(
отбрасывает все слева, позволяя заменять только текст субтитров (в Raku $/
— переменная совпадения).
Вот как выглядит @array
после разделения по \n\n
:
raku -e 'my @array = slurp.chomp.split("\n\n"); for @array { .raku.say};' file.srt
"1\n00:00:00,000 --> 00:00:02,500\nWelcome to the Example Subtitle File!"
"2\n00:00:03,000 --> 00:00:06,000\nThis is a demonstration of SRT subtitles."
"3\n00:00:07,000 --> 00:00:10,500\nYou can use SRT files to add subtitles to your videos."
"4\n00:00:12,000 --> 00:00:15,000\nEach subtitle entry consists of a number, a timecode,\nand the subtitle text."
"5\n00:00:16,000 --> 00:00:20,000\nThe timecode format is hours:minutes:seconds,milliseconds."
"6\n00:00:21,000 --> 00:00:25,000\nYou can adjust the timing to match your video."
"7\n00:00:26,000 --> 00:00:30,000\nMake sure the subtitle text is clear and readable."
"8\n00:00:31,000 --> 00:00:35,000\nAnd that's how you create an SRT subtitle file!"
"9\n00:00:36,000 --> 00:00:40,000\nEnjoy adding subtitles to your videos!"
Ответ или решение
Вопрос задан в области редактирования текстовых файлов формата SRT — популярного формата для субтитров, используемого в видеофайлах. Основная задача заключается в том, чтобы вставить текст в определенные позиции строк, не добавляя новых строк. Решение этой задачи возможно с использованием различных инструментов командной строки, среди которых были упомянуты утилиты такие как sed
и язык программирования Raku (ранее известный как Perl_6).
Теория
Формат SRT состоит из трех основных компонентов для каждого субтитра: номера субтитра, временного интервала и текста субтитра. Каждая из этих частей разделяется новой строкой. В данном случае, требуется вставить определенный текст в начале и в конце текста каждого субтитра без добавления новых строк.
Пример
Давайте возьмем пример из вашего вопроса:
Исходный файл:
1
00:00:00,000 --> 00:00:02,500
Welcome to the Example Subtitle File!
2
00:00:03,000 --> 00:00:06,000
This is a demonstration of SRT subtitles.
Желаемый результат:
1
00:00:00,000 --> 00:00:02,500
PREPENDED<--Welcome to the Example Subtitle File!-->APPENDED
2
00:00:03,000 --> 00:00:06,000
PREPENDED<--This is a demonstration of SRT subtitles.--->APPENDED
Применение
Поскольку была приведена реализация на языке Raku, рассмотрим, как она работает:
- Читаем весь файл целиком (это делает функция
slurp
) и разбиваем его по двум пустым строкам"\n\n"
, таким образом получая массив, где каждый элемент соответствует одной записи субтитра. - Каждая запись обрабатывается с использованием регулярного выражения. Используется оператор
S///
, предназначенный для замены, причем паттерн замены разбивает запись на отдельные составляющие: номер, временной интервал и текст. - В паттерне замены
S/^ [\N+]**2 %% "\n" <( ^^ .* $/PREPENDED<--$/-->APPENDED\n/
:^ [\N+]**2 %% "\n"
— указывает, что нужно пропустить две неновострочные последовательности (номер и временной интервал) и до следующего символа новой строки.<( ^^ .* $
— этот сегмент захватывает все до конца строки (момент захвата указывается с помощью<()
).PREPENDED<--$/-->APPENDED\n
— текст, вставляемый в начало и конец строки.
Таким образом, каждое выражение заменяет текст субтитра в каждом разделе на новый текст, оккупированный маркерами “Prepend” и “Append”.
Профессиональная реализация
Чтобы использовать этот метод, необходимо учитывать следующие моменты:
- Знание регулярных выражений и языка Raku или аналогичного инструмента командной строки может значительно облегчить выполнение задачи.
- Аналогичные задачи могут быть решены с помощью утилиты
sed
, однако она потребует более сложных подходов из-за строгости синтаксиса. - Безопасность обработки: убедитесь, что любые инструменты или скрипты, взаимодействующие с файловой системой, обеспечивают защиту от несоответствий и случайной порчи данных.
Заключение
Редактирование SRT-файлов с добавлением текста в определенные позиции является распространенной задачей в сфере обработки мультимедиа. Инструменты программирования, такие как Raku, предоставляют гибкость, необходимую для работы с большими объемами данных и скриптированием манипуляций с текстом. Этот подход позволяет автоматизировать обработку, экономя значительное количество временных и ресурсных затрат.