This page intentionally left blank. ⬇️, ➡️, or spacebar 🛰 to start slidedeck. --- class: middle, center .center[![qctools](/img/QCTools.jpg)] # QCTools --- # What is QCTools? QCTools (Quality Control Tools for Video Preservation) is a free and open source software tool that helps users analyze and understand their digitized video files through use of audiovisual analytics and filtering. QCTools is funded by the National Endowment for the Humanities and the Knight Foundation, and developed by the Bay Area Video Coalition. --- # Why is QCTools important? QCTools allows archivists, curators, preservationists and other moving image professionals to identify, filter, and assess all manner of video errors and anomalies. The tool is flexible, providing a variety of viewing options, as well the ability to create and export reports (gzip, or .gz files, formatted according to the ffprobe xml standard). --- ## Installation Visit https://bavc.org/preserve-media/preservation-tools and download the installer for QCTools for your OS. If you have Homebrew, you can install via: ``` brew tap mediaarea/mediaarea brew install qctools ``` Very recent versions of QCTools can be downloaded via [nightly builds](https://mediaarea.net/download/snapshots/binary/qctools/) or compiled from source on Github. --- # QCTools in action! ![](/img/qct1.png) --- # QCTools in action! ![](/img/qct2.png) --- # Make a test file If you don't have any cool files lying around, just make one: `ffmpeg -f lavfi -i smptebars=r=30000/1001:s=720x480 -c:v dvvideo -pix_fmt yuv411p -t 10 new_file.mov` This makes a file that plays SMPTE bars. .center[![ffmpeg](/img/smpte.png)] --- # Fuzz that test file! Fuzzing intentionally damages a file by adding randomness. We can do this with FFmpeg's `noise` [bitstream filter](http://www.ffmpeg.org/ffmpeg-bitstream-filters.html#noise). `ffmpeg -i new_file.mov -bsf noise -map 0 -c copy fuzzed.mov` .center[![ffmpeg](/img/smpte-fuzzed.png)] --- # Fuzz that test file more! Not enough? You can fuzz it more intensely by adding a number parameter after `noise` `ffmpeg -i new_file.mov -bsf noise=80 -map 0 -c copy super_fuzzed.mov` .center[![ffmpeg](/img/smpte-fuzzed2.png)] --- # Add these files to QCTools: normal .center[![ffmpeg](/img/qct-normal.png)] --- # Add these files to QCTools: fuzzed .center[![ffmpeg](/img/qct-abnormal.png)] --- # Surprise -- they are different But what do all of these charts mean? --- # Y U V - Y = luma (brightness) - U and V = chrominance (color) These filters have subfilters: - MIN = minimum - AVG = average - MAX = maximum - LOW = mostly minimum (the 10th percentile) - HIGH = mostly minimum (the 90th percentile) The bottom two can general covers things outside of legal broadcast range. [docs](http://bavc.github.io/qctools/filter_descriptions.html#yuv) --- # YDiff UDiff VDiff and Diffs These show the difference between a frame and the frame that precedes/follows it. You often get a lot of spikes here when working with edited media because scene changes cause an abrupt switch. So, sharp spikes are usually OK, but wobbly, lingering spikes could indicate a problem. [docs](http://bavc.github.io/qctools/filter_descriptions.html#diff) --- # Sat Sat is short for Saturation. More than 118 is too much. [docs](http://bavc.github.io/qctools/filter_descriptions.html#saturation) --- # Hue Hue captures the overall ~vibe~ of each frame. - green = ~38 degrees - yellow = ~99 degrees - red = ~161 degrees - magenta = ~218 degrees - blue = ~279 degrees - cyan = ~341 degrees [docs](http://bavc.github.io/qctools/filter_descriptions.html#hue) --- To better understand how hue works, this is an approximation of a flattened YUV colorspace, and the somewhat-arbitrarily assigned in radians. .center[![yuv](/img/yuv-flat.png)] --- # TOUT TOUT is short for Temporal Outliers. It finds those annoying speckles in analog video. Results should be in the The range of 0-0.009 and not higher. [docs](http://bavc.github.io/qctools/filter_descriptions.html#tout) --- # VREP VREP is short for Vertical Line Repetitions and checks for repeated frames that occur as a way for a TBC to make up for dropped signal. Too much is bad! Anything above 0.04 should be noted. [docs](http://bavc.github.io/qctools/filter_descriptions.html#vrep) --- # BRNG BRNG is short for Broadcast Range. Anything less than 16 or higher than 235 is abnormal. [docs](http://bavc.github.io/qctools/filter_descriptions.html#brng) --- # CropW, CropH, CropF These can be used to detect pillarboxing using the FFmpeg `cropdetect` feature. [docs](http://bavc.github.io/qctools/filter_descriptions.html#cropw) --- # PSNR, MSE, SSIM PSNR is short for Peak Signal to Noise Ratio. MSE is short for Mean Square Error. SSIM is short for Structural SImilarity Metric. These shouldn't be "too low." If it dips downward notably, its probably worth investigating. [docs](http://bavc.github.io/qctools/filter_descriptions.html#psnrf) --- # idet S, idet M, idet R idet is short for Interlacement Detection. S = Single frame M = Multiple frames R = Repeated fields [docs](http://bavc.github.io/qctools/filter_descriptions.html#singleframe) --- # Audio There are several audio filters too!! For now, check out the docs for more: [docs](http://bavc.github.io/qctools/filter_descriptions.html#r128) --- # Playback Filters Graphs are great, but filters are where it's at! There are a lot, though: Audio Bit Scope, Audio Frequency, Audio Phase Meter, Audio Waveform, Audio Spectrum, Audio Vectorscope, Audio Volume, Audio Waveform, Bit Plane, Bit Plane 10 slices, Bit Plane Noise, Broadcast Illegal Focus, Broadcast Range Pixels, Chroma Adjust, Chroma Delay, CIE Scope, Color Matrix, Corners, Datascope, EBU R128 Loudness Meter, EIA608 VITC Viewer Extract Planes Equalized, Extract Planes UV Equalized, Field Difference, Frame Tiles, Help, Histogram, Limiter, Lines Over Time, Line Select, Luma Adjust, No Display, Normal, Oscilloscope, Pixel Offset Subtraction, Sample Range, Saturation Highlight, Temporal Difference, Temporal Outlier Pixels, Value Highlight, Vectorscope, Vectorscope High/Low, Vertical Line Repetitions, Vertical Repetition Pixels, Vectorscope Target, Waveform, Waveform / Vectorscope, Zoom So this presentation will highlight only some of them. All filters are described in the QCTools [documentation](http://bavc.github.io/qctools/playback_filters.html). --- # Broadcast Range Pixels This highlights pixels that are "out of broadcast range" in a bright color, so they are easily noticeable. ![](/img/qct-brng.jpg) [docs](http://bavc.github.io/qctools/playback_filters.html#broadcast-range-pixels) --- # Histogram This shows how color is distributed across the image, separated by channels (YUV or RGB). ![](/img/qct-hist.jpg) [docs](http://bavc.github.io/qctools/playback_filters.html#histogram) --- # Oscilloscope Replicates an analog oscilloscope. ![](/img/qct-osc.png) ![](/img/analog-osc.jpg) [docs](http://bavc.github.io/qctools/playback_filters.html#oscilloscope) --- # Vectorscope Replicates an analog vectorscope... but better! ![](/img/qct-vec.png) [docs](http://bavc.github.io/qctools/playback_filters.html#vectorscope) --- # Waveform Replicates an analog waveform monitor. But, again, better! ![](/img/waveform.jpg) [docs](http://bavc.github.io/qctools/playback_filters.html#waveform) --- # Also! `qcli` `qcli` is a command line application to generate QCTools reports via the command line. Simple scripts can be built around `qcli` to automate QCTools report generation, which can take some time when working with large files. This task can be run in the background and loaded into any QCTools GUI on any computer, which has the potential to help speed up workflow progress. --- # Also! SignalServer SignalServer is a web app to accompany QCTools for large-scale digitization projects. --- # Installation SignalServer installation instructions are available on github: [https://github.com/bavc/signalserver](https://github.com/bavc/signalserver) --- # SignalServer in action! ![](/img/ss1.png) --- # SignalServer in action! ![](/img/ss2.png) --- # Additional Resources - [QCTools Documentation](http://bavc.github.io/qctools/) - [QCSchool: Introducing qcli](https://bavc.org/blog/qcschool-introducing-qcli) - [Seattle Municipal Archives User Guide](https://github.com/bavc/qctools-documentation/tree/master/SeattleMunicipalArchives) - [QCTools Cheat Sheet](https://github.com/bavc/qctools-documentation/blob/master/qctools/QCToolsWorkshopCheatSheet.pdf) - [A/V Artifact Atlas](https://bavc.github.io/avaa/index.html) - [ffmpeg - signalstats](https://www.ffmpeg.org/ffmpeg-filters.html#signalstats) --- # See also [Home](/)