Skip to content
Workflow

Turn raw travel clips into a vlog with AI scene detection

PySceneDetect finds shot changes and exports thumbnails, scene lists and editor timelines [8]; you set the order and FFmpeg's concat demuxer joins the clips [9]. An agent can draft the edit with ai-video-editing-skill, but it sends frames from your clips to a cloud vision API [3]. Check GoPro files for GPS first: it sits in a separate data track inside the MP4 [10].

Not yet tested by VloggingPro
Who it's for
Travel vloggers with a folder of GoPro or phone clips who want a rough cut and shot list without logging every clip by hand.
You need
Raw GoPro or phone clips; PySceneDetect (pip, Windows installer or Docker image) and FFmpeg [1]; ExifTool for the GPS check [2]; for the agent route, a coding agent and a vision API key [3].
Skill
Some setup
Cost
Free: PySceneDetect (BSD 3-Clause) [4], FFmpeg (LGPL 2.1 or later; GPL with optional parts) [5], ai-video-editing-skill (MIT) [6]. Agent route: the skill's README listed GLM-4.6V-Flash as free and GPT-4o and Qwen-VL as paid, as seen on 2 Nov 2026 [3]; Claude Code needs a paid Claude plan or Console account [7].

Tools in this workflow

ToolRole in this workflowCostRuns
PySceneDetectFinds shot changes, lists them as CSV with thumbnails, splits clips and exports EDL, Final Cut XML or OTIO timelines [8].Free codeOn your computer
FFmpeg / ffprobeLeaves out the GPS data stream on copies and joins clips in your chosen order [14][9].Free codeOn your computer
AI video editing skill (znyupup)Optional agent instructions (SKILL.md) that analyse clips, plan an edit, show it in a browser dashboard for approval and render final.mp4 [3].Free codeOn your computer, Cloud
whisper.cppTranscribes speech in the finished edit for chapter notes [17].Free codeOn your computer

The result

Your edit, joined in your order [9], plus a CSV scene list and thumbnails for every clip as a shot list [8].

Optional: EDL, Final Cut XML or OTIO timelines for your editor [8], GoPro copies without the GPS data stream [14], and a timed transcript for chapter notes [17].

Before you start

  • Install PySceneDetect with pip; splitting needs FFmpeg or mkvmerge [1]. Windows installers and a Docker image with all dependencies also exist [1].
  • ExifTool reads GoPro GPS with -ee (extract embedded) [13].
  • Every clip in one concat join needs the same streams (same codecs, same time base) [18]. Check before mixing GoPro and phone clips.

