gyroflow / mp4-merge

A tool and library to losslessly join multiple .mp4 files shot with same camera and settings
Apache License 2.0
65 stars 5 forks source link

Time code stream in GoPro videos shouldn't be merged #1

Closed Leseratte10 closed 1 year ago

Leseratte10 commented 1 year ago

Is there an existing issue for this?

Have you tried the latest build?

Gyroflow version

v1.5.0 gh1144

What operating system are you using?

Ubuntu 20.04

What GPU are you using?

NVIDIA 2080 Ti

What happened?

I bought a GoPro Hero 11 some time last year, and I've been searching for a long time for a tool that can properly join GoPro's split files together without losing or corrupting the GoPro GPS and timecode metadata.

Someone recommended GyroFlow to me and it managed to do what I didn't get to work with hours of ffmpeg tests and scripting - just merge GoPro chapters together without losing data (thanks a lot for that, I'm definitely going to donate a bit of money just for that feature).

However there's one thing in the merging code that I'd consider to be a bug: My source GoPro video from the Hero 11 has four data streams - Video, Audio, the timecode (tmcd) and the GoPro GPS data (gpmd). Video and Audio is self-explanatory - just merge the streams and keep the metadata. The GPMD track is also simple - it's just binary data so it can just be appended.

That results in some of the GPMD values (like the camera model) being included twice, but that still conforms to the file format standard and shouldn't be an issue.

However, I noticed that the time code stream, which usually is a four-byte big endian value of frames since midnight, gets appended as well. So if I have a video consisting of two chapters, once the chapters are merged with this tool the resulting file has a time code stream with eight bytes instead of the usual four.

Since the video, audio and data streams are merged together to form one continuous video, there's no need to keep that secondary chapter's starting timecode in the final video's tmcd section data, is there? If anything it could confuse other tools working with the merged file since they just expect a 4-byte timecode and not multiple timecodes.

