Соответствие и слияние текстовых файлов программно - PullRequest
0 голосов
/ 23 января 2011

Я хотел бы объединить текстовый файл EDL (редактировать список решений) с другим текстовым файлом, который содержит субтитры. EDL генерируется из программы редактирования видео Final Cut Pro, а текстовый файл представляет собой обычный текст. Хотя этот конкретный запрос предназначен для конкретного конечного использования, я хотел бы изучить общий метод, которым можно следовать для выполнения такого рода обработки. Я знаком с Python, но вполне в порядке с примерами на других языках, если они понятны и просты в использовании на рабочей станции UNIX / Mac.

Вот пример первых нескольких строк файла EDL:

TITLE: SAMPLE EDL
FCM: NON-DROP FRAME

001  GEN      V     C        00:01:03:16 00:01:04:29 01:00:03:06 01:00:04:19  
* FROM CLIP NAME:  TITLE 3D
* COMMENT: 
* FROM CLIP IS A GENERATOR

002  GEN      V     C        00:01:04:15 00:01:08:03 01:00:04:29 01:00:08:17  
* FROM CLIP NAME:  TITLE 3D
* COMMENT: 
* FROM CLIP IS A GENERATOR

003  GEN      V     C        00:01:04:15 00:01:09:05 01:00:10:19 01:00:15:09  
* FROM CLIP NAME:  TITLE 3D
* COMMENT: 
* FROM CLIP IS A GENERATOR

004  GEN      V     C        00:01:04:15 00:01:07:03 01:00:17:17 01:00:20:05  
* FROM CLIP NAME:  TITLE 3D
* COMMENT: 
* FROM CLIP IS A GENERATOR

Вот пример четырех «сопутствующих» строк из текстового файла субтитров:

001

If we think about climate change,

002

most of society's focused on fossil fuel combustion.

003

But what humans release on an annual basis is just one part of the carbon cycle.

004

Carbon dioxide concentrations also go up and down

Наконец, вот пример желаемого конечного результата:

[00:00:03.06]
If we think about climate change,
[00:00:04.19]

[00:00:04.29]
most of society's focused on fossil fuel combustion.
[00:00:08.17]

[00:00:10.19]
But what humans release on an annual basis is just one part of the carbon cycle.
[00:00:15.09]

[00:00:17.17]
Carbon dioxide concentrations also go up and down
[00:00:20.05]

Глядя на пример файла EDL, важные биты текста:

  1. Номер строки, т. Е. 001 002 003 ...
  2. Третий и четвертый столбцы номеров временных кодов, т.е.

    01:00:03:06 01:00:04:19
    01:00:04:29 01:00:08:17
    01:00:10:19 01:00:15:09
    

В текстовом файле субтитров номер строки соответствует номеру строки в файле EDL. Это совпадение один-к-одному без смещений или пропусков в последовательности. Каждая строка текста должна переходить в желаемый конечный результат как целая строка без разрывов строки.

Конечный результат, по существу, помещает каждую пронумерованную строку текста субтитров между первым и вторым номерами временного кода. Номера временного кода также необходимо немного переформатировать с помощью:

  1. Окружение каждого набора в квадратных скобках, т.е. []
  2. Убедиться, что первый набор чисел (часов) обнулен, т.е. 01:00:03:06 становится 00:00:03:06, а 07:06:15:22 становится 00:06:15:22
  3. Последнее двоеточие ':' (перед номером кадра) преобразуется в период '.', т.е. 00:00:03:06 становится 00:00:03.06

И это в значительной степени так. В текстовом файле субтитров может быть от 100 до 120 строк текста и соответственно от 100 до 120 «решений» в текстовом файле EDL. Если требуется какое-либо дальнейшее объяснение, пожалуйста, просто спросите. Основная проблема, с которой я сталкиваюсь - это выяснить, с чего начать. Хотя я могу обернуться, манипулируя одной строкой текста внутри одного файла программным способом, я немного озадачен тем, как управлять множеством строк между несколькими файлами.

Заранее всем спасибо.

Ответы [ 2 ]

2 голосов
/ 24 января 2011

Примерно это должен быть план.

  • Чтение файлов
  • Создать парсер для каждого типа файлов
  • Хранить данные в полезных структурах данных / объектах
  • Вывод в соответствующем формате

Разбивайте каждый шаг до тех пор, пока это просто вопрос записи в коде. Тест на каждом шаге.

0 голосов
/ 14 декабря 2011

Это соответствие 1: 1 из 1 файла в другой.Разобрать каждый файл в список полезных токенов.

Один список будет иметь время начала и окончания, другой будет иметь субтитры.

(время начала и окончания):

01:00:03:06 01:00:04:19 -> 01:00:04:29 01:00:08:17 -> 01:00:10:19 01:00:15:09 -> ...

другой файл будет иметь:

"If we think about climate change," -> "most of .. fuel combustion" -> "But what .. carbon cycle" -> ..

Теперь переберите оба файла и объедините 2 списка (от 1 до1) (возможно создание нового списка).В конце напишите новый список в файл.

...