FFmpeg

ffmpeg.org
FFmpeg

A complete, cross-platform solution to record, convert, and stream audio and video. It's the industry standard multimedia framework, handling a vast range of formats. As a command-line tool, it guarantees that all processing is done locally on your machine.

Open Source

FFmpeg Source Code

Author

FFmpeg

Description

Mirror of https://git.ffmpeg.org/ffmpeg.git

#audio#c#ffmpeg#fft#hevc#hls#matroska#mp4#mpeg#multimedia#rtmp#rtsp#streaming#video#webm

Homepage

https://ffmpeg.org/

License

NOASSERTION

Created

14 Apr 11

Last Updated

20 Jul 26

Latest version

v0.6.1

Primary Language

C

Size

488,831 KB

Stars

62,222

Forks

14,029

Watchers

62,222

Language Usage

Language Usage

Star History

Star History

Top Contributors

Recent Commits

  • sfan5 (16 Jul 26)

    libavcodec/mediacodecdec_common: support AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH Signed-off-by: sfan5 <[email protected]>

  • sfan5 (16 Jul 26)

    libavcodec/mediacodecdec_common: improve logging for failing to get codec The logging should obviously happen before returning an error. Also include the mime type and detected profile. Signed-off-by: sfan5 <[email protected]>

  • Timo Rothenpieler (19 Jul 26)

    forgejo/workflows: block concurrent backport runs for the same pull request

  • Timo Rothenpieler (19 Jul 26)

    forgejo/workflows: fix backport condition compatibility

  • Timo Rothenpieler (15 Jul 26)

    forgejo/workflows: add workflow for automatic backport PRs via labels

  • Lynne (19 Jul 26)

    avcodec/aacpsy: fix the attack lookback This fixes a 15+ year old bug. The novelty check read its previous-frame envelope from prev_energy_subshort after the sub-block loop had already overwritten it with current-frame values, so early sub-blocks were compared against the frame's own future instead of the past. That accident suppressed short-period pitch trains well enough, but also suppressed genuine onsets, and could not see pulse periods beyond ~12ms at all: on quiet slow pulse trains (engine-idle buzz and the like) the ratio test leaks sporadic isolated short excursions, each an audible click - reported against this encoder since 2015, at every bitrate, and immune to disabling every coding tool. Keep a rolling two-frame history of HP sub-block peaks instead and require an attack to tower over it: within ~12ms unconditionally (pitch-rate trains), and within ~44ms when coming from steady long-window state (slow trains, where an isolated short excursion can only click). Dense irregular transients tower locally and reset frames_since_short, so their block switching is untouched.

  • Ramiro Polla (24 Jun 26)

    swscale/tests/sws_ops_aarch64: pretty-print entries in ops_entries.c This makes them all neatly aligned. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (17 Jun 26)

    swscale/aarch64/ops: use SwsUOpParams for SwsAArch64OpImplParams's parameter fields This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (17 Jun 26)

    swscale/aarch64/ops: use SwsCompMask for SwsAArch64OpImplParams.mask This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (17 Jun 26)

    swscale/aarch64/ops: use SwsDitherUOp for SwsAArch64OpImplParams.dither This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (17 Jun 26)

    swscale/aarch64/ops: use SwsLinearUOp for SwsAArch64OpImplParams.linear This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (17 Jun 26)

    swscale/aarch64/ops: use SwsPackUOp for SwsAArch64OpImplParams.pack This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (17 Jun 26)

    swscale/aarch64/ops: use SwsMoveUOp for SwsAArch64OpImplParams.move This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (17 Jun 26)

    swscale/aarch64/ops: use SwsClearUOp for SwsAArch64OpImplParams.clear This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (17 Jun 26)

    swscale/aarch64/ops: use SwsShiftUOp for SwsAArch64OpImplParams.shift This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (11 Jun 26)

    swscale/aarch64/ops: use SwsUOpType/SwsPixelType instead of SwsAArch64OpType/SwsAArch64PixelType Also use ff_sws_pixel_type_size() instead of aarch64_pixel_size(). This is a step towards the move to uops. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (17 Jun 26)

    swscale/tests/sws_ops_aarch64: use AVBPrint instead of custom string functions buf_appendf() was used when this code still needed to run standalone in aarch64/ops_asmgen. Since this is no longer the case, use AVBPrint instead. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (17 Jun 26)

    swscale/aarch64/ops: remove overly-complicated field-specific functions ... and replace them by simple switches. Since the last commit, op_fields is no longer used by aarch64/ops_asmgen, so it can be simplified into its only user. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (11 Jun 26)

    swscale/aarch64/ops: remove overly-complicated generated lookup function ... and replace it by a simple linear lookup over ops_entries. The previous approach was faster, but for an init function this hardly matters. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (12 Jun 26)

    swscale/aarch64/ops: specialize clear operation There are now more specialized functions for components that clear to zero and one (using `movi` instead of `dup`). This is similar to the way SWS_UOP_CLEAR works and will simplify the move to uops. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (12 Jun 26)

    swscale/aarch64/ops: specialize linear operation This is similar to the way SWS_UOP_LINEAR{,_FMA} work and will simplify the move to uops. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (11 Jun 26)

    swscale/aarch64/ops: specialize convert and expand operations This is similar to the way SWS_UOP_TO_{U8,U16,U32,F32} and SWS_UOP_EXPAND_{PAIR,QUAD} work and will simplify the move to uops. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (12 Jun 26)

    swscale/aarch64/ops: convert swizzle operation to a series of moves This is similar to the way SWS_UOP_PERMUTE/SWS_UOP_COPY work and will simplify the move to uops. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Ramiro Polla (17 Jul 26)

    swscale/aarch64/ops: consistently use SWS_COMP() to test and set mask values Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]>

  • Lynne (19 Jul 26)

    aacenc: add an info log to ask users to resample

  • Lynne (17 Jul 26)

    avcodec/aacenc: rework NMR stereo decisions, retune coded bandwidth Stereo decisions are made per band before quantization, from the psy model's spectra, and carry cross-frame memory (EMA-smoothed statistics, per-grid mode banks, leave-hysteresis) so the image holds instead of churning: * M/S adopts content-driven and rate-free (side under half the mid); for mid-dominant bands M/S is simply the better coding at every rate, and a wandering L/R fraction reads as image instability. * I/S competes with M/S above 6.1 kHz instead of only seeing M/S rejects (which are exactly the wide bands it cannot render), and engages under SUSTAINED strain only: the pressure ramp gated by the lambda floor, so pressure spikes at a comfortable operating point cannot flood it onto content where coding the side is affordable and strictly better. Unengaged candidates fall back to M/S. * Pairs whose joint-tool candidacy fraction stays low decouple: block switching goes per-channel and M/S stops, matching how independent coding wins on diffuse decorrelated content. * PNS in a pair is reserved for clearly-wide bands (it renders uncorrelated noise per channel). Block switching for a pair is decided through the psy window_pair() hook so common_window survives transients. The NMR rate-to-bandwidth table is retuned upward at >= 48 kbps/ch to track the bandwidth strong encoders deliver; both quality metrics improve on a 16-clip battery and wider regresses. Lower rates are unchanged.

  • Lynne (17 Jul 26)

    avcodec/aacpsy: sync block switching across channel pairs Implement the window_pair() hook: detect both channels of a CPE, then decide together - if either channel attacks, both switch, with one merged attack map so the grouping matches across the pair and common_window survives transients. Pairs the encoder has flagged as decoupled (joint tools dead) keep independent per-channel decisions, where forcing the steady channel short at every event in the other only costs quality. Attacks must also be NOVEL against the trailing high-pass max-envelope: a steady pitch-pulse train repeats its peak every period and re-fires the ratio test forever, producing long false short runs on periodic content (low brass and the like); a genuine onset towers over the recent past. The pre-echo threshold relaxation for gentler isolated onsets is kept, and START frames entering a short sequence clamp their thresholds toward the previous long frame's per-band values on the mapped long grid.

  • Lynne (17 Jul 26)

    avcodec/aacenc_tns: enable short-block TNS via pooled per-group filters Per-window filters combined with group-shared scalefactors made short-block TNS produce decoder-synthesized silence: a weak residual in one sub-window rounds to zero under the group's scalefactor and the synthesis filter has nothing to re-amplify, audible as 1.5-3 ms dropouts on beat content. Fit ONE filter per window group instead, on the concatenated weighted spectra, and require every window in the group to pass the prediction-gain bar. Accepts are Schmitt-gated and run-scoped: within a short run the enter bar is raised and the hold bar lowered (accept flicker was audible as gravel), while isolated transient frames - where TNS matters most and cannot flicker - use the base bar.

  • Lynne (17 Jul 26)

    avcodec/aaccoder: widen PNS candidacy to near-masked bands Bands whose energy sits between threshold/4 and 2x threshold are deletion candidates for the trellis: coded, they round to silence under pressure, and an audible hole is worse than energy-matched noise. Let them qualify for PNS with a relaxed uniformity requirement, so the noise substitution keeps the texture the allocator was about to delete.

  • Lynne (17 Jul 26)

    avcodec/aacenc: rework NMR rate control, pool CPE budgets, add decision memory Rate control: replace the integral servo with a stateless pressure offset (exp2(-K*fill/R)) so a drained reservoir cannot wind up and crater quality after loud stretches; slew-limit the final operating lambda per frame (bits deviate instead, the reservoir absorbs); seed the reservoir full at stream start; and track rate strain explicitly: a long-frame lambda EMA against anchors that scale up when the achieved distortion/mask ratio flags noise-class content (whose psy masks are wholesale violated and lambda reads inflated), plus a lambda min-tracker separating sustained starvation from transient spikes at a comfortable operating point. The resulting pressure ramp gates every pressure-adaptive tool from one place. CPE budget pooling: solve both channels of a pair jointly under one shared lambda against a pooled budget (NMRSlot defer/solve/commit) instead of an equal per-channel split, which starved the mid/carrier while the side gold-plated. Mono and VBR output are unchanged. Transients: isolated onsets are coded uniformly finer across the short run and repaid from steady stretches; dense-beat runs get a starvation-scaled boost; a transition premask clamps START-frame thresholds toward the previous long frame (an attack cannot mask backwards). Decision memory: marginal per-frame re-decisions oscillate audibly, so every stateful choice now carries hysteresis - band zeroing, PNS enter/leave with debounce (and near-masked bands staying noise until a loudness guard), per-grid stereo mode banks that survive window switches, and the short-TNS accept state. TNS-covered bands price distortion by the synthesis filter's re-amplification gain, so the trellis spends where noise will actually be heard.

