Найти шаблон с использованием sed и вставить «текст» в начало следующей строки.

Вопрос или проблема

*.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!"

https://raku.org

Ответ или решение

Вопрос задан в области редактирования текстовых файлов формата 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, рассмотрим, как она работает:

  1. Читаем весь файл целиком (это делает функция slurp) и разбиваем его по двум пустым строкам "\n\n", таким образом получая массив, где каждый элемент соответствует одной записи субтитра.
  2. Каждая запись обрабатывается с использованием регулярного выражения. Используется оператор S///, предназначенный для замены, причем паттерн замены разбивает запись на отдельные составляющие: номер, временной интервал и текст.
  3. В паттерне замены S/^ [\N+]**2 %% "\n" <( ^^ .* $/PREPENDED<--$/-->APPENDED\n/:
    • ^ [\N+]**2 %% "\n" — указывает, что нужно пропустить две неновострочные последовательности (номер и временной интервал) и до следующего символа новой строки.
    • <( ^^ .* $ — этот сегмент захватывает все до конца строки (момент захвата указывается с помощью <()).
    • PREPENDED<--$/-->APPENDED\n — текст, вставляемый в начало и конец строки.

Таким образом, каждое выражение заменяет текст субтитра в каждом разделе на новый текст, оккупированный маркерами “Prepend” и “Append”.

Профессиональная реализация

Чтобы использовать этот метод, необходимо учитывать следующие моменты:

  • Знание регулярных выражений и языка Raku или аналогичного инструмента командной строки может значительно облегчить выполнение задачи.
  • Аналогичные задачи могут быть решены с помощью утилиты sed, однако она потребует более сложных подходов из-за строгости синтаксиса.
  • Безопасность обработки: убедитесь, что любые инструменты или скрипты, взаимодействующие с файловой системой, обеспечивают защиту от несоответствий и случайной порчи данных.

Заключение

Редактирование SRT-файлов с добавлением текста в определенные позиции является распространенной задачей в сфере обработки мультимедиа. Инструменты программирования, такие как Raku, предоставляют гибкость, необходимую для работы с большими объемами данных и скриптированием манипуляций с текстом. Этот подход позволяет автоматизировать обработку, экономя значительное количество временных и ресурсных затрат.

Оцените материал
Добавить комментарий

Капча загружается...