
How to trim video clips instantly without reencoding - verst
https://bernd.dev/2020/04/trim-videos-instantly/
======
userbinator
Even more instantly, if your file is not in a "fixed" container format like
MP4 or AVI but one designed for streaming use like an MPEG TS or PS, you can
simply cut a (suitably large) range of bytes from it using any generic file
manipulation tool; on POSIX-like systems, head and tail would work.

After all, it is called a _stream_ for a reason... while there's definitely a
lower limit to how small you can cut out a piece and have it still decode, as
far as I know, all common audio and video codecs are designed with sync codes
and "markers" so that a decoder can easily find a valid data block to start
decoding from. Something like a broadcasted signal from a TV channel has no
start nor end, so decoders need to be able to just jump in at any point and
start decoding.

~~~
kd5bjo
This is essentially how we broke apart long streams into manageable archive
files at Justin.tv. You can get slightly better decoder behavior if you’re
careful about where you make the cut: some frames are encoded as a difference
from the previous frame and others are self-contained. If you cut before one
of the self-contained frames, the decoder can start immediately instead of
throwing away some data.

~~~
milankragujevic
Yes, indeed, I had worked on a small project of mine and needed a really
efficient and cheap way to serve terabytes of data to a lot of users, fast. I
was poor and young (15 years old).

I re-created (I haven't invented this, obviously) a way to split the video
file into keyframe segments and mark down the start byte offsets of the
keyframes, and then I could "virtually" split the file for streaming, so that
a user wouldn't 1) buffer the whole file, 2) need to have the whole file to
share to others (P2P in the browser), 3) need to restart the stream and
sharing if the connection broke.

This could've obviously been done with HLS or DASH, but that required remuxing
the files and keeping lots of them. I instead remuxed files into TS container,
indexed all the files, made JSON manifests, and had a network of reverse proxy
"CDN" servers on continents that would pull the files from a few central
servers, cache the small virtual chunks, which were created by reading byte
offsets from the file and serving it as a "file" with PHP.

In the end, the project collapsed due to non-technical issues, and me loosing
interest and doing more legitimate and useful things. I then resold the
technology a few times to some people who wanted the similar thing but
wouldn't have the issues I had, then I moved on and forgot it all.

It's history, it's made my career in some way, at least from my side, it was
innovative for it's time, and made me nerdy-cool in school, both with other
kids and the school staff.

-

