https://github.com/vi/videomedian
Temporal-median noise reduction video filter
https://github.com/vi/videomedian
Last synced: 4 months ago
JSON representation
Temporal-median noise reduction video filter
- Host: GitHub
- URL: https://github.com/vi/videomedian
- Owner: vi
- License: mit
- Created: 2017-01-24T23:43:57.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2021-07-13T12:25:18.000Z (almost 5 years ago)
- Last Synced: 2025-06-22T18:08:52.597Z (about 1 year ago)
- Language: C
- Size: 6.84 KB
- Stars: 3
- Watchers: 5
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Note
FFmpeg now seems to have similar filter built-in: [`-vf tmedian`](https://ffmpeg.org/ffmpeg-filters.html#tmedian).
# videomedian
Temporal-median noise reduction video filter
For denoising glitched video with heavy, but transient artifacts.
# Usage
Usage: videomedia w h y_med u_med v_med < yuv420p > yuv420p
Example:
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 -
# Limitations
* Slow (qsort call for every byte)
* Only yuv420p
* Beginning of video is not processed
* Stand-alone, not integrated info a framework.
* I've also implemented it as filter in FFmpeg: https://github.com/vi/FFmpeg/commits/vf_mediandenoise
# Samples
## Synthetic
Queue size 7 for all planes.
```
$ ffmpeg -v warning -ss 55 -i big_buck_bunny_480p_stereo.avi -t 3 -s 200x200 -f rawvideo - > 200x200.yuv
$ cat 200x200.yuv | for((i=0; i<3000; ++i)) { if [ $RANDOM -lt 25000 ] ; then dd bs=1440 iflag=fullblock count=1 2> /dev/null; else dd bs=1440 iflag=fullblock of=/dev/null count=1 2> /dev/null; dd bs=1440 if=/dev/frandom iflag=fullblock count=1 2> /dev/null; fi } > 200x200_glitch.yuv
$ cat 200x200.yuv | videomedian 200 200 7 7 7 | dd iflag=fullblock bs=$((200*300)) skip=7 2> /dev/null > 200x200_filter.yuv
$ cat 200x200_glitch.yuv | videomedian 200 200 7 7 7 | dd iflag=fullblock bs=$((200*300)) skip=7 2> /dev/null > 200x200_repair.yuv
```
### Original (`200x200.yuv`)

### Filtered (`200x200_filtered.yuv`)

### Glitched (`200x200_glitch.yuv`)

### Reparied (`200x200_repair.yuv`)

### ATA (for comparison)
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
Unglitched: Glitched:
 
## Natural
(only U and V planes, queue size 7)
 -> 
For comparison, ATA in dumb mode (`0a=0:0b=0:1a=0:1b=0:2a=0:2b=0:s=7:p=6`):
