H.264 · H.265 · VP9 · AV1
VideoForge

Videos readyfor the nextformat.

Desktop conversion with H.265, VP9 and AV1.

Converts video to modern codecs and shows the size first.

Desktop appVideoOriginal

  • Tauri
  • Rust
  • React
  • FFmpeg
H.264 · H.265 · VP9 · AV1
VideoForge

Videos readyfor the nextformat.

Desktop conversion with H.265, VP9 and AV1.

  • Tauri
  • Rust
  • React
  • FFmpeg

Converts video to modern codecs and shows the size first.

Desktop appVideoOriginal

  • Tauri
  • Rust
  • React
  • FFmpeg

PortfolioVideoForge

Before converting

How much the video will weigh, before you press the button.

The program does the math before converting: how much space the new video should take and how much it will save. Change the codec, quality, resolution and audio and watch the strip shrink.

Video codec

Resolution

Audio

Original218 MB
Estimated38.1 MB

Between 30.4 MB and 45.7 MB.

−83% in size

2,000 + 128 kbit/s × 150 s

The math is the program's (App.tsx): each CRF has a reference bitrate at 1080p, the codec multiplies (H.265 half of H.264, AV1 40%), the resolution scales by pixels and audio adds up; the result becomes a range 20% below and above. The example video is 1080p at 12 Mbit/s.

Project scene: the program window with the conversion settings enlarged beside it, among film reels

Every setting, under your control.

Codec, resolution, quality and trimming in a direct interface.

CRF qualityResolutionTrim by time

Behind the buttons, the program builds a command for FFmpeg, the video engine it calls. Change the settings and watch each piece of the command appear, in the color of the setting that created it.

Codec

Resolution

Frames per second

Audio

kbit/s

Output format

The command that goes to FFmpeg

ffmpeg -y -ss 15 -i entrada.mov -to 100 -progress pipe:1 -nostats -c:v libx265 -preset medium -crf 23 -vf scale=1280:720:force_original_aspect_ratio=decrease,pad=ceil(iw/2)*2:ceil(ih/2)*2 -c:a aac -b:a 128k saida.mp4 

The assembly is the program's (main.rs): -ss before the input and -to after; the scale fits the video in the box without distortion and rounds to an even number; the same -preset and -crf go to every codec; with "Copy", the video is just copied. The output format comes from the file extension.

Project scene: the program window with the audio settings, a metal sound wave and an orange play button

From video to audio. A tool made to measure.

Tauri, Rust and FFmpeg with an interface in React and TypeScript.

Original project

While converting, FFmpeg never stops talking. The program reads only two lines of all that chatter, the time already converted and the speed, and turns them into a bar. Start it and see.

What FFmpeg writes

-progress pipe:1

Trim total: 85 s

Converted
0.0 s
Speed
—

The real screens

The rules are the program's (main.rs): out_time_ms comes in microseconds and is divided by 1,000,000; the percentage is converted time over total, capped at 100%; with a trim, the total is end minus start. The lines here are examples, in FFmpeg's real format.

The technologies

What it is made of, piece by piece

A lean desktop program: the screen is React with Tailwind inside Tauri, and Rust builds the command, calls the FFmpeg installed on the machine and reads the progress, in 3 commands. Pick a piece to see what it does here and which file it is in.

8technologies, in 2 layers

Screen

Program