this post was submitted on 29 Jul 2024
17 points (94.7% liked)

Home Video (VHS, DVD, Blu-ray, 4k)

700 readers
1 users here now

On Reddit we have r/dvdcollection, r/boutiquebluray, r/4kbluray, r/steelbook, r/vhs, etc but let's start simply with a community to cover all the forms of home video collecting.

So, do you feel nostalgic for a format? Are you looking forward to a release? Heard any exciting news? Want to show us your shelves? Then post away.

Elsewhere on the Fediverse:

Chat:

Rules:

founded 1 year ago
MODERATORS
 

I've recently started digitizing my mother-in-law's collection of home movies. What I would love is some recommendations or tweaks I can do to improve the quality and remove any combing or minimize static. I am not particularly concerned with audio quality, but I'll list it below as well.

And so far I'm enjoying the processes. It's really fun to see old videos and to learn a bit about video formats and encoding. I'm an amateur when it comes to these kinds of things so I'm learning as I go along. Each tape I make the picture clearer and the file size smaller!

Recording

  • Sony Handycam (DCR-TRV27)
  • Various DV 60/90 cassette tapes
  • Seemingly ran in standard recording mode (tapes are 60 minutes)

VCR

* I have ordered a A/V to RCA cable which is the manufacturer's recommended connection, but unsure about the effects on quality

Software

  • OBS for recording the VCR feed
    • Downscale Filter: Bicubic (Sharpened scaling, 16 samples)
    • Deinterlace - Linear 2x
    • 720x540 @ 29.97 FPS (NTSC) (upscaled from 720x480)
    • "Indistinguishable Quality, Large File Size"
      • .mkv format with H.264 encoder
    • Audio Encoder AAC
    • Audio 48khz steroe
  • Handbrake for re-encoding
    • 720x480 @ 29.97 FPS
    • H.264 (x264) MKV format
    • No additional deinterlacing
    • "Constant Quality" set to 20
    • Audio Encoder AAC
you are viewing a single comment's thread
view the rest of the comments
[–] shundi82 10 points 3 months ago* (last edited 3 months ago) (2 children)

Professional here, who's been doing it for 20 years as part of his job.

Use your cam's DV in/out port (should be where you'd also find the svideo port according to your cam's manual).

Install a FireWire card into your PC (or an addon card, if you're using a laptop).

Connect both via a FireWire cable (usually 6 pin to 4 pin).

If your tapes are HD, stick to Sony's software.

If your tapes are SD, use ScenAlyzer Live aka sclive (free and will even work on Windows 11, copy the link into your browser, if your app won't open the link - it's very old, so http only):

http://www.scenalyzer.com/

If you want to transfer each tape as one single AVI file, set the Audio sample rate to 44.1 kHz within sclive - that way the audio will match across every frame, no matter how it was recorded. Trust me, it's the only way to not have audio run out of sync once you convert into anything but DV (since DV stores that info within each individual frame, so the video/audio format can change from frame to frame unlike most modern codecs).

Alternatively you can automatically transfer scene by scene and convert each scene's audio sample rate individually before editing/combining them. Just be aware, that in a scene to scene transfer you might end up with >200 scenes per tape. Which would make the next steps harder (or you'd need some batch preprocessing).

Short tldr for the following part, where I just go through my ideal setup without much of a "how to" explanation:

If you're OK with not being up to date and "just" using QTGMC (without the +), here's a tutorial on how to set it all up (only watched the first few minutes, but he sounds competent and the comments are very positive, too):

https://youtube.com/watch?v=C4PyyQoz6eo

End of the tldr.

Next is deinterlacing. And nothing compares to QTGMC+, if you have the patience to set it up:

https://github.com/Dogway/Avisynth-Scripts/tree/master/MIX%20mods

Make sure to also download all the filters it depends on and, of course, setup AVISynth+:

https://github.com/AviSynth/AviSynthPlus/releases

For importing + indexing the DV AVI I prefer LSmash (LWLibAV):

