Thank you for making and posting the sample.
I was able to view the internet recording using a different browser. Unfortunately it's not the original and is a poorly managed capture and encode. There is no input level control, so that darks and brights are completely blown away for almost the entire length of the video. It's possible to remove some grain, but this would be a very small improvement. No one would want to work on the lossy web version. A chunk of the lossless original might be a different story.
Your exciterepk-excerpt.avi sample is posted as as RGB32 color. Hopefully you are capturing at YUY2 instead of RGB. To avoid unwanted colorspace changes when making samples from YUV captures, save the sample in
VirtualDub using "direct stream copy" processing mode. Any file saved using "Full processing mode" in
VirtualDub is automatically converted to RGB, even if no VirtualDub filters are used. As RGB your sample file size was 63.4MB. As losslessly compressed YUY2 the file size would have been 29MB, and you wouldn't add interpolation errors with unnecessary colorspace conversions.
We have seen far worse tape dubbing in the past, but that doesn't mean the sample is without damage. Previous processing at some point resulted in bad cliipping of darks as well as brights. Clipping involves data destruction. At the bright end there is highlight detail destruction along one bright edge of the yellow furniture. At the dark end there is sharp black clipping indicated by lack of eye color (the irises are black blobs), the lack of detail in the far right background (and discoloration noise in parts of it), total loss of detail in the dark sweater, the "shag carpet" look in the blond hair, and by the characteristic "black mouth" effect. There are also pasty clay-face effects due to overall detail loss.
Lost detail can't be re-created. Clipped blacks can be brightened but they simply look like dense dark grays without color, and over-brightening simply exposes clipped areas as nothing but random noise. There are over-sharpening effects; a bright left-edge halo remains, and there is some faint right-edge noise that looks as if it has been filtered or softened at an earlier stage. Sharpening won't help here -- it would make many defects look worse.
The top image
below is a reduced copy of an original frame from the sample, with side borders removed to prevent affecting the histograms. Below the image, the graphs are of a YUV signal level histogram (left) and a chroma-level YUV vectorscope (right).
Above, look at the
left-hand graph of horizontal colored bands. Notice the sharp "spike" at the leftmost edge of the topmost white band. That spike indicates black clipping of all data below y=16. The horizontal band for the blue-yellow "U" channel shows some yellow chroma data but little or no blue. The bottom red-green "V" channel shows red data but barely a smattering of green. In the
right-hand graph, the vectorscope for saturation levels shows some yellowish-red and orange data, but little or no data for pure red, and a deficit for magenta, blue, cyan, and pure green colors. These graphs explain why there is an obvious red-yellow color cast in the video.
The image below is a VirtualDub RGB vectorscope of the same frame as above. The placement of colors is different, but it confirms the color problems seen in the YUV histogram and vectorscope.
Below, the pictures are a comparison between the borders in an original frame (left) and a filtered and corrected version (right):
Below, an RGB vectorscope showing at least a partial and visible color correction by reducing red-yellow saturation and stretching the very small amount of bluish and green pixels that are available:
In the comparison frames above, note that the original image dimensions are the same in both versions of the frame. In the new frame, the thin side borders are removed and replaced with new black pixels. The thick bottom border of head-switching noise is removed and is replaced by top and bottom pixels that center the image vertically. The method that you described of cropping and then resizing the image alters the original aspect ratio and stretches (distorts) the image vertically. The Avisynth crop and replace method shown in the script below doesn't distort the aspect ratio.
I denoised and resized your original exciterepk-excerptL.avi sample using an Avisynth script. The color correction was done by applying a VirtualDub ColorMill filter to the output of the Avisynth script in Virtualdub. The ColorMill settings that I used were recorded in a VirtualDub .vcf file (the .vcf is attached). If you want to use those setings, download and save the .vcf file. To load the Color Mill filter with the same settings I used, in VirtualDub click "File...", then -> "load processing settings", then locate and select the .vcf file. The same ColorMill .vdf filter must be in your VirtualDub plugins, or the .vcf won't work. ColorMill can be downloaded at
http://www.digitalfaq.com/forum/atta...colormill21zip.
Below is the Avisynth script I applied to get a 59.94fps progressive version of your source (change the path statements to match file locations in your system):
Code:
Import("D:\Avisynth 2.5\plugins\RemoveDirtMC.avs")
AviSource("D:\forum\faq\Towncivilian\exciterepk-excerpt.avi")
AssumeFPS(30000,1001)
AssumeTFF()
ConvertToYUY2(interlaced=true)
SeparateFields()
FixVHSOversharp(20,16,12)
FixVHSOversharpL(20,12,8)
Weave()
Levels(10, 1.0, 255, 16, 255, dither=true, coring=false)
ConvertToYV12(interlaced=true)
QTGMC(preset="medium",EZDenoise=4,denoiser="dfttest",ChromaMotion=true,\
border=true,ChromaNoise=true,DenoiseMC=true,sharpness=0.7)
RemoveDirtMC(30,false)
TemporalSoften(4,4,8,15,2)
ChromaShift(C=2)
Dither_convert_8_to_16 ()
GradFun3(thr=0.8,mask=0,lsb_in=true,lsb=false,smode=1)
MergeChroma(aWarpSharp2(depth=20).aWarpSharp2(depth=10))
AddGrainC(1.25, 1.25)
Crop(0,0,-6,-18).AddBorders(4,8,2,10)
Spline36resize(640,480)
ConvertToRGB32(interlaced=false)
return last
The output is 59.94fps video and 44KHz audio for web mounting. Some websites don't allow double frame rates, so I also prepared a 29.97fps version that discards alternate fields, a method often used on the internet. This method, however, discards 50% of the original temporal resolution. It would not be obvious in many videos, but motion wouldn't look as smoopth with lots of baction or camera pans. You can tell QTGMC to discard alternate fields by changing this line of code:
Code:
QTGMC(preset="medium",EZDenoise=4,denoiser="dfttest",ChromaMotion=true,\
border=true,ChromaNoise=true,DenoiseMC=true,sharpness=0.7)
to this:
Code:
QTGMC(preset="medium",EZDenoise=4,denoiser="dfttest",ChromaMotion=true,\
border=true,ChromaNoise=true,DenoiseMC=true,sharpness=0.7,FPSDivisor=2)
The 59.94 version is attached as excerpt_59.94p.mp4. The 29.97fps version is attached as excerpt_29.97p.mp4.
The script begins by
importing the complete text of code in the RemoveDirtMC.avs plugin. Your avi sample is then opened and decoded with the
AviSource() function. During processing, on final output the frame rate was slightly off, which means that the input frame rate was also slightly off by a few decimal points, so AssumeFPS(30000,1001) corrects that problem. AsssumeTFF() tells Avisynth that the field priority of the interlaced input file is
Top
Field
First.
Because your avi source was in RGB color,
ConvertToYUY2(interlaced=true) converts the colorspace for the first filter used.
SeparateFields() separates each interlaced frame into two half-height images.
FixVHSOversharp has right-edge and left-edge versions for reducing the over-sharpening edge noise and left-edge halo (you can see this on the edges of the sweater). It also slightly softens the over-sharpened source. Then the
Weave() function reweaves the stream of half-height fields into their original interlaced state. Then the Levels() function very slightly brightens the darkest luminance values to help calm the gritty look of dark objects, although the original black clipping can't be corrected at this point.
ConvertToYV12(interlaced=true) prepares the colorspace for the filters that follow.
QTGMC is used here for both deinterlace and for smoothing and denoising that are more thorough than QTGMC's preset defaults.
ChromaShift(C=2) corrects for slight chroma displacement by moving chroma 2 pixels to the right.
RemoveDirtMC and
TemporalSoften help to calm the noise seen in the facial contours when the speaker's head moves. The worst noise is persistent flutter and flicker in the gray background. It's made up of typical simmering VHS schmutz (
https://www.merriam-webster.com/dictionary/schmutz). It required a strong cleaner that won't destroy every detail in sight. The schmutz cleaner I used is
GradFun3, a function in the dither tools package (
http://avisynth.nl/index.php/Dither_tools).
MergeChroma(aWarpSharp2(depth=20).aWarpSharp2(dept h=10)) is used to tidy up color around edges, and then
AddGrainC(1.25, 1.25) adds a small amount of film-like grain to mask some noise in face tones and the large smooth background area.
Crop(0,0,-6,-18) removes dirty and uneven border pixels. Then
AddBorders(4,8,2,10) replaces old pixels with new ones, centers the image, and restores the original frame dimensions.
Spline36resize(640,480) resizes to square-pixel 4x3 dimensions.
Note that if you capture at 720x480 and you want DVD from your source, your source will already have the correct size and interlace structure for DVD or standartd definition BluRay. but must remain deinterlaced and needs resizing for web mounting. If you capture at 640x480, the video needs deinterlacing and cleanup for web mounting, and you will still need to remove bad borders and replace them with new ones to maintain the 4x3 aspect ratio. For DVD or standard def Bluray, the 640x480 original must be deinterlaced, cleaned, cropped and re-bordered, resized to DVD/BluRay spec, and reinterlaced. Thus 720x480 still offers the most flexibility and the best quality for both output formats. 640x480 works for web mounting, but will have poorer quality for optical disc formats.
ConvertToRGB32(interlaced=false) prepares the output for VirtualDub's filters, which work in RGB, and Avisynth's RGB conversion is more precise than with other apps.
Return last outputs the results of the "Last" step performed, which was the conversion to RGB. Note that the interlace state must be specified for all color conversions. At this point in the script the video is not interlaced.