lossless vs corruption
18 0 631
Lossless codecs try to show an animated mandelbrot pattern while getting assaulted with data corruption. Starring: uyvy422, v210, Flash Screen Video, JPEG-LS, Lossless JPEG, Lossless jpeg2000, QuickTime Animation, FFv1 Version 1, Targa, Sun Rasterfile, and huffyuv.
Notes on creating this video: http://gist.github.com/dericed/87dcfc43108bcb00049f
By anonymous 2017-09-20
How to create video and audio noise with
You can use
/dev/urandom to generate video and audio noise (Windows users will have to use the
geq filter as shown below). This is a small screeenshot, but of course the video will not be a static image:
ffmpeg -f rawvideo -video_size 1280x720 -pixel_format yuv420p -framerate 25 \ -i /dev/urandom -ar 48000 -ac 2 -f s16le -i /dev/urandom -codec:a copy \ -t 5 output.mkv
This will create color video noise. If you just want black and white you can add the
ffmpeg -f rawvideo -video_size 1280x720 -pixel_format yuv420p -framerate 25 \ -i /dev/urandom -ar 48000 -ac 2 -f s16le -i /dev/urandom -codec:a copy \ -t 5 -vf hue=s=0 output.mkv
nullsrc video source
According to the documentation:
The nullsrc source returns unprocessed video frames. It is mainly useful to be employed in analysis/debugging tools, or as the source for filters which ignore the input data.
Which basically means that it is useful as a "blank canvas" for other filters, such as the background that will be covered up when placing two videos side-by-side, but when used alone it can create odd somewhat random (but sometimes boring) effects:
ffmpeg -f lavfi -i nullsrc=s=1280x720 -t 60 output.mkv
geq (video "generic equation") filter (with
nullsrc as its "blank canvas") can create video noise similar to the examples above, and the
aevalsrc filter can create white noise audio:
ffmpeg -f lavfi -i nullsrc=s=1280x720 -filter_complex \ "geq=random(1)*255:128:128;aevalsrc=-2+random(0)" \ -t 5 output.mkv
Note that this will create black and white video noise.
Adding random visual noise and errors to an existing video
noise bitstream filter:
Original and screwed up images. The result is very dynamic, so a single image does not fully capture the effect.
ffmpeg -i input.mp4 -codec:v huffyuv -bsf:v noise -codec:a copy noise.mkv
According to the documentation:
A bitstream filter operates on the encoded stream data, and performs bitstream level modifications without performing decoding.
This bitstream filter can accept a value to increase or decrease the amount of noise. It's inverse, so a higher number is less noise, and 1 is the lowest number and therefore the most noise. You will need to experiment to see what works best for you.
This first example stream copied the audio and only glitched the video, but you can apply the filter to both audio and video by removing the stream specifier:
ffmpeg -i input.mp4 -codec:v huffyuv -c:a pcm_s16le -bsf noise=1000000 noise.mkv
Or provide separate values for video and audio:
ffmpeg -i input.mp4 -codec:v huffyuv -c:a pcm_s16le -bsf:v noise=1000000 -bsf:a noise=100 noise.mkv
This seems to work well with
huffyuv for video, and
pcm_s16le for audio, but I recommend experimenting. See lossless vs corruption (notes) for a video showing how different encoders react to noise corruption.
You can then re-encode this to a more portable or common format:
ffmpeg -i noise.mkv -codec:v libx264 -pix_fmt yuv420p output.mkv
Forcing a pixel format
You can lie to ffmpeg and make it think that the colorspace and chroma subsampling is different that it actually is resulting in strange, error-like effects.
Original and screwed up images. The result can be very dynamic, so a single image does not fully capture the effect.
Probe your input.
ffmpeg -i original.mp4
Note the frame rate and video frame size.
ffmpeg -pix_fmtsand choose one of the available formats such as
Create rawvideo and pipe it to another
ffmpeg -loglevel error -i original.mp4 -f rawvideo - | ffmpeg -y -f rawvideo -framerate 25 -video_size 1280x720 -pixel_format yuv420p16le -i - -pix_fmt yuv420p video.mp4
-video_sizevalues were copied from the original input file information shown in the console output of step 1. Of course you can also manipulate these for various effects.
Mux audio if desired
ffmpeg -i video.mp4 -i original.mp4 -map 0 -map 1:a -c copy output.mp4