Steps

  1. Copy the footage into a project folder

    Copy every clip from the card into one project folder and edit only the copies.

    GoPro Quik uses the GPS data for Performance Stickers and auto-edits [11], so keep it in the originals.

  2. Check GoPro and phone clips for GPS location

    GoPro stores sensor data in GPMF, a separate MP4 track beside video and audio [10]. Files with telemetry have at least four tracks: video, audio, timecode and GPMF [12].

    GoPro lists GPS on HERO5 Black to HERO11 Black, HERO13 Black, MAX, MAX2, Fusion and MISSION 1, not HERO12 Black [11]. It records only after a satellite lock [11].

    This ExifTool command finds GPS in many formats, MP4 included [2]. Run it on phone clips too. ExifTool lists GoPro GPS tags as not writable [13].

    Copied from the documentation · source [2]
    exiftool -a "-gps*" -ee video.mp4
  3. Leave the GPS track out of the copies you publish (optional, untested)

    FFmpeg includes data streams only when you map them [14]. -dn drops data, a negative -map_metadata index skips metadata, and copy avoids re-encoding [14].

    The first command uses these to keep only video and audio. Confirm with the ExifTool check that no GPS remains.

    Assembled from documented options, not printed in the docs · source [14]
    ffmpeg -i in.MP4 -map 0:v -map 0:a -dn -map_metadata -1 -c copy clean.mp4
    Assembled from documented options, not printed in the docs · source [2]
    exiftool -a "-gps*" -ee clean.mp4
  4. Find the shots with PySceneDetect

    PySceneDetect detects cuts and transitions; the latest release is v0.7.2, 11 October 2026 [8][1].

    detect-adaptive is a two-pass detector that helps avoid false cuts from camera movement. detect-content finds fast cuts; detect-threshold finds fades [8].

    list-scenes writes a CSV, save-images saves the start, middle and end frames of each scene, and split-video cuts one clip per scene with FFmpeg. --copy is faster but not frame accurate [8].

    For your editor: save-edl writes a CMX 3600 EDL, save-fcp Final Cut Pro XML (FCPX or FCP7) and save-otio an OpenTimelineIO timeline, which many editors import. Combine commands in one run, each once [8].

    Copied from the documentation · source [1]
    pip install scenedetect --upgrade
    Copied from the documentation · source [8]
    scenedetect -i video.mp4 detect-adaptive
    Copied from the documentation · source [8]
    scenedetect -i video.mp4 list-scenes save-images
    Copied from the documentation · source [8]
    scenedetect -i video.mp4 split-video
    Assembled from documented options, not printed in the docs · source [8]
    scenedetect -i video.mp4 detect-adaptive list-scenes save-images save-edl save-fcp save-otio
  5. Choose the story order yourself

    Use the frames and CSVs as a contact sheet [8]. Choose the opening, the order of places and the ending, and list the clip file names in that order.

    The detectors compare colour, brightness, image hashes or histograms [8]. They find where shots change, not which ones matter.

    You approve:Approve the story order: clips in, clips out, and the sequence.
  6. Join the clips with FFmpeg

    The concat demuxer reads a text file of clips and plays them back to back as one file [9].

    Write one file line per clip in story order. Lines starting with # are ignored, and relative paths need no -safe 0 [9].

    The FFmpeg wiki's printf line (macOS, Linux) and for loop (Windows) list every matching file in a folder [9]. Reorder the list before joining.

    Mismatched clips need the concat filter, which re-encodes and cannot be used with -c copy [9].

    Assembled from documented options, not printed in the docs · source [9]
    # opening
    file 'clip-07.mp4'
    file 'clip-02.mp4'
    file 'clip-15.mp4'
    Assembled from documented options, not printed in the docs · macOS, Linux · source [9]
    printf "file '%s'\n" *.mp4 > mylist.txt
    Assembled from documented options, not printed in the docs · Windows · source [9]
    (for %i in (*.mp4) do @echo file '%i') > mylist.txt
    Assembled from documented options, not printed in the docs · source [9]
    ffmpeg -f concat -i mylist.txt -c copy travel-vlog.mp4
  7. Optional agent route: ai-video-editing-skill

    ai-video-editing-skill is a SKILL.md instruction file for agents such as Claude Code and OpenClaw, not a program [3]. Its README is in Chinese and aimed at phone-shot travel vlogs [3].

    Stages: analyse each clip (Whisper transcription, frames sent to a vision API, loudness), plan three acts, show a browser dashboard for you to check, then render final.mp4 (H.264, 1080p, 30 fps) with titles and music [3].

    It needs FFmpeg, Python 3.9 or later, openai-whisper, Pillow and an API key for GLM-4.6V-Flash, GPT-4o, Qwen-VL or any model using the OpenAI Chat Completions format [3].

    The README warns that Whisper invents text over ambient sound (the skill filters it by loudness) and that automatic music needs a separate music API [3].

    MIT-licensed [6]. 13 commits, the last on 27 April 2026 [15].

    Assembled from documented options, not printed in the docs · source [3]
    git clone https://github.com/znyupup/ai-video-editing-skill.git
    You approve:Check the plan in the dashboard and approve or change it before it renders [3].
  8. Transcribe speech for chapter notes

    Convert the edit's audio to 16-bit WAV [16], then run whisper.cpp with -osrt for timed subtitles or -otxt for plain text [17].

    Draft chapter markers from the SRT timings with the YouTube chapters tool.

    Assembled from documented options, not printed in the docs · source [16]
    ffmpeg -i travel-vlog.mp4 -ar 16000 -ac 1 -c:a pcm_s16le travel-vlog.wav
    Assembled from documented options, not printed in the docs · source [17]
    whisper-cli -m models/ggml-base.en.bin -f travel-vlog.wav -l en -osrt -otxt -of travel-vlog
  9. Approve people and places before publishing

    Watch the whole edit for faces of people who have not agreed to appear, number plates, house numbers, accommodation names and any map or GPS overlay that shows where you stay.

    Blur, cut or get a release for each one.

    You approve:Approve the final order and every identifiable person and place before publishing.

