#gopro #assembly #ffmpeg #file-path #chaptered

nightly app gopro-chaptered-video-assembler

将目录中所有分章节的GoPro视频文件组装成'完整'文件

5个版本 (3个重大更新)

0.5.2 2024年2月15日
0.5.0 2023年3月29日
0.3.0 2023年3月26日
0.2.0 2023年3月26日
0.1.0 2023年3月26日

#124 in 视频

每月23次下载

自定义许可证

28KB
463

GoPro分章节视频组装器

为什么存在这个工具?

当你在GoPro上录制长视频时,视频会被分成约~4GB的块。在文件命名约定规范中,GoPro将这些称为分章节视频文件。

一般格式是

GXYYZZZZ.mp4, where:
 X       is the encoding type (X for HEVC, H for AVC .... yes... I know)
  YY     is the chapter number
    ZZZZ is the video number

这里是一个单个GoPro视频(约~10分钟长)分割成三个章节的目录结构示例。

gopro-chaptered-video-example/
├── GX010119.MP4 [Video 1, chapter 1]
├── GX020119.MP4 [Video 1, chapter 2]
└── GX030119.MP4 [Video 1, chapter 3]

这是一个包含多个分章节视频的目录结构示例。

gopro-multiple-chaptered-videos-example/
├── GH017455.MP4 [Video 1, chapter 1]
├── GH017456.MP4 [Video 2, chapter 1]
├── GH017457.MP4 [Video 3, chapter 1]
├── GH027455.MP4 [Video 1, chapter 2]
├── GH027456.MP4 [Video 2, chapter 2]
└── GH037455.MP4 [Video 3, chapter 2]

文件名并不那么友好。在我编辑视频之前,我通常会手动在Adobe Premiere ProKdenlive中重新组装“长格式”视频。这个工具为我节省了大量时间。

如何实现?

此工具使用mp4-merge合并多章节视频,并重命名单个章节视频以便更容易解析。您可以使用--no-single-chapter-rename禁用单个章节重命名行为。如果执行了多章节合并操作,将在末尾打印一系列命令以清理原始源目录。这些命令是破坏性的,因此需要手动运行。

所有输出文件都将具有以下形式:GoPro_{video_number}.MP4

安装

此包可在crates.io上找到。

$ cargo install gopro-chaptered-video-assembler

构建和安装源代码

$ git clone https://github.com/alichtman/gopro-chaptered-video-assembler
$ cd gopro-chaptered-video-assembler
$ cargo build
$ cargo run -- [ARGUMENTS]
$ cargo install --path .

在VSCode中进行调试效果良好。

示例用法

$ gopro-chaptered-video-assembler --input "/media/alichtman/Extreme SSD/Rock-Climbing/Gunks/High Exposure/" --output output
╔═══════════════════════════════════════╗
 gopro-chaptered-video-assembler 0.5.1 ║
╚═══════════════════════════════════════╝
01:49:33 [INFO] Found 39 files in directory: /media/alichtman/Extreme SSD/Rock-Climbing/Gunks/High Exposure
01:49:33 [INFO] Found 5 video(s) with 11 total chapters to combine
01:49:33 [INFO] {
    7515: [
        GoProChapteredVideoFile {
            abs_path: "/media/alichtman/Extreme SSD/Rock-Climbing/Gunks/High Exposure/GH017515.MP4",
            video_number: 7515,
            chapter: 1,
        },
        GoProChapteredVideoFile {
            abs_path: "/media/alichtman/Extreme SSD/Rock-Climbing/Gunks/High Exposure/GH027515.MP4",
            video_number: 7515,
            chapter: 2,
        },
    ],
    7517: [
        GoProChapteredVideoFile {
            abs_path: "/media/alichtman/Extreme SSD/Rock-Climbing/Gunks/High Exposure/GH017517.MP4",
            video_number: 7517,
            chapter: 1,
        },
        GoProChapteredVideoFile {
            abs_path: "/media/alichtman/Extreme SSD/Rock-Climbing/Gunks/High Exposure/GH027517.MP4",
            video_number: 7517,
            chapter: 2,
        },
    ],
    7511: [
        GoProChapteredVideoFile {
            abs_path: "/media/alichtman/Extreme SSD/Rock-Climbing/Gunks/High Exposure/GH017511.MP4",
            video_number: 7511,
            chapter: 1,
        },
        GoProChapteredVideoFile {
            abs_path: "/media/alichtman/Extreme SSD/Rock-Climbing/Gunks/High Exposure/GH027511.MP4",
            video_number: 7511,
            chapter: 2,
        },
        GoProChapteredVideoFile {
            abs_path: "/media/alichtman/Extreme SSD/Rock-Climbing/Gunks/High Exposure/GH037511.MP4",
            video_number: 7511,
            chapter: 3,
        },
    ],
    7477: [
        GoProChapteredVideoFile {
            abs_path: "/media/alichtman/Extreme SSD/Rock-Climbing/Gunks/High Exposure/GH017477.MP4",
            video_number: 7477,
            chapter: 1,
        },
        GoProChapteredVideoFile {
            abs_path: "/media/alichtman/Extreme SSD/Rock-Climbing/Gunks/High Exposure/GH027477.MP4",
            video_number: 7477,
            chapter: 2,
        },
    ],
    7485: [
        GoProChapteredVideoFile {
            abs_path: "/media/alichtman/Extreme SSD/Rock-Climbing/Gunks/High Exposure/GH017485.MP4",
            video_number: 7485,
            chapter: 1,
        },
        GoProChapteredVideoFile {
            abs_path: "/media/alichtman/Extreme SSD/Rock-Climbing/Gunks/High Exposure/GH027485.MP4",
            video_number: 7485,
            chapter: 2,
        },
    ],
}
01:49:33 [INFO] And 27 single chapter video(s) to rename
Proceed? (y/n)
...

输出目录将在当前目录中创建,所有输出文件都将在那里找到。

此外,还支持带有撇号的路径(以及理论上其他特殊字符)

$ gopro-chaptered-video-assembler -i "tests/working_test_data/Test\'s Apostrophe"  -o tests/output
...

支持哪些GoPro型号?

  • HERO11 Black / Black Mini
  • HERO10 Black
  • HERO9 Black
  • HERO8 Black
  • HERO7 White / Silver / Black
  • HERO6 Black

依赖项

~4–13MB
~149K SLoC