fxstein / GoProX

The missing GoPro data and workflow manager for macOS
MIT License
23 stars 3 forks source link

Misc: Create FreeBSD Port #59

Open jmkeyes opened 8 months ago

jmkeyes commented 8 months ago

I wanted to run this within a FreeBSD jail to reorganize a bunch of media already on a TrueNAS appliance.

Since macOS and *BSD share some heritage this was actually much easier than I thought it would be.

# $FreeBSD$

PORTNAME=   goprox
DISTVERSION=    00.52.00
CATEGORIES= multimedia

DISTVERSIONPREFIX=  v

MAINTAINER= joshua.michael.keyes@gmail.com
COMMENT=    Missing GoPro workflow manager for zsh
WWW=        https://github.com/fxstein/GoProX

LICENSE=    MIT

RUN_DEPENDS=    exiftool:graphics/p5-Image-ExifTool \
        jq:textproc/jq \
        zsh:shells/zsh

USES=       shebangfix

USE_GITHUB= yes
GH_ACCOUNT= fxstein
GH_PROJECT= GoProX

SHEBANG_LANG=   zsh
SHEBANG_FILES=  goprox

zsh_OLD_CMD=    "/usr/bin/env zsh" /bin/zsh /usr/bin/zsh
zsh_CMD=    ${LOCALBASE}/bin/zsh

NO_BUILD=   yes
DOCS=       README.md LICENSE

do-install:
    ${MKDIR} ${STAGEDIR}${DATADIR}
    ${INSTALL_SCRIPT} ${WRKSRC}/goprox ${STAGEDIR}${DATADIR}/goprox
    ${LN} -fs ${DATADIR}/goprox ${STAGEDIR}${PREFIX}/bin/goprox
    ${INSTALL_MAN} ${WRKSRC}/man/goprox.1 ${STAGEDIR}${PREFIX}/man/man1/
    # NOTE: Firmware isn't included to keep the package size low.
    #${MKDIR} ${STAGEDIR}${DATADIR}/firmware
    #(cd ${WRKSRC}/firmware && ${COPYTREE_SHARE} . ${STAGEDIR}${DATADIR}/firmware)
    #${MKDIR} ${STAGEDIR}${DATADIR}/firmware.labs
    #(cd ${WRKSRC}/firmware.labs && ${COPYTREE_SHARE} . ${STAGEDIR}${DATADIR}/firmware.labs)

.include <bsd.port.mk>

I have some remaining questions:

jmkeyes commented 8 months ago

For my tests so far, I set up a FreeBSD jail with two mount points -- the library (/mnt/library) and an import folder (/mnt/import).

The initial setup step seems to work correctly. I ran goprox --setup --library "/mnt/library/" --source /mnt/import/ and it created a ~/.goprox configuration file like this:

source=/mnt/import/
library="/mnt/library/"
copyright=""
geonamesacct=""
mountoptions=(--archive --import --clean --firmware)

I notice that both the source and library paths have trailing slashes and the library path preserved the double-quotes.


When I ran the import step (goprox --import) it ran without any visible error, but I did have to stop the import process a few times with ^C (SIGINT). Exiting the script this way may have had some unexpected consequences: the media being imported at the time of the ^C appears to have been corrupted somehow (more details below) and subsequent imports did not detect this nor display any errors.


When I ran the processing step (goprox --process) a number of errors appeared:

