I have a bunch of old VHS tapes that I want to digitize. I have never digitized VHS tapes before. I picked up a generic HDMI capture card, and a generic composite to HDMI converter. Using both of those, I was planning on hooking a VCR up to a computer running OBS. Overall, I’m rather ignorant of the process. The main questions that I currently have are as follows:

  • What are the best practices for reducing the risk of damaging the tapes?
  • Are there any good steps to take to maximize video quality?
  • Is a TBC required (can it be done in software after digitization)?
  • Should I clean the VCR after every tape?
  • Should I clean every tape before digitization?
  • Should I have a separate VCR for the specific purpose of cleaning tapes?

Please let me know if you have any extra advice or recommendations at all beyond what I have mentioned. Any information at all is a big help.

  • ChaoticNeutralCzech
    link
    fedilink
    English
    arrow-up
    4
    ·
    edit-2
    2 months ago

    the composite to HDMI converter has a single switch from 720p to 1080p

    Composite is 480i/60*. That is, 60 times per second a blanking interval occurs, then 240 lines of picture are drawn - either the top (odd) or bottom (even) field. This is neccessary for CRT TVs because a 30Hz refresh rate would cause seizures but drawing all 480 lines 60 times per second would be wasteful. Look it up online for details: if you want videos, I recommend the Television playlist by Technology Connections on YouTube, especially the first video.

    *Technically, the vertical frequency for NTSC is 59.94 Hz (precisely 60000/1001) to avoid interference between color and audio while keeping compatibility with B/W sets. In practice, you should check that the video output is actually at this frequency; if it’s 60 then every 1000th frame will be duplicated - no big deal usually unless this also swaps odd&even fields. No such problem exists for PAL, which was always exactly 50 Hz.

    If the converter only outputs 720p or 1080p (presumably at 60 Hz), all 720/1080 lines are drawn 60 times per second, which means lines are added with some scaling technique, after some kind of deinterlacing happens.

    Deinterlacing is basically a task similar to scaling but with key differences:

    • You only need to extend one dimension and exactly 2×
    • You know what the missing lines looked like 1/60 of a second ago (and 1/60 of a second later), which can be used verbatim or intrapolated from.

    There are various deinterlacing techniques that could be used here:

    • doubling each of the lines for 240p60 video: easiest and best for temporal accuracy but loses half the vertical resolution; good for NES/SNES capture because it’s already 240p60 (using timing tricks to make the CRT draw lines of both fields in identical spots) but most capture devices misinterpret that as 480i60, arbitrarily deciding which of the 240-line frames will be the top field
    • holding the previous two fields for to the next frame for 480p60 video where only every other line changes per frame: good for viewing (this is how playback usually works on progressive-scan monitors) but wasteful for storage, as each field is basically stored twice and compression does not help. Pausing will show two consecutive fields (it will be random whether top or bottom first, depending on the exact frame you pause on) so whatever moved in between will have jagged edges but that’s expected.
    • most common, and likely what your hardware converters do: doing the above but only storing every fully changed frame for 480p30 video: this is terrible for video shot on video cameras because the time difference between fields is not accounted for, and you will see jagged edges for moving objects, or even moiré patterns when scaling. However, this is the best option for PAL film scans because they were shot with 24fps global shutter (and played 4% faster at 25 fps for video purposes) and then scanned interlaced so the top and bottom fields correspond to the same moment in time (as long as the fields are not swapped, which is why capture software usually has that option). For NTSC film scans, 3:2 pulldown is used (each odd frame gets scanned for 3 fields, each even frame for 2 fields to convert 23.976 frames/s to 59.940 fields/s) so this technique needs to be modified to skip the correct one from every 5 fields (or average it with the identical one from 2 fields ago for noise reduction).
    • computation-heavy: guessing what the missing lines of each field would be using some kind of algorithm for 480p60 video: this is a kind of upscaling technique and as such can produce artifacts but they will be better than what you’d get with the above methods. This will probably yield the best results if you NEED the output to be progressive video with limited bitrate, such as uploading to YouTube. This is the best technique if you want to do some AI upscaling (will not add detail but help with sharpness; I recommend it for YouTube uploads because the resulting HD files will be stored at better bitrate - and especially for PAL because 576p is not available on YouTube so uploading at higher resolution is required to get all the scanlines, and YT’s scaling of any kind of interlaced or badly deinterlaced footage introduces moirè.
    • the best: NO deinterlacing! Store the video in an interlaced format because that’s what it is, even though software support is not as good (the software support has always been good with players, and video editors have gotten better but still the capture devices/software often insist that interlaced video could be unsupported and avoid it). You can encode it to MPEG-2 AVIs (terrible option for storage though, bad quality/bitrate ratio) and burn them to a DVD (or use a DVD player’s USB port if present) and connect the DVD player’s composite output (or better, component/SCART at 480i) with a CRT TV for the intended way of viewing interlaced video. Nobody knew about LCDs when this video standard was introduced! (OLEDs can technically be driven interlaced but no controller does that in sync with NTSC as far as I know.) The best DVD players for this are from cca 2010 when USB was commonplace but they have no HDMI which could mean there is an internal scaler or advanced framebuffer (I know a device that recompresses its video output before it goes into the HDMI/composite output module: it’s horrible!). Speaking of codecs, some don’t support interlacing anymore (H.265 for example) so be careful.

    Don’t use the converter if it cannot output 480i or at the very least 480p! Scaling should happen during playback, the files should be original resolution. You can also try non-trivial upscaling with some AI tools (best use them after the “computation-heavy” deinterlacing method, see above) but still DEFINITELY keep the original resolution file for archival.

    use a [separate] worse quality VCR for cleaning

    I don’t have experience with moldy tapes. It might be a good idea but adds wear; I’d just clean the VCR after every tape if I suspect mold. You’d still need to clean the cleaning VCR after every tape to avoid cross-contamination so it would be no easier.

    Is [advanced deinterlacing] possible in OBS?

    Idk, I just keep my files interlaced and stored as high-bitrate H.264 (I don’t have enough computing power to encode sufficiently good bitrate in better codecs). If I wanted deinterlacing, I could process the files with ffmpeg filters or some other tools.

    • Kalcifer@sh.itjust.worksOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      2 months ago

      This was very informative! Thank you for your comment!


      you should check that the video output is actually at [59.94 Hz]

      How does one measure the input frequency of the video feed? I’m not aware of OBS being able to monitor the frequency/refresh-rate of individual input devices, but I could certainly be wrong.


      Don’t use the converter if it cannot output 480i or at the very least 480p! Scaling should happen during playback, the files should be original resolution.

      I looked on Amazon again, and it seems that every converter being sold only outputs 720p, or 1080p — none of them simply repeat the input resolution, eg 480p or 480i. Would you have a converter in mind that would accomplish this?


      I’d just clean the VCR after every tape if I suspect mold. You’d still need to clean the cleaning VCR after every tape to avoid cross-contamination

      Do you have any resources that you would recommend for proper cleaning of a VCR?

      • ChaoticNeutralCzech
        link
        fedilink
        English
        arrow-up
        2
        ·
        2 months ago

        Get an actual composite capture card for the job. HDMI converters are passable for displays and not much else, especially if they insist on scaling to HD. Most generic capture cards will output the correct, interlaced video to your PC. Check community reviews online by people who know what interlacing means. As for a question in your other comment, you then need to check that your software’s video output is interlaced and the correct resolution and frame rate. I use ffprobe (CLI) or MediaInfo (CLI/GUI) to check this.

        The composite signal frequency will be either 50 Hz (SECAM or PAL) or 60000/1001 Hz (NTSC), depending on your region. Some later PAL decks have NTSC playback but you won’t see home NTSC recordings in PAL countries and vice versa unless your family moved. A good capture card driver will let you pick between these three standards and even tell you how many lines of video have been detected. However, this is not necessary as many capture cards will autodetect everything. If the resulting video is B/W, it’s probably an incorrectly set standard (NTSC and PAL encode color slightly differently (PAL is more complicated but more robust) while SECAM does its own very different thing), in which case you MUST find these settings and change them.

        As for cleaning the VCR, I’d just buy a cleaning tape and “play” it for 20-30 seconds, never using the same section twice. If it’s supposed to be wet-cleaning and the isopropyl alcohol has dried up, you need to replenish it - check the attached instructions - and then give the isopropyl-cleaned mechanism a minute to dry up before inserting a videotape! Some people clean heads manually but I’m afraid I’d leave a hair or piece of cotton in the finicky mechanism and ruin everything.

        • Kalcifer@sh.itjust.worksOP
          link
          fedilink
          English
          arrow-up
          1
          ·
          2 months ago

          Get an actual composite capture card for the job.

          Ha, honestly, I wish that I would’ve done this to begin with. It’s way cheaper, and simpler to get the one composite capture card rather than converting composite to HDMI, then capturing HDMI. I’m honestly not entirely sure why I did the latter — perhaps it’s because I was under some presumption that such a device wouldn’t exist (which, now, I realize is an obviously silly assumption to make). I found this one. It’s still just a generic capture card, but it’s a direct composite capture. Do you think that it would suffice?

          • ChaoticNeutralCzech
            link
            fedilink
            English
            arrow-up
            2
            ·
            edit-2
            2 months ago

            Hmmm… It seems to be an EasyCAP clone, there are several devices in this form factor with different chipsets. As far as I’ve looked, they all will stream lossless interlaced video and it’s up to you how to handle it. The “720p” claim in the listing is likely bogus - the seller just misread the actual spec, which is 720x480i for NTSC and 720x576i for PAL. The last time I was capturing video, I used the VirtualDub software, which can store the raw capture in HuffYUV, however OBS can also capture interlaced video with decent compression. This capture device seems to be labeled as “BR116” based on photos in reviews, which can help identifying the chipset. BR116 is sold by Conrad and its manual by them mentions “STK1160” in a screenshot, so this Amazon one most likely also uses the STK1160 chip, which was one of the worst ones in this timebase stability test (which means it has no TBC). However, it’s alright if your VCR is a late model that already does TBC internally.

            • Kalcifer@sh.itjust.worksOP
              link
              fedilink
              English
              arrow-up
              1
              ·
              edit-2
              2 months ago

              It seems to be an EasyCAP clone, there are several devices in this form factor with different chipsets.

              Good to know! That link has a lot of good information.


              This capture device seems to be labeled as “BR116” based on photos in reviews, which can help identifying the chipset. BR116 is sold by Conrad and its manual by them mentions “STK1160” in a screenshot, so this Amazon one most likely also uses the STK1160 chip, which was one of the worst ones in this timebase stability test (which means it has no TBC). However, it’s alright if your VCR is a late model that already does TBC internally.

              Noted! I will keep this in mind.


              I came across this video about digitizing VHS tapes [1]. It talks about hardware to use, and hardware to avoid [1.6]. One of the examples that it gives for hardware to avoid seems to be a clone of the device that I was looking at on Amazon [1.2]. The rationale for why it should be avoided was that it doesn’t pass both fields of the interlaced video through independently [1.1]. Though, you have mentioned that it’s fine to capture the video interlaced, so perhaps this isn’t a big deal-breaker. The capture cards that the video recommends are:

              • IO-Data GV-USB2 [1.3]
              • StarTech.com SVID2USB232 [1.4]
              • Dazzle DVC-100 v1.1 [1.5]
              References
              1. “How to convert VHS videotape to 60p digital video”. The Oldskool PC. YouTube. Published: 2023-02-07. Accessed: 2024-09-14T21:09Z. https://www.youtube.com/watch?v=tk-n7IlrXI4.
                1. T00:03:56
                2. T00:04:08
                3. T00:04:38
                4. T00:04:59
                5. T00:05:19
                6. T00:03:50
              • ChaoticNeutralCzech
                link
                fedilink
                English
                arrow-up
                2
                ·
                edit-2
                2 months ago

                So, uh… The EasyCAP device passes both fields into your PC but the video says that the driver does not interpret them correctly and uses probably the most common, incorrect deinterlacing method (see earlier comment with the method list). It is technically possible to reinterlace the video but I haven’t needed to do that, and you should do so before any lossy encoding to a file. I assume the community-written Linux driver has no such issue.

                The tutorial is mostly correct for people who want to create YouTube uploads with just one program (for YouTube, progressive video is required and the 480p stream cannot be 60 fps and has a terrible bitrate (and 576p for PAL is not available AT ALL so 1080p60 makes sense) but I strongly recommend not deinterlacing nor scaling in OBS, you can do that later. Record 480i (interlaced) files at very high bitrate and perform the deinterlacing in post.

                • Kalcifer@sh.itjust.worksOP
                  link
                  fedilink
                  English
                  arrow-up
                  1
                  ·
                  edit-2
                  2 months ago

                  So, I bought an EasyCap device and ran some tests. I encountered a few things that I don’t quite understand, and I would really appreciate your input!

                  I used a test VHS tape that I purchased at a thrift store (I’m not 100% sure if it’s NTSC or PAL, but I’m decently confident that it’s NTSC) (I’m also not sure what its aspect ratio is — I think it’s either 1.33:1 or 4:3). I’m playing the tape in a PV-D4745S-K VCR. I have the composite out of the VCR going into the aforementioned capture device which is connected to a computer running Arch Linux.

                  First, I used the following ffmpeg capture settings:

                  ffmpeg -i /dev/video2 out.mkv
                  

                  After capturing a short snippet of the test tape, I probed its metadata with ffprobe -i out.mkv, and saw that it was strangely in 25FPS, and 720x576 (which caused the video to be stretched vertically slightly), which is PAL. So, somehow the NTSC VHS being played in an NTSC VCR was being converted to PAL. In addition to that, the colors in the video were very overexposed. I tried a bunch of different manual settings like specifying interlacing with -vf "interlace", -standard ntsc, -vf scale=720:480, -vf fps=29.97, -standard NTSC, and none of them solved the issue. I then came across this answer on StackOverflow which stated that capture cards themselves have settings for the video feed, and ffmpeg can modify them with the -show_video_device_dialog true option. From the ffmpeg documentation:

                  show_video_device_dialog

                  If set to true, before capture starts, popup a display dialog to the end user, allowing them to change video filter properties and configurations manually. Note that for crossbar devices, adjusting values in this dialog may be needed at times to toggle between PAL (25 fps) and NTSC (29.97) input frame rates, sizes, interlacing, etc. Changing these values can enable different scan rates/frame rates and avoiding green bars at the bottom, flickering scan lines, etc. Note that with some devices, changing these properties can also affect future invocations (sets new defaults) until system reboot occurs.

                  Unfortunately, when trying this option, an error popped up saying that the option was unrecognized. After some digging, and prompting ChatGPT, I found that apparently that option is Windows only as it relies on Windows’ “DirectShow system”. The way to modify it in Linux is to use the Video4Linux2 framework, which is controlled with v4l2-ctl. So, I ran the following:

                  v4l2-ctl --device=/dev/video2 --list-formats-ext
                  

                  which showed the following entry:

                  ...
                  [0]: 'YUYV' (YUYV 4:2:2)
                      size: Discrete 720x480
                  ...
                          Interval: Discrete 0.033s (30.000 fps)
                  ...
                  

                  So it is able to output NTSC — ie 720x480 at 29.97fps (I guess it rounds up the fps for whatever reason). So I then tried

                  ffmpeg -f v4l2 -video_size 720x480 -i /dev/video2 out.mkv
                  

                  and it was able to output the video at 720x480 29.97 fps as desired, and the colors were no longer super overexposed. Using the -vf "interlace" flag, I do seem to also be able to capture interlaced video, so it also doesn’t force progressive which is nice.

                  I thought that the capture card would be able to just autodetect what the input resolution was to allow ffmpeg to record at that, or at the very least, I would expect that specifying NTSC in ffmpeg would force the standard, but neither of those worked and I’m not sure why. There’s also still an ongoing issue of the video being zoomed in/cropped slightly (I verified this by comparing against online sources of the same video (some were a VHS rip, others from non-VHS sources)). I tested the VCR’s output on a regular TV, but unfortunately the TV forced 4:3 and cropped it even more, so I wasn’t able to make a perfect comparison, though that was only additional horizontal cropping — the vertical cropping from before was still present. To be able to verify that, I’ll have to pick up another test VHS tape to see if perhaps the test VHS tape that I currently have was just recorded in a cropped format.

                  • ChaoticNeutralCzech
                    link
                    fedilink
                    English
                    arrow-up
                    2
                    ·
                    2 months ago

                    With the interlace filter, make sure you get the field order right. I used not to be so familiar with ffmpeg and I ended up using some GUI program I can’t remember back in the day. See if the driver has an option for no deinterlacing because that happens at driver level.

                    There is no difference between 1⅓:1 and 4:3, they’re just different representations of the same thing. Rounding the ratio to 1.33 produces a negligible difference but I would stick with 4:3 for a simpler pixel aspect ratio of 9:8 (1.125} as opposed to 150:133 (1.12782), assuming the capture is 720x480i60.

                    As for the zoom, TVs will have some overscan because different equipment caused various borders but the capture card should capture all 480 lines. You can check that the output is not vertically scaled by taking a snapshot in a high-movement scene (beware that most image formats are limited to square pixels so better force a PAR of 1:1 for this purpose) and observing if the interlacing indeed causes 1:1 combing as expected. Checking for horizontal crop can be done with another video source (camera, DVD player, STB, game console) generating a test pattern or at least a known image. However, if the vertical scale is correct and the content aspect ratio looks subjectively fine at 4:3 SAR, the crop is most likely OK.