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 视频
659 每月下载量
用于 gopro-chaptered-video-ass…
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
盒子(它是原始数据的描述符),以考虑额外的数据。为了做到这一点,这个库执行以下操作
- 扫描每个提供的文件并收集
mdat
偏移量和大小- 存储在
mvhd
、tkhd
、mdhd
盒子中的持续时间 stbl
描述:stts
、stsz
、stss
、stsc
、stco/
co64
- 合并所有这些描述:求和持续时间,将
stbl
列表逐个添加到另一个并添加基于上一个文件mdat
大小的块偏移量。 - 取第一个文件,逐个处理每个盒子并将其写入输出文件,同时
- 如果
mdat
:从所有文件的所有mdat
盒中写入原始数据,并将其存储为一个大盒(64位) - 如果
mvhd
、tkhd
或mdhd
:将持续时间值修补为所有持续时间的总和 - 如果
stbl
:从零开始写入这些盒,使用描述中的合并列表 - 如果
stco
:重写为co64
以适应超过 4 GB 的数据。
- 如果
- 完成
许可证
根据您的选择,在 Apache License, Version 2.0 或 MIT 许可证 下许可。除非您明确声明,否则您有意提交并包含在此软件包中的任何贡献,根据 Apache-2.0 许可证定义,将如上所述双重许可,不附加任何额外条款或条件。
依赖项
~0.2–7MB
~41K SLoC