{"id":15373083,"url":"https://github.com/vi/videomedian","last_synced_at":"2026-03-05T00:03:12.263Z","repository":{"id":137140266,"uuid":"79965880","full_name":"vi/videomedian","owner":"vi","description":"Temporal-median noise reduction video filter","archived":false,"fork":false,"pushed_at":"2021-07-13T12:25:18.000Z","size":7,"stargazers_count":3,"open_issues_count":1,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-06-22T18:08:52.597Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-24T23:43:57.000Z","updated_at":"2021-07-13T12:25:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"38c91f56-ccd0-4c0d-88d3-fecebf02b2da","html_url":"https://github.com/vi/videomedian","commit_stats":{"total_commits":8,"total_committers":1,"mean_commits":8.0,"dds":0.0,"last_synced_commit":"967924effa59f6bc2e62a9f48ba21795104d5f3c"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vi/videomedian","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fvideomedian","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fvideomedian/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fvideomedian/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fvideomedian/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vi","download_url":"https://codeload.github.com/vi/videomedian/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fvideomedian/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30101692,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T23:59:36.199Z","status":"ssl_error","status_checked_at":"2026-03-04T23:56:48.556Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-01T13:54:14.032Z","updated_at":"2026-03-05T00:03:12.123Z","avatar_url":"https://github.com/vi.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Note\n\nFFmpeg now seems to have similar filter built-in: [`-vf tmedian`](https://ffmpeg.org/ffmpeg-filters.html#tmedian).\n\n# videomedian\nTemporal-median noise reduction video filter\n\nFor denoising glitched video with heavy, but transient artifacts.\n\n# Usage\n\n    Usage: videomedia w h  y_med u_med v_med \u003c yuv420p \u003e yuv420p\n    \n    Example:\n    \n    ffmpeg -v warning -i big_buck_bunny_480p_stereo.avi -f rawvideo - | videomedian 854 480 7 7 7 | ffplay -v warning -f rawvideo -s 854x480 -\n\n# Limitations\n\n* Slow (qsort call for every byte)\n* Only yuv420p\n* Beginning of video is not processed\n* Stand-alone, not integrated info a framework.\n    * I've also implemented it as filter in FFmpeg: https://github.com/vi/FFmpeg/commits/vf_mediandenoise\n\n# Samples\n\n## Synthetic\n\nQueue size 7 for all planes.\n\n```\n$ ffmpeg -v warning -ss 55 -i big_buck_bunny_480p_stereo.avi -t 3 -s 200x200 -f rawvideo - \u003e 200x200.yuv \n$ cat 200x200.yuv | for((i=0; i\u003c3000; ++i)) { if [ $RANDOM -lt 25000 ] ; then dd bs=1440 iflag=fullblock count=1 2\u003e /dev/null;  else   dd bs=1440 iflag=fullblock of=/dev/null count=1 2\u003e /dev/null;  dd bs=1440 if=/dev/frandom iflag=fullblock count=1 2\u003e /dev/null;   fi } \u003e 200x200_glitch.yuv\n$ cat 200x200.yuv        | videomedian 200 200 7 7 7 | dd iflag=fullblock bs=$((200*300)) skip=7 2\u003e /dev/null \u003e 200x200_filter.yuv\n$ cat 200x200_glitch.yuv | videomedian 200 200 7 7 7 | dd iflag=fullblock bs=$((200*300)) skip=7 2\u003e /dev/null \u003e 200x200_repair.yuv\n```\n\n### Original (`200x200.yuv`)\n\n![200x200](https://cloud.githubusercontent.com/assets/173219/22273126/a4fa3556-e2af-11e6-94ba-fcc523d9de68.gif)\n\n### Filtered (`200x200_filtered.yuv`)\n\n![200x200_filter](https://cloud.githubusercontent.com/assets/173219/22273136/b2186c44-e2af-11e6-9984-f20e728ae776.gif)\n\n\n### Glitched (`200x200_glitch.yuv`)\n\n![200x200_glitch](https://cloud.githubusercontent.com/assets/173219/22273141/b876845e-e2af-11e6-91ca-dc220441713b.gif)\n\n\n### Reparied (`200x200_repair.yuv`)\n\n![200x200_repair](https://cloud.githubusercontent.com/assets/173219/22273146/c11626a0-e2af-11e6-8664-59f09c319dbc.gif)\n\n### ATA (for comparison)\n\n    ffmpeg -f rawvideo -s 200x200 -i 200x200_glitch.yuv -vf atadenoise=s=7:p=7:0a=0:0b=0:1a=0:1b=0:2a=0:2b=0 -y 200x200_atarep.gif\n    \nUnglitched: Glitched:\n\n![200x200_ata](https://cloud.githubusercontent.com/assets/173219/22309436/48e5f98c-e35c-11e6-8494-21e37ef2cff1.gif) ![200x200_atarep](https://cloud.githubusercontent.com/assets/173219/22309447/54623ee2-e35c-11e6-99e8-7ef2920490ad.gif)\n\n## Natural\n\n(only U and V planes, queue size 7)\n\n![sample2](https://cloud.githubusercontent.com/assets/173219/22272605/2148d0f8-e2ac-11e6-8c6e-c919da950d8d.gif) -\u003e ![sample1](https://cloud.githubusercontent.com/assets/173219/22272622/3318de90-e2ac-11e6-9262-3023a55c80ba.gif)\n\nFor comparison, ATA in dumb mode (`0a=0:0b=0:1a=0:1b=0:2a=0:2b=0:s=7:p=6`):\n\n![b_200x200_ata](https://cloud.githubusercontent.com/assets/173219/22309819/f5c3e50a-e35d-11e6-8777-b96a10dba66e.gif)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvi%2Fvideomedian","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvi%2Fvideomedian","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvi%2Fvideomedian/lists"}