以编程方式匹配和合并文本文件
我想把一个叫做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文件,重要的文本部分有:
- 行号,比如
001
002
003
... 时间码的第三和第四列,比如:
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文件中的行号是一一对应的,没有偏移或间隔。每一行文本应该完整地放入最终结果中,不要有换行。
最终结果基本上是把每个编号的字幕文本行夹在第一和第二个时间码数字之间。时间码数字也需要稍微重新格式化,具体包括:
- 把每组数字用方括号括起来,比如
[]
- 确保第一组数字(小时)归零,比如
01:00:03:06
变成00:00:03:06
,07:06:15:22
变成00:06:15:22
- 最后一个冒号 '
:
'(在帧数字之前)要改成句点 '.
',比如00:00:03:06
变成00:00:03.06
就这些了。字幕文本文件大约有100到120行,而EDL文本文件也有相应的100到120个“决策”。如果需要进一步解释,请随时问我。我现在面临的主要问题是如何开始这个过程。虽然我能理解如何在一个文件中编程处理单行文本,但对于如何在多个文件之间管理多行文本,我有点困惑。
提前感谢大家。
2 个回答
0
这是一个将一个文件中的内容与另一个文件中的内容一一对应的过程。我们需要把每个文件的内容解析成一系列有用的标记。
一个列表会包含开始和结束时间,另一个列表则会包含字幕。
(开始时间,结束时间):
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
大致上,这应该是我们的计划。
- 读取文件
- 为每种文件类型制作解析器
- 把数据存储在有用的数据结构或对象中
- 以合适的格式输出
把每一步拆分开,直到只需要把它写成代码就行。每一步都要进行测试。