Skip to content

Add everyday media tools: compress, merge, slideshow, extract audio, remove metadata - #336

Closed
cre8ive-marketing wants to merge 3 commits into
KnifeLemon:mainfrom
cre8ive-marketing:feature/everyday-media-tools
Closed

cre8ive-marketing wants to merge 3 commits into
KnifeLemon:mainfrom
cre8ive-marketing:feature/everyday-media-tools

Conversation

@cre8ive-marketing

Copy link
Copy Markdown
Collaborator

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.

Preset What it does
Compress image Same format at quality 75, never above a JPEG's own quality; PNG at zlib level 9 (same pixels), TIFF with ZIP.
Compress video H.264 MP4 at the Small quality, at most 1080p (MP4, MOV, M4V, …).
Video from images The dropped pictures as a 1080p MP4: 3 s each with 1 s crossfades. Seconds per picture and crossfade on/off are in the preset editor. At most 300 pictures.
Extract audio A video's sound as M4A. AAC/ALAC is copied without an encode (MediaOptions.CopyAudioWhenPossible); anything else is encoded to AAC.
Merge videos Clips joined in the order picked in the merge order window. Clips with the same codec, size and sound are copied (concat demuxer); others are fitted into the first clip's frame and encoded. A clip without sound is silent for its length.
Compress audio AAC M4A at the Small quality (128 kbit/s stereo).
Merge audio Audio files (or the sound of videos) decoded and joined into one M4A with no gaps between them; mono stays mono, ALAC if the preset asks for it.
Remove metadata Same format, {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 by JobQueue for 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.
  • FfmpegConverter implements it. The command lines are in the new MediaJoining (pure, unit tested). A long filter graph goes into a -/filter_complex file to stay under the Windows command-line limit.
  • MediaEncoding.WithoutMetadata writes a stream copy of the file without its metadata, and CanCopyIntoAudio decides when Extract audio can copy instead of encode.
  • PdfSharpConverter.StripMetadata removes the PDF metadata. ImageEncoder gets two options, MaxCompression and KeepSourceQuality.
  • PresetAvailability greys these slices out without FFmpeg and offers the FFmpeg download, the same way as other presets. RadialController asks for the order of joined files with the existing merge order window.
  • Strings are added to all ten languages, including the pt-BR translation from Add Brazilian Portuguese #322.

How was it tested?

  • dotnet format --verify-no-changes
  • dotnet 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 on main on this PC: a system Pandoc there changes the Org/Markdown → PDF route.
  • New tests:
    • 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.
  • Tried it in the app: built and installed with build/build-installer.ps1 on Windows 11. Every tool also ran through the installed filee-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

  • New UI strings are in all src/Filee.App/Assets/i18n/*.json files
  • New third-party code or binaries are listed in THIRD-PARTY-NOTICES.md (none: only the FFmpeg that is already used)

🤖 Generated with Claude Code

cre8ive-marketing and others added 3 commits October 21, 2026 14:07
…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>
@KnifeLemon KnifeLemon added the feature New features label Oct 21, 2026
@KnifeLemon KnifeLemon self-assigned this Oct 21, 2026
@KnifeLemon

Copy link
Copy Markdown
Owner

Thanks for this, @cre8ive-marketing!

A nicely scoped set of everyday tools, and reusing the merge order window is a good touch.
2.0.0 is being released right now, so we'll review this after it. Main has moved a lot in the last days (settings schema, presets on the back of the donut, a crop overlay),

so expect us to merge main and give feedback per preset then.

@cre8ive-marketing

Copy link
Copy Markdown
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.

@cre8ive-marketing

Copy link
Copy Markdown
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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New features

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants