#mp4 #merge #multiple #join #camera #settings #data

bin+lib mp4-merge

用于无损连接由相同相机和设置拍摄的多个 .mp4 文件的工具和库

9 个版本

0.1.9 2024 年 8 月 4 日
0.1.8 2024 年 4 月 30 日
0.1.7 2024 年 1 月 24 日
0.1.6 2023 年 8 月 29 日
0.1.2 2022 年 8 月 31 日

#47 in 视频

Download history 144/week @ 2024-05-02 110/week @ 2024-05-09 108/week @ 2024-05-16 159/week @ 2024-05-23 114/week @ 2024-05-30 96/week @ 2024-06-06 130/week @ 2024-06-13 126/week @ 2024-06-20 92/week @ 2024-06-27 59/week @ 2024-07-04 95/week @ 2024-07-11 117/week @ 2024-07-18 116/week @ 2024-07-25 247/week @ 2024-08-01 180/week @ 2024-08-08 103/week @ 2024-08-15

659 每月下载量
用于 gopro-chaptered-video-ass…

MIT/Apache

35KB
560

mp4-merge

用于无损连接由相同相机和设置拍摄的多个 .mp4 文件的工具和库。

这对于合并由相机因 SD 卡 4GB 限制而创建的多个文件很有用。

此工具可以将所有这些单独的文件合并到一个新的文件中,而不进行转码或丢失任何数据。

所有原始轨道都得到保留,所有元数据都保持与原始文件相同。

它被创建用于帮助在 Gyroflow 中稳定此类文件。

下载

请参阅 版本 页面。

用法

最简单的方法是将多个 .mp4 文件拖放到 mp4_merge 可执行文件。

命令行用法

  • 合并指定的文件并将输出到 IN_FILE1.mp4_joined.mp4
mp4_merge IN_FILE1.mp4 IN_FILE2.mp4 IN_FILE3.mp4 ...
  • 合并指定的文件并将输出到 result.mp4
mp4_merge IN_FILE1.mp4 IN_FILE2.mp4 IN_FILE3.mp4 ... --out result.mp4

作为 Rust 库使用

[dependencies]
mp4-merge = "0.1.9"
let files = ["IN_FILE1.mp4", "IN_FILE2.mp4"];
mp4_merge::join_files(&files, "out.mp4", |progress| {
    println!("Merging... {:.2}%", progress * 100.0);
}).unwrap();

它是如何工作的?

思路是将原始轨道数据合并在一起,然后重写 stbl 盒子(它是原始数据的描述符),以考虑额外的数据。为了做到这一点,这个库执行以下操作

  1. 扫描每个提供的文件并收集
    • mdat 偏移量和大小
    • 存储在 mvhdtkhdmdhd 盒子中的持续时间
    • stbl 描述:sttsstszstssstscstco/co64
  2. 合并所有这些描述:求和持续时间,将 stbl 列表逐个添加到另一个并添加基于上一个文件 mdat 大小的块偏移量。
  3. 取第一个文件,逐个处理每个盒子并将其写入输出文件,同时
    • 如果 mdat:从所有文件的所有 mdat 盒中写入原始数据,并将其存储为一个大盒(64位)
    • 如果 mvhdtkhdmdhd:将持续时间值修补为所有持续时间的总和
    • 如果 stbl:从零开始写入这些盒,使用描述中的合并列表
    • 如果 stco:重写为 co64 以适应超过 4 GB 的数据。
  4. 完成

许可证

根据您的选择,在 Apache License, Version 2.0MIT 许可证 下许可。
除非您明确声明,否则您有意提交并包含在此软件包中的任何贡献,根据 Apache-2.0 许可证定义,将如上所述双重许可,不附加任何额外条款或条件。

依赖项

~0.2–7MB
~41K SLoC