If you don't want to code

  • Import PySceneDetect's EDL, Final Cut XML or OTIO file into your editor and arrange the shots there instead of joining them with FFmpeg [8].
  • On Windows, install PySceneDetect from the MSI installer or portable ZIP instead of pip [1].

Common failures

  • False cuts on handheld or action footage: use detect-adaptive, or a longer --min-scene-len [8].
  • Fades missed: use detect-threshold [8].
  • Split clips a few frames off: drop --copy to re-encode [8].
  • Concat fails or glitches: the clips' codecs or time base differ [18]. Use the concat filter [9].
  • Concat rejects a file name: by default, paths must be relative and use only letters, digits, period, underscore and hyphen [18]. Rename the files or add -safe 0 [9].
  • Audio timestamps break after concat with copied audio: the skill's author hit this and joined audio with the concat filter instead [15].
  • Text over ambient sound in the transcript: in whisper.cpp use -l, -sns, -nf and --vad [17].

Privacy, rights and permissions

  • GoPro GPS sits in each MP4's GPMF track [10]. Check copies with ExifTool before sharing [2].
  • The agent route sends frames to a cloud vision API [3]. Use it only on footage you may share with that provider.
  • Claude Code edits files and runs commands [19]. Start it in a folder holding only this project's copies.
  • Music, whether you or an agent adds it, needs a licence that covers your platform.

What we will measure

  • Narrative continuity: a human 1 to 5 score with notes on chronology, pacing and meaning, on 12 travel shots in a fixed storyboard.
  • False cuts: scene changes PySceneDetect marks that are not real shot changes.
  • Manual corrections and editor minutes from first draft to accepted export.
  • Time per publishable minute, human and machine time reported separately.
  • Outbound connections per step, showing which steps leave the machine.

Sources

  1. raw.githubusercontent.com/Breakthrough/PySceneDetect/main/README.md fetched 2 Nov 2026
  2. ExifTool FAQ fetched 2 Nov 2026
  3. raw.githubusercontent.com/znyupup/ai-video-editing-skill/main/README.md fetched 2 Nov 2026
  4. raw.githubusercontent.com/Breakthrough/PySceneDetect/main/LICENSE fetched 2 Nov 2026
  5. FFmpeg License and Legal Considerations fetched 2 Nov 2026
  6. raw.githubusercontent.com/znyupup/ai-video-editing-skill/main/LICENSE fetched 2 Nov 2026
  7. Advanced setup - Claude Code Docs fetched 2 Nov 2026
  8. scenedetect 🎬 Command: PySceneDetect 0.7.1 documentation fetched 2 Nov 2026
  9. Concatenate – FFmpeg fetched 2 Nov 2026
  10. GoPro Open Sources Video Metadata | GoPro fetched 2 Nov 2026
  11. How To Turn On GPS With GoPro Cameras fetched 2 Nov 2026
  12. raw.githubusercontent.com/gopro/gpmf-parser/main/README.md fetched 2 Nov 2026
  13. GoPro Tags fetched 2 Nov 2026
  14. ffmpeg Documentation fetched 2 Nov 2026
  15. GitHub - znyupup/ai-video-editing-skill: AI Agent Skill for automated vlog editing. Feed raw footage, get a finished video. Powered by ffmpeg + Whisper + Vision API. · GitHub fetched 2 Nov 2026
  16. raw.githubusercontent.com/ggml-org/whisper.cpp/master/README.md fetched 2 Nov 2026
  17. raw.githubusercontent.com/ggml-org/whisper.cpp/master/examples/cli/README.md fetched 2 Nov 2026
  18. FFmpeg Formats Documentation fetched 2 Nov 2026
  19. Overview - Claude Code Docs fetched 2 Nov 2026