Add synchronized media conversion and guarded rough cuts - #22
Open
RichardBray wants to merge 2 commits into
Open
Add synchronized media conversion and guarded rough cuts#22RichardBray wants to merge 2 commits into
RichardBray wants to merge 2 commits into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Source-time rebuilds currently serialize separate screen/camera/audio sources, and reuse the first clip on an already-cut track, potentially discarding later adjustments. This adds synchronized source groups and refuses timelines whose existing edits cannot be preserved.
rebuild --sync-groupswith explicit source offsets, shared cut boundaries, unique clip IDs, finite/range/frame-rounding validation, and member timings in dry-run output.convert-mediato create a new editable MP4/WAV.cmprojfrom one uncut TREC. Preserve static framing/gain and track flags, validate streams, refuse existing output, and leave the original project and Camtasia settings/cache untouched. Native cursor data and unused bin items are explicitly excluded. A bounded final-frame hold covers short decoded TREC tails.--forcedoes not bypass timeline validation.Validation: 80 tests pass (including an FFmpeg conversion integration test); TypeScript check and standalone CLI build pass. A separate-media sample was opened, played, saved/reopened and exported in Camtasia 2026.2.1; exported audio/video durations matched. Full-recording validation also passed: an 864.5-second recording converted and rebuilt into 34 synchronized sections (102 clips), played and saved/reopened in Camtasia 2026.2.1, and exported as a 319.5-second MP4 with matching video/audio duration. Full export decode passed, sampled compositions were inspected, and exported-audio correlation against the edited PCM showed offsets below 0.5 ms at five points. This is a workflow mitigation related to #17, not a claim to fix Camtasia's underlying decoder issue.