Repository navigation
Add everyday media tools: compress, merge, slideshow, extract audio, remove metadata - #336
Closed
cre8ive-marketing wants to merge 3 commits into
Closed
cre8ive-marketing wants to merge 3 commits into
cre8ive-marketing wants to merge 3 commits into
Conversation
…remove metadata New built-in presets (settings schema 33), offered on the back faces of the images, PDF, video and audio donuts where they have room: - Compress image: same format, quality 75 (never above a JPEG's own), zlib level 9 for PNG, ZIP for TIFF. - Compress video: H.264 MP4 at the Small quality, at most 1080p. - Video from images: pictures as a 1080p MP4, 3 s each, with 1 s crossfades (seconds and crossfade on/off in the preset editor). - Extract audio: a video's sound as M4A, copied when the codec allows (MediaOptions.CopyAudioWhenPossible). - Merge videos / Merge audio: clips joined in the order picked in the merge order window; same-codec clips are copied, others encoded to match the first clip; audio is decoded and joined without gaps. - Remove metadata: same format; images drop EXIF/XMP/ICC (JPEG kept at its own quality), videos and audio copy their streams without tags, chapters or data tracks, PDFs drop document info and XMP. JobQueue joins files through a new IMediaJoiner (FFmpeg); MediaJoining holds the pure command lines. Strings in all nine languages. Unit tests for the presets, migration, queue and command lines, and real FFmpeg tests for every tool. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Schema 33 replaces the plain M4A slice of the video donut's back face with Extract audio (the same M4A, the sound copied where it can be), or adds it with the other tools when there is room. Real FFmpeg tests pass the test's cancellation token to file calls (xUnit1051, dotnet format). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pt-BR translation merged since gets the new preset names, the slideshow options and the error for too many pictures. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner
|
Thanks for this, @cre8ive-marketing! A nicely scoped set of everyday tools, and reusing the merge order window is a good touch. so expect us to merge main and give feedback per preset then. |
Collaborator
Author
|
Thanks! Sounds good. Happy to rebase onto main after 2.0.0 and adjust the settings migration and back-face placement to fit. Per-preset feedback welcome. |
5 tasks done
Collaborator
Author
|
Replaced by #349: the same tools rebased onto 2.0.0, plus fixes from an audit (safer merge copies, slideshow progress, compress never bigger, MKV fonts kept). Closing this one to keep review in one place. |
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.
What does this change?
Adds eight everyday tools as built-in presets (settings schema 33): Compress image, Compress video, Video from images, Extract audio, Merge videos, Compress audio, Merge audio and Remove metadata. Compress PDF, image → PDF and the image conversions were already there, so this PR leaves them as they are.
MediaOptions.CopyAudioWhenPossible); anything else is encoded to AAC.{name}_clean. Images drop EXIF/XMP/IPTC/comments and the ICC profile (the editor can keep it), and a JPEG keeps its own quality. Videos and audio copy their streams without global or per-stream tags, chapters or data tracks (an iPhone's timed location track). PDFs drop the document information and every XMP packet; pages, links, bookmarks and forms stay.Where they show up. A new library has them on the back faces: images (Compress image, Remove metadata), PDF (Remove metadata), video (Extract audio in place of M4A, Compress video, Merge videos) and audio (Compress audio, Merge audio, Remove metadata). The schema 33 upgrade adds them where a back face has room and replaces the plain M4A slice on the video donut's back with Extract audio. Video from images is on no donut by default (the images back face is full); users add it in Settings → Toolbar.
How it is built
IMediaJoiner(Core) is used byJobQueuefor presets that join files (Preset.JoinsIntoOneMedia). For a slideshow, every picture becomes a PNG through the image engines first, so orientation and formats like HEIC are handled. A file that can't join fails on its own; the other files are still joined.FfmpegConverterimplements it. The command lines are in the newMediaJoining(pure, unit tested). A long filter graph goes into a-/filter_complexfile to stay under the Windows command-line limit.MediaEncoding.WithoutMetadatawrites a stream copy of the file without its metadata, andCanCopyIntoAudiodecides when Extract audio can copy instead of encode.PdfSharpConverter.StripMetadataremoves the PDF metadata.ImageEncodergets two options,MaxCompressionandKeepSourceQuality.PresetAvailabilitygreys these slices out without FFmpeg and offers the FFmpeg download, the same way as other presets.RadialControllerasks for the order of joined files with the existing merge order window.How was it tested?
dotnet format --verify-no-changesdotnet test: Core 466, App 749, Setup 134, Cli 27 and Platform 48 tests pass. Engines: 1453 pass with Filee's FFmpeg 9.0.2 installed. One fails,PandocMarkupTests.More_markup_languages_and_slides, and it fails the same way onmainon this PC: a system Pandoc there changes the Org/Markdown → PDF route.MediaToolTests: the presets, the schema 33 upgrade and the queue's join paths.MediaJoiningTests: the command lines.MediaToolRealTests: 14 real runs, checked with ffprobe and stream hashes. For example, merged clips are copied, Extract audio copies the same AAC packets, and Remove metadata keeps the same video and audio packets with no title, location or chapters.build/build-installer.ps1on Windows 11. Every tool also ran through the installedfilee-cli.Screenshots (UI changes)
The only new UI is in the preset editor of "Video from images": a "Seconds per picture" box and a "Crossfade between pictures" check box in the video & audio card.
Checklist
src/Filee.App/Assets/i18n/*.jsonfilesTHIRD-PARTY-NOTICES.md(none: only the FFmpeg that is already used)🤖 Generated with Claude Code