我有一组来自视频文件的二进制文件块。它们部分重叠。
举例来说,视频文件二进制数据可以表示如下:
---ABCDEFGHIJKLMNOPQRSTUVXYZ
在哪里
---
是标题。
块可以像这样表示(由于每个块的头部部分存在一些差异,因此简化了):
chunk 1: "---ABCD"
chunk 2: "---DEFG"
chunk 3: "---GHIJ"
chunk 4: "---JKLM"
...
我需要一个命令行工具来合并这些文件。它应该获取块 1 的末尾部分,在块 2 中搜索该模式,将块 1 连接到块 2 从模式到末尾的部分(忽略块 2 中模式开始之前的所有数据)。
然后对所有剩余的块重复此操作,直到我们获得完整的视频文件。
答案1
在处理被录音设备分成多个部分的 MPEG 传输流时,我发现自己多次尝试实现完全相同的目标。
主要问题是,对于两个连续的文件,重叠区域永远不会完全相同,因为每个文件前面总是会添加某种标头。所以基本上现有的合并工具都不适合我。
最后,我按照@TrojanName的建议使用了一个简单的十六进制编辑器,但很快发现这个手动过程太耗时且容易出错。因此,我决定编写一个名为binmerge
它会自动完成。
答案2
我只需使用一个好的二进制编辑器并手动完成即可。
答案3
如果您知道标头的长度 (---) 和每个段的长度 (A、B、C 等),则可以使用head
和tail
命令。如果这些长度因文件而异,则您正在查看子字符串搜索问题(搜索出现在块 1 中的块 2 中的最大子字符串)。您可能能够使用 awk 或 Python 来自动化它。
要得到答案,你可能想在 stackoverflow 上提问。不过,如果你只想加入一个视频流,我同意 Brian Fenton 的观点。