HN.zip

Lazycut: A simple terminal video trimmer using FFmpeg

102 points by masterpos - 36 comments
kawsper [3 hidden]5 mins ago
I asked about this tool 3 days ago, HN is a magical place! https://news.ycombinator.com/item?id=47363432
sorenjan [3 hidden]5 mins ago
I don't find trimming videos with ffmpeg particularly difficult, is just-ss xx -to xx -c copy basically. Sure, you need to get those time stamps using a media player, but you probably already have one so that isn't really an issue.

What I've found to be trickier is dividing a video into multiple clips, where one clip can start at the end of another, but not necessarily.

bolangi [3 hidden]5 mins ago
FWIW, here's a simple command line utility for joining and trimming the multiple video files produced by a video camera.

https://metacpan.org/dist/App-fftrim/view/script/fftrim

ramon156 [3 hidden]5 mins ago
I don't find Sharing files with people very difficult, just login to your FTP and give an account to another user. - Person commenting on OneDrive
sorenjan [3 hidden]5 mins ago
Missed opportunity to reference the famous Dropbox hn comment.

I just think there are other closely related use cases where a separate program can add more value, especially in the terminal. I wouldn't suggest most people should use ffmpeg instead of a gui, those are too dissimilar. Another example is cutting out a part of a video, with ffmpeg you need to make two temporary videos and then concatenate them, that process would greatly benefit from a better ux.

tptacek [3 hidden]5 mins ago
Point of order: the Dropbox HN comment is famously misconstrued. People think it was about Dropbox; it was about the Dropbox YC application, and was both well-intentioned and constructive.
gyan [3 hidden]5 mins ago
> with ffmpeg you need to make two temporary videos and then concatenate them

It can be done in a single command, no temp files needed.

hiccuphippo [3 hidden]5 mins ago
I used a plugin in mpv to do it but I can't find it anymore. You just pressed a key to mark the start and end. And with . and , you could do it at keyframe resolution not just seconds.
tptacek [3 hidden]5 mins ago
This is very cool. I built one of these myself around Christmas; Claude Code can put one together in just a couple prompts (this is also how I worked out how to have Claude test TUIs with tmux). What was striking about my finished product --- which is much less slick than this --- was how much of the heavy lifting was just working out which arguments to pass to ffmpeg.

It's surprisingly handy to have something like this hanging around; I just use mine to fix up screen caps.

Commenting mostly because when I did this I thought I was doing something very silly, and I'm glad I'm not completely crazy.

booi [3 hidden]5 mins ago
You can use AI to figure out the arguments to ffmpeg. But indeed it seems like there's just a single call to FFmpeg CLI to power the whole thing which is amazing.

  ffmpegCmd := exec.Command("ffmpeg",
    "-ss", fmt.Sprintf("%.3f", position.Seconds()),
    "-i", p.path,
    "-vf", strings.Join(filters, ","),
    "-vframes", "1",
    "-f", "image2pipe",
    "-vcodec", "bmp",
    "-loglevel", "error",
    "-",
  )
ariym [3 hidden]5 mins ago
I think this is the first instance I've seen of an actual terminal video player. Very fun to play with.
mikkupikku [3 hidden]5 mins ago
mplayer, mpv and I think VLC can do it, with the right output driver settings (libcaca or a few other choices.)
tptacek [3 hidden]5 mins ago
You can just use ffmpeg to extract frames, and then just render the raw images with unicode blocks.

(There's Kitty Graphics too, but I couldn't figure out how to make terminal UI layout work with it.)

chadrs [3 hidden]5 mins ago
yeah I remember learning this trick in like 2007 with libaa and later caca for color.

It looks like this app is shelling out to ffmpeg to get the bitmap of a frame and then shelling to something called chafa to covert to nice terminal-friendly video.

https://github.com/hpjansson/chafa/

mhuffman [3 hidden]5 mins ago
I have been using this one[0] and it is small, fast, and seems to work pretty great for me so far.

[0]https://github.com/wong-justin/vic