GoProX started... 
Starting media processing... 
_process_media:28: no matches found: /mnt/library//processed/**/*(.om[1])
First pass: 1/4 - All files but mp4 and 360 
========  [1/3]
Error: No file specified - 
========  [2/3]
Error: No file specified - 
========  [3/3]
Error: No file specified - 
Warning: First pass: exiftool reported one or more errors. Please check output. 
Second pass: 2/4 - Only mp4 files 
Error: File not found - 
Error: File not found - 
Error: File not found - 
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010426.MP4 [1/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010426.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010426.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030437.MP4 [2/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030437.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030437.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030438.MP4 [3/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030438.MP4' --> '/mnt/library//processed/NODATE/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030438.mp4'
Error: Truncated mdat atom - /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030438.MP4
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020438.MP4 [4/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020438.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020438.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020437.MP4 [5/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020437.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020437.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020439.MP4 [6/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020439.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020439.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040438.MP4 [7/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040438.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040438.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010439.MP4 [8/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010439.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010439.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010437.MP4 [9/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010437.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010437.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010438.MP4 [10/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010438.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010438.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020440.MP4 [11/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020440.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020440.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060440.MP4 [12/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060440.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060440.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010441.MP4 [13/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010441.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010441.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030440.MP4 [14/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030440.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030440.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX070440.MP4 [15/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX070440.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX070440.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010440.MP4 [16/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010440.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010440.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050440.MP4 [17/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050440.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050440.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040440.MP4 [18/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040440.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040440.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020409.MP4 [19/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020409.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020409.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030409.MP4 [20/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030409.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030409.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010409.MP4 [21/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010409.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010409.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020434.MP4 [22/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020434.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020434.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020435.MP4 [23/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020435.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020435.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010431.MP4 [24/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010431.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010431.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010433.MP4 [25/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010433.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010433.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030434.MP4 [26/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030434.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030434.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010434.MP4 [27/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010434.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010434.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010435.MP4 [28/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010435.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010435.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040434.MP4 [29/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040434.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040434.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010432.MP4 [30/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010432.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010432.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020431.MP4 [31/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020431.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020431.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010420.MP4 [32/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010420.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010420.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020420.MP4 [33/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020420.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020420.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040415.MP4 [34/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040415.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040415.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050415.MP4 [35/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050415.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050415.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010415.MP4 [36/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010415.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010415.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030415.MP4 [37/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030415.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030415.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060415.MP4 [38/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060415.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060415.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020415.MP4 [39/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020415.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020415.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010428.MP4 [40/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010428.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010428.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010429.MP4 [41/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010429.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010429.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010416.MP4 [42/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010416.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010416.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010417.MP4 [43/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010417.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010417.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010418.MP4 [44/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010418.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010418.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010419.MP4 [45/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010419.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010419.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040411.MP4 [46/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040411.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040411.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010410.MP4 [47/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010410.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010410.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010411.MP4 [48/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010411.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010411.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020410.MP4 [49/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020410.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020410.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030411.MP4 [50/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030411.MP4' --> '/mnt/library//processed/NODATE/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030411.mp4'
Error: Truncated mdat atom - /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030411.MP4
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020411.MP4 [51/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020411.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020411.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010430.MP4 [52/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010430.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010430.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050430.MP4 [53/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050430.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050430.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040430.MP4 [54/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040430.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040430.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX080430.MP4 [55/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX080430.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX080430.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020430.MP4 [56/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020430.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020430.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060430.MP4 [57/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060430.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060430.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030430.MP4 [58/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030430.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030430.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX070430.MP4 [59/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX070430.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX070430.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010412.MP4 [60/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010412.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010412.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010414.MP4 [61/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010414.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010414.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010413.MP4 [62/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010413.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010413.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020412.MP4 [63/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020412.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020412.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020424.MP4 [64/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020424.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020424.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060424.MP4 [65/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060424.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060424.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030424.MP4 [66/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030424.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030424.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX070424.MP4 [67/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX070424.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX070424.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010424.MP4 [68/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010424.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010424.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050424.MP4 [69/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050424.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050424.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040424.MP4 [70/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040424.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040424.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010425.MP4 [71/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010425.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010425.mp4'
======== /mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020425.MP4 [72/72]
'/mnt/library//imported/YYYY/YYYYMMDD/YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020425.MP4' --> '/mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020425.mp4'
Warning: Second pass: exiftool reported one or more errors. Please check output. 
Third pass: 3/4 - Only 360 files 
Error: File not found - 
Error: File not found - 
Error: File not found - 
Warning: Third pass: exiftool reported one or more errors. Please check output. 
Forth pass: 4/4 - Only mp4 & 360 files - timeshift QuickTime to UTC
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010413.mp4 [1/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020412.mp4 [2/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010412.mp4 [3/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010414.mp4 [4/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040430.mp4 [5/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX080430.mp4 [6/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010430.mp4 [7/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050430.mp4 [8/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030430.mp4 [9/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX070430.mp4 [10/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020430.mp4 [11/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060430.mp4 [12/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020425.mp4 [13/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010425.mp4 [14/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010424.mp4 [15/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050424.mp4 [16/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040424.mp4 [17/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020424.mp4 [18/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060424.mp4 [19/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030424.mp4 [20/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX070424.mp4 [21/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020410.mp4 [22/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020411.mp4 [23/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010410.mp4 [24/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040411.mp4 [25/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010411.mp4 [26/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030409.mp4 [27/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020409.mp4 [28/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010409.mp4 [29/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010426.mp4 [30/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030437.mp4 [31/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020437.mp4 [32/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020439.mp4 [33/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020438.mp4 [34/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040438.mp4 [35/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010438.mp4 [36/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010439.mp4 [37/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010437.mp4 [38/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX070440.mp4 [39/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030440.mp4 [40/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010441.mp4 [41/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060440.mp4 [42/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020440.mp4 [43/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040440.mp4 [44/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050440.mp4 [45/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010440.mp4 [46/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010417.mp4 [47/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010416.mp4 [48/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010418.mp4 [49/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010419.mp4 [50/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010428.mp4 [51/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010429.mp4 [52/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010420.mp4 [53/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020420.mp4 [54/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020415.mp4 [55/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX060415.mp4 [56/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030415.mp4 [57/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010415.mp4 [58/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX050415.mp4 [59/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040415.mp4 [60/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010433.mp4 [61/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010431.mp4 [62/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX030434.mp4 [63/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020435.mp4 [64/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020434.mp4 [65/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX040434.mp4 [66/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX020431.mp4 [67/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010432.mp4 [68/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010435.mp4 [69/70]
======== /mnt/library//processed/MP4/YYYY/YYYYMMDD/P_YYYYMMDDHHMMSS_GoPro_Hero9_XXXX_GX010434.mp4 [70/70]
Finished media processing 
Warning: exiftool reported one or more errors during this goprox run. Please check output. 
GoProX processing finished. 

The Error: Truncated mdat atom - [path] corresponds with the files being imported when I issued a ^C to cancel the import process earlier.

I still have the original media available, so I'll try to import those again and see if the error persists.


Importing fresh copies of the original media fixed the problem; this means that exiting abruptly from the import process will truncate/corrupt the imported media. If someone was to miss the Truncated mdat atom error message, they'd be importing corrupt media into their library.

fxstein commented 8 months ago

Very much appreciate your work and testing!

I have not had a chance to look at the issues you mentioned. If you identify anything that requires a fix or change, please do submit a PR. Would be great to add FreeBSD to the list of supported platforms.

As for the repo size: Yeah I agree that is an issue. For the packages and homebrew builds I therefor remove any outdated firmware. The reason they are included here is because GoPro has really no stable links for them. They move around and disappear from time to time.

The abort corrupted files are most likely due to exiftool being aborted while writing a file. Not sure yet how we could prevent or detect automatically.