If someone wants to know a bit more, read this:
[https://www.theverge.com/2015/10/21/9585984/browser-
popcorn-...](https://www.theverge.com/2015/10/21/9585984/browser-popcorn-
returns-new-developer) (It's cringe, I was young and stupid, LOL)

~~~
pault
Are you the author of popcorn time, or did you just operate a popcorn time web
service?

~~~
milankragujevic
Just the web service. Thankfully 5 years ago, so the statute of limitations in
Serbia expired.

------
ivan_ah
Nice one. The key is the `-c copy -map 0` option which preserves the same
codecs and stream metadata. This makes the edit operations nearly instant too.

While on the topic of ffmpeg uses, here is a script I posted that speedup
videos by a factor of 1.5:
[https://news.ycombinator.com/item?id=22584131](https://news.ycombinator.com/item?id=22584131)
(use case record an unscripted screencast or demo with lots of pauses and
uhms, then speed it up to make it look like you are super well prepared and
caffeinated --- hidden bonus: if demoing a software product it will appear to
be 33% faster!)

~~~
aasasd
VLC can speed video or audio up/down on the fly, preserving audio pitch. I'm
using it with audiobooks and old movies, and also occasionally (without pitch
lock) to turn hard house into sweet groovy house or breakcore into playful
idm, as suggested by RDJ himself—see
[https://youtube.com/watch?v=5yBvP3616Wc](https://youtube.com/watch?v=5yBvP3616Wc)
and
[https://youtube.com/watch?v=aWqf17mUyoQ](https://youtube.com/watch?v=aWqf17mUyoQ)

Btw, for some reason ffmpeg doesn't do well with changing speed of music—the
result sounds poor compared to VLC. I found that `sox` gives better quality.

~~~
RMPR
Mpv too

~~~
lozf
Plus `mpv` has awesome keyboard controls in case you need to skip back and
return to normal speed, or loop a segment etc.

~~~
capableweb
Lots of love to mpv in general because it's an awesome tool, but VLC also have
hotkeys for those things + I'm pretty sure VLCs feature set is much larger
than mpv while still being super lightweight.

Found this page but don't think that's all the hotkeys available even:
[https://wiki.videolan.org/QtHotkeys/](https://wiki.videolan.org/QtHotkeys/)

~~~
RMPR
Same here but for what it does support, mpv is the beast.

------
willis936
My friend has been using ffmpeg for trimming game clips for a while. His
workflow is: opening a video in a video player, making note of start and stop
times, and plugging the times into his ffmpeg script.

Avidemux is a FOSS video editing tool I ran into that implements ffmpeg. Since
this workflow requires a human to manually evaluate points in time in a video,
a single tool seems like a better choice.

[https://en.wikipedia.org/wiki/Avidemux](https://en.wikipedia.org/wiki/Avidemux)

~~~
narag
I wrote a graphical tool with Lazarus that invokes ffmpeg. I used it to create
clips to report cheaters in an online game, from videos created with OBS.

A word of warning: ffmpeg can't always cut where you want. Sometimes cutting
in a certain point gives you a few blank (black screen) seconds. I guess it's
because codecs work by storing what's different from previous frames.

If someone uses Lazarus (or maybe Delphi) it's as simple as:

s := Format('"C:\Program Files\ffmpeg\bin\ffmpeg.exe" -i "%s" -ss %s -c copy
-t %s "%s"', [InputFile, Start, Duration, OutputFile]);

Memo1.Lines.Text := s;

WinExec(PChar(s), SW_SHOWDEFAULT);

With the parameters taken from TEdit controls. The TMemo was used to visualize
what I was sending to ffmpeg.

------
ycombinete
There's a great ffmpeg GUI for doing the same thing (and more) called
LosslessCut [0].

[https://github.com/mifi/lossless-cut](https://github.com/mifi/lossless-cut)

~~~
ehsankia
Neat, but that's feature creep if I've ever seen it. I opened it expecting
something clean and simple but that screenshot looked almost like Premiere.

~~~
guitarbill
yeah, the first impression is a bit cluttered/overwhelming, especially if
you're just looking to do a very basic trim with a preview. but a simple
tutorial with some annotated screenshots could fix that.

------
ubercow13
There is an interesting GUI tool that is supposed to allow you to do this with
frame accuracy by re-encoding the section of the cut video before the first
keyframe, and merging it with the losslessly copied section. However
unfortunately in practice I have found it so unreliable as to be useless. I
wonder if there is a similar better tool for this.

[https://github.com/ozmartian/vidcutter](https://github.com/ozmartian/vidcutter)

~~~
paol
AviDemux [0] works reasonably well for this.

As usual it fails to calculate exact frame timings, which means the cuts may
not end up exactly where the GUI is telling you (even if you take care to
define the cut start at a keyframe).

[0] [http://avidemux.sourceforge.net/](http://avidemux.sourceforge.net/)

~~~
ubercow13
Avidemux is great for what it is but doesn't make any attempt to allow frame-
exact cutting by partial reencoding afaik, which is what I found
unique/interesting about VidCutter

------
mehrdadn
Speaking of FFMPEG, anyone have a command-line they can share for a _good_ de-
shake filter? (Like the kind that keeps the subject in the center by
rotating/moving the frame if needed?)

I've Googled and tried this so many times but there are so many filters and
knobs I half-understand (at best) that I haven't really managed to find one I
actually like in practice, but I feel like it must be possible given that
people post videos online that do this extremely well.

~~~
iwalton3
I used this to stabilize a bunch of vacation videos with great results. It
works better than the deshake filter but does require two passes.

    
    
       function stabilize {
           tempfile=".temp$RANDOM$RANDOM.trf"
           ffmpeg -nostdin -loglevel error -y -i "$1" -vf vidstabdetect=shakiness=5:show=1:result="$tempfile" -f null -
           ffmpeg -nostdin -loglevel error -y -i "$1" -vf vidstabtransform=input="$tempfile",unsharp=5:5:0.8:3:3:0.4 -movflags +faststart "$2"
           rm "$tempfile"
       }
    

Usage: stabilize infile outfile.mp4

~~~
mehrdadn
Thank you! I'll give it a try.

Update: Just tried it. It seems to do some kind of blurring to smooth the
vibrations over several frames instead of trying to cancel the shaking by
inverse-transforming the frame with respect to the shake. I think I've tried
this in my experiments before -- and I guess it's the difference between "de-
shake" and "stabilization"? Sadly it doesn't really seem better to my eyes
sadly, but thanks for the help anyway.

~~~
iwalton3
It does have a mild blur filter which you can remove, but if it isn’t actually
stabilizing the video from shakiness, something is wrong.

See here: [https://ffmpeg.org/ffmpeg-
filters.html#vidstabdetect-1](https://ffmpeg.org/ffmpeg-
filters.html#vidstabdetect-1)

Maybe your ffmpeg build doesn’t have it? Also try removing the log level
parameter.

~~~
mehrdadn
It is stabilizing, just not in the way (or as much) as I imagined, is the
issue. I tried to describe it, not really sure how else to. But it's not
really the same kind of output I'm expecting from a deshaking filter. I'd
expect black margins etc. to bleed in for example, but I don't see that here.

~~~
foxes
>This filter generates a file with relative translation and rotation transform
information about subsequent frames

>which is then used by the vidstabtransform filter.

The first pass is meant to find the rotation, then I assume the next pass
cancels it out.

~~~
mehrdadn
Maybe my terminology is wrong, but what I'm talking about is basically what
you see with the biker and pen here, or the washing machine at 3:44:

[https://www.youtube.com/watch?v=I6E6InIQ76Q&t=9s](https://www.youtube.com/watch?v=I6E6InIQ76Q&t=9s)

They stay stable in the center whereas the rest of the frame is transformed.
This necessarily requires introducing black/white crop frames into the image
with all kinds of shapes and sizes, but it turns out _incredibly_ smooth and
doesn't lose any of the frame. It also requires no noticeable blurring at all
from what I can tell. But that doesn't seem to be quite what's happening with
these commands though.

~~~
ShamelessC
I believe what you're looking for is what Reddit's popular bot u/stabbot does.

I was able to find this comment thread where a user posted some ffmpeg scripts
to replicate the behavior. Am on mobile currently so I can't verify they do
what you're looking for but here's a snippet.

//PART 1 [Defaults: shakiness=5:accuracy=15:stepsize=6:mincontrast=0.3:show=0]
ffmpeg -i shaky-input.mp4 -vf
vidstabdetect=shakiness=5:accuracy=15:stepsize=6:mincontrast=0.3:show=2
dummy_crop.mp4

//PART 2 ffmpeg -i shaky-input.mp4 -vf scale=trunc((iw _0.90)
/2)_2:trunc(ow/a/2)*2 scaled_crop.mp4

//PART 3 [-strict -2 ONLY IF OPUS AUDIO] - [Unsharp Default:
'5:5:1.0:5:5:0.0'] ffmpeg -i scaled_crop.mp4 -vf
vidstabtransform=smoothing=20:input="transforms.trf":interpol=no:zoom=-10:optzoom=2,unsharp=5:5:0.8:3:3:0.4
stabilized_crop-output.mp4

[https://www.reddit.com/r/stabbot/comments/9f7ayj/comment/e5x...](https://www.reddit.com/r/stabbot/comments/9f7ayj/comment/e5xd7md)

~~~
sorenjan
Stabbot is open source. It's written in Python and calls out to ffmpeg with
vidstabdetect/transform:
[https://gitlab.com/juergens/stabbot](https://gitlab.com/juergens/stabbot)

I don't think vidstab can do exactly what's being asked for here, I've never
seen it rotating the frame completely to keep a rotating pen stabilized, or
move the frame inside a larger canvas to keep a moving subject centered. I
think you have to use video editing and do that manually.

------
jack_pp
The problem with this is that it can only cut on i-frames which depends on the
way your file was encoded. A lot of cameras encode around 1 i-frame per second
so that means that you can not accurately cut your videos from say 0.5 to 2.5,
you must cut from 0 to 3. This may or may not be a big deal for your specific
need

~~~
_Gyan_
There's very little inaccuracy at the outpoint, so it would be 0 to 2.5.

------
gsnedders
What happens when the start time doesn't match up with a keyframe? Presumably
some re-encoding has to happen there?

~~~
mdonahoe
Don’t quote me on this, but I think ffmpeg lets you choose between starting at
the nearest Iframe or re-encoding the first GOP.

~~~
ehsankia
I believe by default it snaps to the nearest iframe. At least that's been my
experience.

~~~
bscphil
Yeah, my understanding is that it's actually very hard to get ffmpeg not to do
this, which is why I'd be interested in understanding exactly what this link
is supposedly doing. I believe it's almost certainly iframe snapping. If
anyone knows of anyway to enforce reencoding up to the first iframe in the
copy, I'd love to hear it.

~~~
cm2187
No it is possible, but the -ss needs to be after the -i not before:

[https://ffmpeg.org/ffmpeg.html#Main-
options](https://ffmpeg.org/ffmpeg.html#Main-options)

> _-ss position (input /output)_

> _When used as an input option (before -i), seeks in this input file to
> position. Note that in most formats it is not possible to seek exactly, so
> ffmpeg will seek to the closest seek point before position. When transcoding
> and -accurate_seek is enabled (the default), this extra segment between the
> seek point and position will be decoded and discarded. When doing stream
> copy or when -noaccurate_seek is used, it will be preserved._

> _When used as an output option (before an output url), decodes but discards
> input until the timestamps reach position._

It is much slower when used an output option, and I don't really know what it
does when you do stream copy, but I suspect it leaves the whole segment with
some sort of offset instruction. I often get artefacts when I play it back on
vlc, so I try to avoid that option (unless I am re-encoding).

~~~
bscphil
It's slower when used as an output option because it only has an effect on
ffmpeg's output; that is, ffmpeg literally has to decode the whole stream up
to that point because it doesn't know it can seek.

I believe this has no effect on whether or not you can cut precisely - if
transcoding is not enabled, even if ffmpeg is sticking the frames before the
first keyframe in the output file, they're effectively garbage from the point
of view of the decoder (which might explain why you see artifacts in some
players).

------
aasasd
Note that ffmpeg isn't _super_ fast when you want to cut a file into several
pieces, mostly because you'll have to start it over and over for each piece
(unless you delve into some black magic with its filter graph, which is beyond
my patience).

For splitting an audiobook into pieces, so that you can use the seek bar
sanely, `mp3splt` can be used in one run pretty much at the disk's speed. Its
format language for metadata is atrocious, but thankfully putting the result
into a script frees me from revisiting the horror.

Here's the command I use to cut into 10-minute pieces without a 1-minute piece
hanging at the end, and to name and title the pieces sequentially—so you can
be spared the ordeal:

mp3splt -t '10.00>2.00' -o '@f @n2' -d . -g 'r%[@o,@N=1,@t=#t @N]' "$1"

—where $1 is the source file, and `.` is the current directory as the
destination.

IIRC it also comes with oggsplt and flacsplt—but no such luck for aac or ac3.

~~~
cm2187
With ffmpeg, if you use -ss in input mode (ie before the -i), it looks for the
nearest keyframe before but it doesn’t scan the full video so running it
multiple time for each segment shouldn’t take much more time than a one pass
software (and gives you the opportunity to do the segments in parallel if you
can afford the I/O).

~~~
aasasd
Alas! I turned to mp3splt after having rather, erhm, _prolonged_ experience
with ffmpeg, and found the difference to be night and day. IIRC ffmpeg also
utilized the CPU considerably.

------
gambiting
I've been using Avidemux for this purpose for years now, very nice open source
tool. It can trim any video from either end without re-encoding. I've also
been using it to remove sound from videos without re-encoding too.

------
_Gyan_

      ffmpeg -ss $START -i $INFILE -c copy -map 0 -to $END $OUTFILE
    

This is functionally the same as

    
    
      ffmpeg -ss $START -i $INFILE -c copy -map 0 -t $END $OUTFILE
    

FFmpeg normalizes input timestamps unless told otherwise via -copyts. So, in
the first command, output timestamps start from 0, effectively making -to a
duration limiter.

Both -ss and -to should be on the same side of the input for (close to)
expected result.

------
spuz
If you have a Mac, you can also do this with QuickTime's Trim option. It lets
you adjust the trim points easily and you can then click Save (not export) to
trim the file losslessly.

~~~
schrijver
I’ll have to try this! I was under the impression that it was lossy in
Quicktime X. I’ve been going back to Quicktime 7 for this option (which has
apparantly finally stopped working in Catalina, but the Apple downloadable
version originally released for Snow Leopard works fine under Mojave still!).
I’ve been using Quicktime 7 Pro to do all kinds of things FFMPEG can do, not
only cropping losslessly but also removing, extracting and changing the
soundstream. It’s simpler for me than having to remember the commands :)

------
knolan
They added this functionality, or at least something similar, to Quick Look on
MacOS Mojave. It’s very useful.

[https://support.apple.com/en-ie/guide/mac-
help/mh14119/mac](https://support.apple.com/en-ie/guide/mac-help/mh14119/mac)

------
PhilippGille
> A huge time saving over workflows involving video editors.

VirtualDub and Avidemux are (simple) video editors that do it exactly the same
way.

~~~
sitzkrieg
yea came to post avidemux is this with a simple ui

------
205guy
Similarly, jpgs are encoded in blocks, so as long as you cut along block
lines, you can crop a jpg without decoding or re-encoding.

~~~
aikinai
Are there any tools that make this easy (i.e. not manually editing the
binary)?

~~~
205guy
I remember reading about one...

Here’s a simple command-line tool:
[http://ben.com/jpeg/](http://ben.com/jpeg/)

This one has a UI, but no screenshotS of it (scroll down to jpegcrop), and it
also mentions lossless rotation which I haven’t investigated:
[https://jpegclub.org/](https://jpegclub.org/)

This page explains a bit more about lossless operations and mentions that
Irfanview has them—it’s a great image viewer for that I use, and I didn’t even
know: [https://www.impulseadventure.com/photo/lossless-
rotation.htm...](https://www.impulseadventure.com/photo/lossless-
rotation.html)

------
jackson1way
Is someone aware of how popular tools do video trimming (also JPEG cropping).

I have been looking for lossless (reencode-less) trimming of videos since the
end of 90s and always just found huge video editing tools that never had these
features. And then ypu were stuck with some CLI tools where you need to count
the number of frames or milliseconds or something like that. Like if a WYSIWYG
tool isn‘t what most people would want to use.

How does the native iOS photo editing tool handle video trimming? And photo
cropping? iMovie? And what about google android tools? Or popular Windows
tools?

I used to crop my photos with XnView, which supports lossless cropping. And
I‘m always puzzled this hasn‘t really take off in other popular tools.

Lossless crop of photos and lossless trim of videos should always be included
as a feature.

Reencoding sucks.

~~~
giantrobot
Most video editing software (that I've ever used) supports making clips or
setting in/out points in longer videos. This doesn't necessarily make new
trimmed clips as files on disk because that's expensive (storage and
computation) depending on the video's codecs. Editors also expect to export a
wholly new output from source so they don't need to make those intermediate
clips. It's like pass by reference instead of pass by value.

On iOS the trimming is done losslessly, when you trim a clip it basically does
the same as what `ffmpeg` is doing here. It seeks to the new start time and
copies all the GOPs (group of pictures) to the new end point. The camera
records video with really short GOPs so the trimming can be pretty accurate.
Only if you apply filters or crop the dimensions of the video will the trimmed
clip be reencoded. Any iOS software using AVKit can do the same lossless
trims, I imagine most editors on iOS do.

When doing rotation I know the Photos app just changes the JPEG rotation flag
in the EXIF data. If you send the raw photo to something that ignores or
doesn't understand EXIF rotation you'll see just the sensor's default
orientation. I believe HEIF works the same way (the container has a rotation
atom). When exporting an image (reencoding for sharing or after editing) it
will bake in the rotation to the image data, actually performing the rotation
to the image.

~~~
jackson1way
Great feedback. Thanks alot

------
scrooched_moose
If you want a GUI on top of it, you can do the same thing in VirtualDubMod for
many file formats using the "Direct Stream Copy" option:

[http://www.digital-
digest.com/articles/virtualdubmod_cutavi_...](http://www.digital-
digest.com/articles/virtualdubmod_cutavi_page2.html)

Admittedly it's aging a bit and doesn't support a lot of newer formats, but I
still find it useful. As much as I enjoy command line, having the gui is nice
to mark in&out points and do the trimming all in one spot. You'd still have to
open a video player to figure out where to start & end.

------
astronaut_x
The ffmpeg command used in the article is key frame seeking because the -ss
argument comes before the -i argument. If the -ss argument is placed after the
-i argument, an all frame seeking mode is used.

The difference is explained here: [http://www.markbuckler.com/post/cutting-
ffmpeg/](http://www.markbuckler.com/post/cutting-ffmpeg/)

------
quintonish
With FFmpeg builds being produced for browsers[1], it'd be great see this
working in a web app. I tried making one a few years back, but it was a little
early. It only worked in Chrome, on a desktop, and with smallish MP4s at the
time[2].

[1]
[https://github.com/Kagami/ffmpeg.js/](https://github.com/Kagami/ffmpeg.js/)
[2]
[https://zvakanaka.github.io/vidslicer/](https://zvakanaka.github.io/vidslicer/)

------
ericol
This is not exactly correct.

I recently had to cut (for reasons) an mp4 video somebody sent me over
Whatsapp.

After fighting with ffmpeg for a day - they hey word here is "keys" \- because
there were issues with the video: Sound would start at point but video didn't,
or the first part before the first key in it of the video was re encoded and
the quality was crap I finally resorted to using Handbrake, that did the job I
needed.

Just get any short video somebody sent you and try do use this script, and
you'll see what I'm talking about.

------
nishparadox
I have been using this for some time now. 6 months back, while I was trying to
cut a 10mins video to extract a section of 2 mins, I had discovered this. It
was a real time saver. Quie a gem.

------
galkk
This is so good. Trying to do the same with Davinci Resolve for GoPro videos
in 2.7k resolution took me hours.

p.s. I'm more than sure that there's ffmpeg port to windows, but I've just
used it via Ubuntu on WSL (1.0) and it worked perfectly on a 3.72GB file of 8
something minutes length:

time=00:00:38.47 bitrate=67220.6kbits/s speed=91.8x

------
nyanpasu64
I found how to trim the beginning of a video to an arbitrary amount without
reencoding. I think the `-itsoffset` flag in ffmpeg causes ffmpeg to add
metadata to shift the video in time, without reencoding or actually trimming
the underlying video.

ffmpeg -i video.mp4 -itsoffset 0.25 -i audio.ogg -c copy -y av.mkv

------
radres
Can you also concatenate exactly same format video files instantly?

~~~
rednivrah52
Yea just put -c copy

------
pacamara619
Did you intentionally use the meme in a w̶r̶o̶n̶g̶ non-standard way?

~~~
verst
I honestly couldn't remember the original meme. Jackie Chan comes up when you
search for "mind blown" but also "wtf"

Can you point me to the original?

If you have suggestions for a better meme I can change it :)

~~~
kamikaz1k
I think it's typically the Tim & Eric skit that gets used for mind blown
reaction. You could maybe use a different meme format, like the Drake one...
But honestly I don't mind :) Coincidentally, I was looking at the same problem
this morning. I found that exact snippet on an SO answer. Amazing!

Snippet: [https://giphy.com/gifs/whoa-hd-tim-and-eric-
xT0xeJpnrWC4XWbl...](https://giphy.com/gifs/whoa-hd-tim-and-eric-
xT0xeJpnrWC4XWblEk)

Full video: [https://youtu.be/FYJ1dbyDcrI](https://youtu.be/FYJ1dbyDcrI)

~~~
verst
Thanks for the background on the meme!

I was also happy that this FFmpeg approach properly maintained all my subtitle
streams. That's something I was working with a few days ago if you look at the
other post on my blog.

------
fastball
There is an online service for this over at veed.io

[http://veed.io/](http://veed.io/)

------
anovikov
Caveat is that a clip will be able to start only from a keyframe. So precision
of this clipping is pretty much so-so.

------
greggman3
Maybe because I'm a addicted to node but I usually use npm to install ffmpeg

    
    
        npm install ffmpeg-static@latest
    

It works on windows, mac, and linux. Gets installed locally (don't have to
muck up my system). I do have to look up the path but I don't mind

    
    
        node_modules/ffmpeg-static/bin/<os>/x64/ffmpeg

~~~
greggman3
Compare

    
    
        $ sudo apt-get install ffmpeg
        Reading package lists... Done
        Building dependency tree
        Reading state information... Done
        The following additional packages will be installed:
          i965-va-driver intel-media-va-driver libaacs0 libaom0 libass9 libavcodec58 libavdevice58 libavfilter7 libavformat58
          libavresample4 libavutil56 libbdplus0 libbluray2 libbs2b0 libchromaprint1 libcodec2-0.8.1 libcrystalhd3 libdc1394-22
          libflite1 libgme0 libgsm1 libigdgmm5 liblilv-0-0 libmysofa0 libnorm1 libopenal-data libopenal1 libopenjp2-7
          libopenmpt0 libpgm-5.2-0 libpostproc55 librubberband2 libsdl2-2.0-0 libserd-0-0 libshine3 libsnappy1v5 libsndio7.0
          libsord-0-0 libsratom-0-0 libssh-gcrypt-4 libswresample3 libswscale5 libva-drm2 libva-x11-2 libva2 libvdpau1
          libvidstab1.1 libx264-155 libx265-165 libxvidcore4 libzmq5 libzvbi-common libzvbi0 mesa-va-drivers
          mesa-vdpau-drivers va-driver-all vdpau-driver-all
        Suggested packages:
          ffmpeg-doc i965-va-driver-shaders libbluray-bdj firmware-crystalhd libportaudio2 serdi sndiod sordi libvdpau-va-gl1
          nvidia-vdpau-driver nvidia-legacy-340xx-vdpau-driver nvidia-legacy-304xx-vdpau-driver
        The following NEW packages will be installed:
          ffmpeg i965-va-driver intel-media-va-driver libaacs0 libaom0 libass9 libavcodec58 libavdevice58 libavfilter7
          libavformat58 libavresample4 libavutil56 libbdplus0 libbluray2 libbs2b0 libchromaprint1 libcodec2-0.8.1
          libcrystalhd3 libdc1394-22 libflite1 libgme0 libgsm1 libigdgmm5 liblilv-0-0 libmysofa0 libnorm1 libopenal-data
          libopenal1 libopenjp2-7 libopenmpt0 libpgm-5.2-0 libpostproc55 librubberband2 libsdl2-2.0-0 libserd-0-0 libshine3
          libsnappy1v5 libsndio7.0 libsord-0-0 libsratom-0-0 libssh-gcrypt-4 libswresample3 libswscale5 libva-drm2 libva-x11-2
          libva2 libvdpau1 libvidstab1.1 libx264-155 libx265-165 libxvidcore4 libzmq5 libzvbi-common libzvbi0 mesa-va-drivers
          mesa-vdpau-drivers va-driver-all vdpau-driver-all
        0 upgraded, 58 newly installed, 0 to remove and 1 not upgraded.
        Need to get 34.7 MB of archives.
        After this operation, 145 MB of additional disk space will be used.
        Do you want to continue? [Y/n] n
    

vs

    
    
        $ npm install ffmpeg-static
        
        > ffmpeg-static@4.1.0 install /home/gregg/temp/node_modules/ffmpeg-static
        > node install.js
        
        Downloading ffmpeg [||||||||||||||||||||] 100% 0.0s
        
        + ffmpeg-static@4.1.0
        added 19 packages from 52 contributors and audited 21 packages in 14.318s
        found 0 vulnerabilities
    

No admin need, no system libs to install, it just works.

------
jeffrallen
Microsoft guy thinks ffmpeg is amazing? Mind blown!