Is there any possibility of fixing this issue? The intended behaviour, in my opinion, should be to keep merging Video, Audio and GPMD streams as it currently happens, but when encountering a GoPro Timecode (data type "tmcd" or handler name "GoPro TCD", it should only use the data from the very first chapter in the final output file and ignore the timecode from the other chapters.

If the current behaviour is working as intended, can a setting / option be added to make it only store the first chapter's timecode instead?

I'm attaching a log output of importing two GoPro 11 chapters into Gyroflow v1.5.0-gh1144. I looked through all the existing issues and didn't find anything similar - probably because it's such an edge case and most people wouldn't even notice the duplicate time code data.

Relevant log output

$ ./Gyroflow-linux64.AppImage 
0.20.0 (git 9ce971c) - Multimedia Development Kit. Copyright (c) 2016-2023 WangBin(QtAV author) <wbsecg1 at gmail.com>
Build for: Linux x86_64; Clang16.0.0 (++20230315113205+8f3cb98d1fab-1~exp1~20230315113303.56)GCC4.2.1; libc++160000; 14:09:38 Mar 17 2023
10:07:18 [DEBUG] (1) gyroflow: [in main] Qt version: 6.4.3
10:07:18 [DEBUG] (1) gyroflow: Gyroflow 1.5.0 (gh1144)
mdk plugin 'mdk-braw': 0x563ca532e210 from dir: /tmp/.mount_Gyroflgo7vyY//lib/
mdk plugin 'mdk-r3d': 0x563ca532f480 from dir: /tmp/.mount_Gyroflgo7vyY//lib/
10:07:18 [DEBUG] (1) gyroflow_core::gpu::opencl: OpenCL devices: Ok("NVIDIA CUDA") Ok("OpenCL 3.0 CUDA 11.7.102") ["NVIDIA GeForce RTX 2080 Ti"]
10:07:18 [INFO] OpenCL Platform: NVIDIA CUDA, ext: Extensions { inner: "cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_fp64 cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_icd cl_khr_gl_sharing cl_nv_compiler_options cl_nv_device_attribute_query cl_nv_pragma_unroll cl_nv_copy_opts cl_nv_create_buffer cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_device_uuid cl_khr_pci_bus_info cl_khr_external_semaphore cl_khr_external_memory cl_khr_external_semaphore_opaque_fd cl_khr_external_memory_opaque_fd" } Device: NVIDIA Corporation NVIDIA GeForce RTX 2080 Ti
10:07:18 [DEBUG] (1) gyroflow::rendering::ffmpeg_hw: create AV_HWDEVICE_TYPE_CUDA
10:07:18 [DEBUG] (1) gyroflow::rendering::ffmpeg_hw: HWDevice::from_type AV_HWDEVICE_TYPE_CUDA, device: None
10:07:18 [DEBUG] (1) gyroflow::rendering::ffmpeg_hw: created ok AV_HWDEVICE_TYPE_CUDA
10:07:18 [DEBUG] (1) gyroflow::rendering: GPU type: Nvidia, from name: nvidia corporation nvidia geforce rtx 2080 ti
10:07:20 [INFO] GPU list: ["[OpenCL] NVIDIA CUDA NVIDIA GeForce RTX 2080 Ti: 3.0", "[wgpu] NVIDIA GeForce RTX 2080 Ti (Vulkan)", "[wgpu] llvmpipe (LLVM 12.0.0, 256 bits) (Vulkan)", "[wgpu] NVIDIA GeForce RTX 2080 Ti/PCIe/SSE2 (Gl)"]
10:07:20 [INFO] Latest version: v1.5.0, current version: 1.5.0 (gh1144)
10:07:21 [INFO] Lens profiles directory: "/tmp/.mount_Gyroflgo7vyY/camera_presets"
10:07:21 [INFO] Loaded 6390 lens profiles in 289.699ms
10:07:28 [DEBUG] (1) gyroflow::controller: Merging files: ["/tmp/gyroflowtest/GX010009.MP4", "/tmp/gyroflowtest/GX020009.MP4"]
10:07:28 [DEBUG] (2) mp4_merge: Reading mdat, offset: 28, size: 3848998735, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading ftyp, offset: 0, size: 20, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading free, offset: 20, size: 8, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading mdat, offset: 28, size: 3848998735, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading mvhd, offset: 3848998771, size: 108, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading udta, offset: 3848998879, size: 26389, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading iods, offset: 3849025268, size: 24, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading tkhd, offset: 3849025300, size: 92, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading tref, offset: 3849025392, size: 20, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading elst, offset: 3849025420, size: 28, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading mdhd, offset: 3849025456, size: 32, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading hdlr, offset: 3849025488, size: 44, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading vmhd, offset: 3849025540, size: 20, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading dinf, offset: 3849025560, size: 36, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsd, offset: 3849025604, size: 229, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stts, offset: 3849025833, size: 24, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsc, offset: 3849025857, size: 28, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsz, offset: 3849025885, size: 61460, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stco, offset: 3849087345, size: 61456, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stss, offset: 3849148801, size: 2064, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading tkhd, offset: 3849150873, size: 92, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading tref, offset: 3849150965, size: 20, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading mdhd, offset: 3849150993, size: 32, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading hdlr, offset: 3849151025, size: 44, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading smhd, offset: 3849151077, size: 16, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading dinf, offset: 3849151093, size: 36, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsd, offset: 3849151137, size: 102, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stts, offset: 3849151239, size: 24, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsc, offset: 3849151263, size: 28, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsz, offset: 3849151291, size: 96116, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stco, offset: 3849247407, size: 96112, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading tkhd, offset: 3849343527, size: 92, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading mdhd, offset: 3849343627, size: 32, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading hdlr, offset: 3849343659, size: 44, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading gmhd, offset: 3849343711, size: 82, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading dinf, offset: 3849343793, size: 36, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsd, offset: 3849343837, size: 50, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stts, offset: 3849343887, size: 24, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsc, offset: 3849343911, size: 28, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsz, offset: 3849343939, size: 24, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stco, offset: 3849343963, size: 20, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading tkhd, offset: 3849343991, size: 92, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading mdhd, offset: 3849344091, size: 32, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading hdlr, offset: 3849344123, size: 44, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading gmhd, offset: 3849344175, size: 44, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading dinf, offset: 3849344219, size: 36, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsd, offset: 3849344263, size: 36, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stts, offset: 3849344299, size: 24, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsc, offset: 3849344323, size: 28, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsz, offset: 3849344351, size: 2068, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stco, offset: 3849346419, size: 2064, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge: Reading mdat, offset: 28, size: 1947947037, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading ftyp, offset: 0, size: 20, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading free, offset: 20, size: 8, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading mdat, offset: 28, size: 1947947037, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading mvhd, offset: 1947947073, size: 108, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading udta, offset: 1947947181, size: 26389, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading iods, offset: 1947973570, size: 24, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading tkhd, offset: 1947973602, size: 92, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading tref, offset: 1947973694, size: 20, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading elst, offset: 1947973722, size: 28, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading mdhd, offset: 1947973758, size: 32, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading hdlr, offset: 1947973790, size: 44, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading vmhd, offset: 1947973842, size: 20, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading dinf, offset: 1947973862, size: 36, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsd, offset: 1947973906, size: 229, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stts, offset: 1947974135, size: 24, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsc, offset: 1947974159, size: 28, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsz, offset: 1947974187, size: 31120, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stco, offset: 1948005307, size: 31116, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stss, offset: 1948036423, size: 1056, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading tkhd, offset: 1948037487, size: 92, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading tref, offset: 1948037579, size: 20, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading mdhd, offset: 1948037607, size: 32, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading hdlr, offset: 1948037639, size: 44, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading smhd, offset: 1948037691, size: 16, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading dinf, offset: 1948037707, size: 36, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsd, offset: 1948037751, size: 102, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stts, offset: 1948037853, size: 24, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsc, offset: 1948037877, size: 28, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsz, offset: 1948037905, size: 48660, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stco, offset: 1948086565, size: 48656, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading tkhd, offset: 1948135229, size: 92, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading mdhd, offset: 1948135329, size: 32, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading hdlr, offset: 1948135361, size: 44, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading gmhd, offset: 1948135413, size: 82, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading dinf, offset: 1948135495, size: 36, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsd, offset: 1948135539, size: 50, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stts, offset: 1948135589, size: 24, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsc, offset: 1948135613, size: 28, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsz, offset: 1948135641, size: 24, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stco, offset: 1948135665, size: 20, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading tkhd, offset: 1948135693, size: 92, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading mdhd, offset: 1948135793, size: 32, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading hdlr, offset: 1948135825, size: 44, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading gmhd, offset: 1948135877, size: 44, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading dinf, offset: 1948135921, size: 36, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsd, offset: 1948135965, size: 36, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stts, offset: 1948136001, size: 32, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsc, offset: 1948136033, size: 28, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stsz, offset: 1948136061, size: 1060, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::desc_reader: Reading stco, offset: 1948137121, size: 1056, header_size: 8
10:07:28 [DEBUG] (2) mp4_merge::writer: Writing original ftyp, offset: 0, size: 20
10:07:28 [DEBUG] (2) mp4_merge::writer: Writing original free, offset: 20, size: 8
10:07:28 [DEBUG] (2) mp4_merge::writer: Merging mdat's, offset: 28, size: 3848998735
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing mvhd with patched duration, offset: 3848998771, size: 108
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing original udta, offset: 3848998879, size: 26389
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing original iods, offset: 3849025268, size: 24
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing tkhd with patched duration, offset: 3849025300, size: 92
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing original tref, offset: 3849025392, size: 20
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing elst with patched duration, offset: 3849025420, size: 28
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing mdhd with patched duration, offset: 3849025456, size: 32
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing original hdlr, offset: 3849025488, size: 44
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing original vmhd, offset: 3849025540, size: 20
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing original dinf, offset: 3849025560, size: 36
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing original stsd, offset: 3849025604, size: 229
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing new stts, offset: 3849025833, size: 24
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing new stsc, offset: 3849025857, size: 28
10:09:03 [DEBUG] (2) mp4_merge::writer: Writing new stsz, offset: 3849025885, size: 61460
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stco, offset: 3849087345, size: 61456
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stss, offset: 3849148801, size: 2064
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 125269 to 281061
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 125333 to 281125
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 125417 to 281209
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 125573 to 281365
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing tkhd with patched duration, offset: 3849150873, size: 92
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing original tref, offset: 3849150965, size: 20
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing mdhd with patched duration, offset: 3849150993, size: 32
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing original hdlr, offset: 3849151025, size: 44
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing original smhd, offset: 3849151077, size: 16
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing original dinf, offset: 3849151093, size: 36
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing original stsd, offset: 3849151137, size: 102
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stts, offset: 3849151239, size: 24
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stsc, offset: 3849151263, size: 28
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stsz, offset: 3849151291, size: 96116
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stco, offset: 3849247407, size: 96112
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 192390 to 434418
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 192450 to 434478
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 192534 to 434562
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 192654 to 434682
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing tkhd with patched duration, offset: 3849343527, size: 92
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing mdhd with patched duration, offset: 3849343627, size: 32
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing original hdlr, offset: 3849343659, size: 44
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing original gmhd, offset: 3849343711, size: 82
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing original dinf, offset: 3849343793, size: 36
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing original stsd, offset: 3849343837, size: 50
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stts, offset: 3849343887, size: 24
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stsc, offset: 3849343911, size: 28
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stsz, offset: 3849343939, size: 24
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stco, offset: 3849343963, size: 20
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 154 to 190
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 280 to 316
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 364 to 400
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 464 to 500
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing tkhd with patched duration, offset: 3849343991, size: 92
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing mdhd with patched duration, offset: 3849344091, size: 32
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing original hdlr, offset: 3849344123, size: 44
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing original gmhd, offset: 3849344175, size: 44
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing original dinf, offset: 3849344219, size: 36
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing original stsd, offset: 3849344263, size: 36
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stts, offset: 3849344299, size: 24
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stsc, offset: 3849344323, size: 28
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stsz, offset: 3849344351, size: 2068
10:09:04 [DEBUG] (2) mp4_merge::writer: Writing new stco, offset: 3849346419, size: 2064
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 4228 to 9416
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 4316 to 9504
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 4400 to 9588
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 4500 to 9688
10:09:04 [DEBUG] (2) mp4_merge::writer: Patching size from 349720 to 752764
10:09:05 [DEBUG] (1) MDKPlayer: [in setUrl] Final path: "/tmp/gyroflowtest/GX010009_joined.MP4"
Leseratte10 commented 1 year ago

Hm, just noticed that this bug report is probably better suited for https://github.com/gyroflow/mp4-merge ...

EDIT: Thanks for moving it over.

AdrianEddy commented 1 year ago

Should be fixed in d2439551c2f8cca6e66a524f3847fa9758480139 Gyroflow with this change is building here https://github.com/gyroflow/gyroflow/actions/runs/4511096423

Leseratte10 commented 1 year ago

Thanks, I'll test that as soon as it's built.

AdrianEddy commented 1 year ago

It's available now https://gyroflow.xyz/devbuild/

Leseratte10 commented 1 year ago

Yeah, I've already downloaded it and I'm testing right now.

Leseratte10 commented 1 year ago

Thanks a lot, it's working and it's now merging GoPro files perfectly. Thanks for the quick fix, I've sent you a couple coffees over at buymeacoffee.