FFmpeg Security

5.2/10

Repo Security Summary

Updated 29 Jun 26 Fuzz tested

  • Maintained 10/10
  • Packaging N/A
  • Code-Review 0/10
  • Token-Permissions N/A
  • Dangerous-Workflow N/A
  • CII-Best-Practices 0/10
  • Security-Policy 0/10
  • Signed-Releases N/A
  • License 9/10
  • Branch-Protection N/A
  • SAST 0/10
  • Binary-Artifacts 10/10
  • Fuzzing 10/10
  • Pinned-Dependencies N/A

FFmpeg Website

Website

FFmpeg

Redirects

Does not redirect

Security Checks

All 65 security checks passed

Server Details

  • IP Address 79.124.17.100
  • Hostname ffbox0-bg.ffmpeg.org
  • Location Sofia, Sofia (stolitsa), Bulgaria, EU
  • ISP Telepoint Ltd
  • ASN AS31083

Associated Countries

  • BG BG
  • DE DE
  • IT IT

Safety Score

Website marked as safe

100%

Blacklist Check

ffmpeg.org was found on 0 blacklists

  • AntiSocial Blacklist
  • Artists Against 419
  • Badbitcoin
  • Bambenek Consulting
  • CERT Polska
  • CoinBlockerLists
  • CRDF
  • CryptoScamDB
  • EtherAddressLookup
  • EtherScamDB
  • Fake Website Buster
  • MetaMask EthPhishing
  • NABP Not Recommended Sites
  • OpenPhish
  • PetScams
  • PhishFeed
  • PhishFort
  • Phishing.Database
  • PhishStats
  • PhishTank
  • Phishunt
  • RPiList Not Serious
  • Scam.Directory
  • SecureReload Phishing List
  • Spam404
  • StopGunScams
  • Suspicious Hosting IP
  • ThreatFox
  • ThreatLog
  • TweetFeed
  • URLhaus
  • ViriBack C2 Tracker

