FFmpeg
ffmpeg.orgA 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.
- Homepage: ffmpeg.org
- GitHub: github.com/FFmpeg/FFmpeg
- Web info: web-check.xyz/check/ffmpeg.org
FFmpeg Source Code
Author
Description
Mirror of https://git.ffmpeg.org/ffmpeg.git
Homepage
https://ffmpeg.org/License
NOASSERTION
Created
14 Apr 11
Last Updated
20 Jul 26
Latest version
Primary Language
C
Size
488,831 KB
Stars
62,222
Forks
14,029
Watchers
62,222
Language Usage
Star History
Top Contributors
-
@michaelni (30131)
-
@mkver (7740)
-
@richardpl (5822)
-
@elenril (5751)
-
@jamrial (5087)
-
@DonDiego (4681)
-
@mansr (2794)
-
@ubitux (2753)
-
@mstorsjo (2645)
-
@cehoyos (2166)
-
@justinruggles (2159)
-
@bcoudurier (1922)
-
@saste (1752)
-
@rbultje (1623)
-
@rdoeffinger (1478)
-
@lu-zero (1386)
-
@cyanreg (1328)
-
@cus (1284)
-
@haasn (1236)
-
@kodawah (1143)
-
@aurelj (1036)
-
@Nevcairiel (998)
-
@ramiropolla (856)
-
@dwbuiten (838)
-
@fhvwy (829)
-
@quink-black (679)
-
@rouseabout (611)
-
@aconverse (595)
-
@BtbN (566)
-
@lance-lmwang (469)
-
@mypopydev (445)
-
@yuvi (404)
-
@ePirat (383)
-
@T-bagwell (381)
-
@GyanD (377)
-
@Cigaes (335)
-
@TimothyGu (335)
-
@cgisquet (320)
-
@axic (315)
-
@kasper93 (285)
-
@multimediamike (276)
-
@rcombs (271)
-
@mbouron (252)
-
@mvji (241)
-
@tmm1 (217)
-
@philipl (215)
-
@merbanan (197)
-
@Tjoppen (195)
-
@xhaihao (179)
-
@nuomi2021 (176)
-
@sasshka (163)
-
@vs49688 (160)
-
@jeeb (151)
-
@Traneptora (150)
-
@rvs (146)
-
@thiloborgmann (144)
-
@guoyejun (143)
-
@QSXW (136)
-
@reynaldo (135)
-
@lukaszmluki (126)
-
@Flameeyes (121)
-
@anssih (118)
-
@lizhong1008 (113)
-
@mfcc64 (112)
-
@Marth64x (98)
-
@jzern (97)
-
@fulinjie (95)
-
@t-rapp (94)
-
@softworkz (93)
-
@mmuman (92)
-
@JackLau1222 (91)
-
@iiv3 (90)
-
@Gramner (89)
-
@danielverkamp (86)
-
@siretart (86)
-
@beastd (85)
-
@frankplow (85)
-
@superdump (85)
-
@hakzsam (85)
-
@jmenon (84)
-
@dalecurtis (83)
-
@talih0 (82)
-
@qyot27 (81)
-
@markreidvfx (81)
-
@Sibras (80)
-
@elupus (80)
-
@ddkang (80)
-
@twalker314 (80)
-
@mraulet (79)
-
@jkarthic-akamai (78)
-
@mlauss2 (77)
-
@voroshil (76)
-
@feiwan1 (74)
-
@sunyuechi (70)
-
@toots (69)
-
@kierank (68)
-
@vigneshvg (67)
-
@ngaullier (66)
-
@foo86 (65)
-
@j0sh (64)
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
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 -
DE -
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
FFmpeg Docker
Container Info
Ffmpeg
# This container needs special attention. Please check https://hub.docker.com/r/linuxserver/ffmpeg for details.
linuxserver/ffmpeg:latestRun 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
-
Web-based file conversion utility, which runs locally on your device using WebAssembly. Supports 250+ formats across images, audio, documents, and video.
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!