chris_va [3 hidden]5 mins ago
Invoking ffmpeg, gzip and tar commands is a sort of reverse Turing test for LLMs
noiv [3 hidden]5 mins ago
On MacOs I just press space and trim with finder. Even avoids re-compressing.
Acrobatic_Road [3 hidden]5 mins ago
Could have really used this a couple days ago. I had to record a video an assignment, but due to lack of global hotkeys on OBS with wayland, I had to start and stop the video on the OBS GUI. I tried to figure out ffmpeg but I was too tired and it was getting close to the deadline so I spent some time learning how to to do it with kdenlive.
utopiah [3 hidden]5 mins ago
Don't think I need it (using ffmpeg directly or Kdenlive if I need fine edits) but to know that it exists brings me joy, so thank you!
throw101010 [3 hidden]5 mins ago
The intermediary solution for me between ffmpeg and kdenlive is LosslessCut (https://github.com/mifi/lossless-cut). Also free and open-source... of course it look less cool than a Terminal UI like the OP, but it's very practical when I don't want to reencode everything, or if I just need to change the format of container (MP4, MKV, etc.).
tim-projects [3 hidden]5 mins ago
I use losslesscut but its package size is absolutely massive. Would really appreciate alternatives like this.
mrbluecoat [3 hidden]5 mins ago
I agree. Trim is nice but the killer feature of LosslessCut is cutting a scene in the middle and merge results while maintaining correct subtitles.
nacs [3 hidden]5 mins ago
Lossless-cut has both an HTTP api and a CLI so it could be controlled via a lightweight TUI if someone wanted.
masterpos [3 hidden]5 mins ago
You are welcome! It is nice when you need to quickly crop or trim something and don’t want to launch a video editing app. The repo is owned by a friend, you can leave a star to make him happy :)
HelloUsername [3 hidden]5 mins ago
Doesn't -y mean overwrite file? And isn't there a difference between -ss before -i and after -i?
dylan604 [3 hidden]5 mins ago
yes and yes. I assume no further info is necessary for what I also assumed was rhetorically asked
bfrjjrhfbf [3 hidden]5 mins ago
Having to separately download ffmpeg in the windows distribution does not really make sense

Just bundle it

sorenjan [3 hidden]5 mins ago
I disagree, I don't want another ffmpeg binary, I already have one. Winget works well, especially since this is already a terminal program.
ftchd [3 hidden]5 mins ago
People that use GUIs/tools for things like ffmpeg, rclone etc really want the developer to autodetect if they have it already, and use that instead of installing a separate version/binary.

How do I know? I built one (https://github.com/rclone-ui/rclone-ui)

karlosvomacka [3 hidden]5 mins ago
afaik winget can automatically manage package dependencies.
fdb [3 hidden]5 mins ago
I keep being surprised of what you can use/abuse the terminal for...
QuantumNomad_ [3 hidden]5 mins ago
It uses a program called Chafa to render the video.

https://hpjansson.org/chafa/

Hadn’t heard of Chafa before.

Chafa supports outputting to all popular terminal graphics formats according to the Chafa website: Sixels, Kitty, iTerm2, Unicode mosaics.

Speaking of which it is also worth to point out that for example sixels were first invented and put into use quite early on:

> […] as a way to send bitmap data to the VT200 series and VT320 terminals when defining custom character sets.

https://en.wikipedia.org/wiki/Sixel

In the references if that Wikipedia article you see for example VT330/VT340 Programmer Reference Manual, Volume 2: Graphics Programming from May 1988.

https://www.vt100.net/docs/vt3xx-gp/chapter14.html

faangguyindia [3 hidden]5 mins ago
I've been using ffmpeg with claude as video editor for long time.
hsuduebc2 [3 hidden]5 mins ago
You mean you let create claude command or it itself runs ffmpeg on your local machine and returns you finished cut?
mandeepj [3 hidden]5 mins ago
I guess I can find another implementation to combine trimmed parts after taking out certain scenes?
hiccuphippo [3 hidden]5 mins ago
Write a text file with all the parts like this:

    file 'file1.mp4'
    file 'file2.mp4'
    file 'file3.mp4'
Then call ffmpeg like this:

    ffmpeg -f concat -i files.txt -c copy output.mp4
And I guess you could make an LLM write a {G,T}UI for this if you really want.