Website Preview

Website preview

FFmpeg Docker

Container Info

Ffmpeg

# This container needs special attention. Please check https://hub.docker.com/r/linuxserver/ffmpeg for details.

#Media Tools linuxserver/ffmpeg:latest

Run Command

docker run -d \
  -p 80:80/tcp \
  -e PUID=${PUID} \
  -e PGID=${PGID} \
  -e TZ=${TZ} \
  -v /srv/lsio/ffmpeg/config:/config \
  --restart=unless-stopped \
  linuxserver/ffmpeg:latest

Compose File

version: 3.8
services:
  ffmpeg:
    image: "linuxserver/ffmpeg:latest"
    ports:
      - "80:80/tcp"
    environment:
      PUID: 1000
      PGID: 1000
      TZ: Etc/UTC
    volumes:
      - "/srv/lsio/ffmpeg/config:/config"
    restart: unless-stopped

Environment Variables

  • Var Name Default
  • PUID 1000
  • PGID 1000
  • TZ Etc/UTC

Port List

  • 80:80/tcp

Volume Mounting

  • /srv/lsio/ffmpeg/config /config

FFmpeg Reviews

More File Converters

About the Data: FFmpeg

Change History

API

You can access FFmpeg's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/v1/services/ffmpeg

The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

Share FFmpeg

Help your friends compare File Converters, and pick privacy-respecting software and services.
Share FFmpeg and Awesome Privacy with your network!

View File Converters (2)