https://github.com/HomeOfAviSynthPlusEvolution/L-SMASH-Works/releases/tag/1194.0.0.0

AVISynth+ will also allow you to deal with crappy DCT artifacts, if you have them (vertical lines and/or blocky/bleeding colors - especially red) by rotating the image by 90°, cleverly blending lines and rotating back 270°.

And really, AVISynth+ is great for every other step, you might want to add:

Denoising via SMDegrain + pre filter, getting more details out of highlights via gamma/levels manipulation, deshake, deflicker, sharpen, dehalo, deringing, crop, trim and of course resizing (there's even more stuff like tossing bad frames and interpolating new clean ones, but you get the idea).

Regarding resizing within AVISynth+: I'm not a fan of artificial upscaling in videos unless I'm desperate (R-ESRGAN etc), so I mostly stick to upscaling via Spline64Resize. It's good, it's fast, it's reliable, it doesn't introduce ringing.

A close second for upscaling would be nnedi3_rpow2. It's usually a teensy bit clearer than Spline64Resize, but extremely slow in comparison (and thus usually not worth it to me, but you might feel differently).

Even though you might hear people say, that upscaling is useless, imho you should always upscale SD material to at least 720p (960x720 at 4:3, 1280x720 at 16:9). For archival stuff I usually go up to 1080p (1440x1080 at 4:3, 1920x1080 at 16:9). It gives you better results at the same bitrate and stuff like -tune grain (see bottom) can really work its magic.

Once you've set everything up and created your script, you just need to pipe the script into the converter of your choice. Most will prefer ffmpeg (I use python to pipe as a watchdog, but that might be too elaborate for your case):

https://www.ffmpeg.org/download.html

There's no one ideal way to convert, but I prefer good + fast + reliable. So h264, default preset (file size will be larger than slow etc, but medium/default has a higher compatibility), -tune grain, -crf 17 to -crf 22 (17 + tune grain: no visible loss, 22 + tune grain: still no discernible visible loss to me at 1080p, just remember: the smaller the number, the larger the file), -movflags faststart.

If you didn't set up your color space/format in AVISynth+ already, set it up in ffmpeg. For the best compatibility I usually go with -pix_fmt yuv420p, but if you'd rather go with 422 or higher, you can do that. Just make sure to take that into account when preprocessing via AVISynth+ or anything else.

For audio I'd go with -acodec aac -ab 192k -ar 48000 -ac 2.

As a container I prefer MP4 over MKV, again for compatibility reasons.

[–] shundi82 3 points 3 months ago* (last edited 3 months ago)

PS: Since AVIs don't store the field order, QTGMC+ will fail at detecting the right field order.

AVISynth+ will assume BFF, which is correct for pretty much any DV (there are very few exceptions). But QTGMC+ will try to be clever and assume the field order on its own. And might determine your field order to be TFF (since that is its default).

If you need it, I'll provide you with a script to change the field order to always be TFF, so QTGMC+ will always work as intended.

As a nice bonus, that way you can also run SMDegrain on the interlaced material, if you don't need heavy prefiltering (making it twice as fast).

[–] shundi82 2 points 3 months ago* (last edited 3 months ago)

OK, followup to my last "PS". Even though no one asked, but I've got some upvotes:

Here's a short function I didn't test extensively (can't post the one I use, because that one's specific to our work and is intertwined with more of our functions like checking a file's extension and properties to automatically determine its field order and if it needs to be deinterlaced):

It worked in a few short tests, so it should be OK, but if anyone notices a problem, feel free to add to that:

function tff_for_all(clip c, string "fieldorder") {
  #Usage if source is TFF: tff_for_all("tff") | else if BFF or unknown (will assume BFF): tff_for_all() or tff_for_all("bff")
  fieldorder = default(fieldorder, "bff")
  c
  fieldorder == "bff" ? propSet("_FieldBased", 1).AssumeBFF().DoubleWeave().SelectOdd() : last
  propSet("_FieldBased", 2).AssumeTFF()
}