VideoHelp Forum


Try DVD-Fab Video Downloader and rip Netflix video! Or Try DVD-Fab and copy Blu-rays! or rip iTunes movies!
+ Reply to Thread
Results 1 to 7 of 7
Thread
  1. Living Oxymoron Pendell's Avatar
    Join Date
    Jun 2017
    Location
    DFW, Texas
    Search Comp PM
    I am doing a transfer job for my family, of a bunch of Digital8 tapes. They range pretty wildly in date, from 2001 to 2006, and I would like it if every time is transitioned to a new day, a datestamp would appear in the bottom right or left of the video for a few seconds, indicating the day of filming.

    The video was imported with WinDV, and I'm using AviSynth+ MT 64-bit version. It would be great if there was an extension I could use which could do this automatically, but if I need to insert the datestamps manually at certain frames, I suppose I could do that if someone told me how, haha.
    Quote Quote  
  2. aBigMeanie aedipuss's Avatar
    Join Date
    Oct 2005
    Location
    666th portal
    Search Comp PM
    you'll pretty much have to make your own. it's easy to make srt subs. use notepad or another text editor. the format is.

    sub # - 1,2,3,etc.
    time - 00:00:10,000 > 00:00:20,500 (Hour, Minutes, Seconds, Milliseconds)
    text - what you want displayed
    followed be a blank line in between each sub


    as in
    1
    00:00:10,000 > 00:00:20,500
    date - 10/08/1998


    2
    00:00:57,000 -> 00:01:07,250
    date - 11-12-1998


    etc.






    save as .srt with the same file as your video - name.avi and name.srt


    send both srt and video together or use mkvtoolnix to mux them into a single mkv file.
    --
    "a lot of people are better dead" - prisoner KSC2-303
    Quote Quote  
  3. Or use AviSynth's Subtitle filter to do the job.
    Quote Quote  
  4. There is an old avisynth 2.5 plugin called DVInfo that can read the embedded recording date information . I just tested it on some DV files and it works ok in avisynth 2.6 or avisynth+ 3.2 x64 with mp_pipeline. It would save time from manually creating them. You can toggle them on/off over sections by using remapframes or trim or similar methods

    https://forum.doom9.org/showthread.php?t=61688

    The last post has a live link to the newest version
    https://forum.doom9.org/showthread.php?p=1740824#post1740824
    Quote Quote  
  5. Living Oxymoron Pendell's Avatar
    Join Date
    Jun 2017
    Location
    DFW, Texas
    Search Comp PM
    Originally Posted by poisondeathray View Post
    There is an old avisynth 2.5 plugin called DVInfo that can read the embedded recording date information . I just tested it on some DV files and it works ok in avisynth 2.6 or avisynth+ 3.2 x64 with mp_pipeline. It would save time from manually creating them. You can toggle them on/off over sections by using remapframes or trim or similar methods

    https://forum.doom9.org/showthread.php?t=61688

    The last post has a live link to the newest version
    https://forum.doom9.org/showthread.php?p=1740824#post1740824
    Alright, I found 2 plugins that seem to be able to do what I want - the DVInfo you mentioned, and DVTimeStampEx. Both of them seem to be 32-bit plugins. I don't really know how to use this MP_Pipeline thing, I downloaded 0.22, and according to the text in the readme.md I put the 64-bit dll in the plugins64+ folder, and the 32-bit .dll in the plugins+ folder. Trying to read the included .avs file to understand all the functions is like trying to read Hebrew.

    I'm also not aware of the remapframes or trim function. Sorry, I'm still an absolute newb at AviSynth and really have no prior coding experience, and there's not really a definitive resource explaining how AviSynth works in good detail - even their own wiki is just vaguely helpful at explaining the broadest workings of it.

    My current script looks like this:

    Code:
    SetFilterMTMode("QTGMC", 2)
        FFmpegSource2("dv-source.avi", atrack=1)
        ConvertToYV12()
        AssumeBFF()
        QTGMC(preset="Slower",EdiThreads=2)
        Spline64Resize(960,720)
        TemporalDegrain2(grainLevel=True)
        Prefetch(6)
    This script is then encoded to an MP4 through FFMPEG.

    I was only using TemporalDegrain2 because it was available for 64-bit, but if MP_Pipeline enables the use of 32-bit plugins, I would like to switch to SMDegrain as well as using one of these datestamping plugins, since TemporalDegrain2 is not very useful at all in removing the video noise. It would also be nice to choose the font and color of the datestamp, but I don't know if either plugin supports that. I guess I'll take what I can get.
    Quote Quote  
  6. Originally Posted by Pendell View Post

    Alright, I found 2 plugins that seem to be able to do what I want - the DVInfo you mentioned, and DVTimeStampEx. Both of them seem to be 32-bit plugins. I don't really know how to use this MP_Pipeline thing, I downloaded 0.22, and according to the text in the readme.md I put the 64-bit dll in the plugins64+ folder, and the 32-bit .dll in the plugins+ folder. Trying to read the included .avs file to understand all the functions is like trying to read Hebrew.
    For a x64 avs+ host, you would use the 4 files in the unzipped mp_pipeline x64 folder . Copy/post them to the plugins folder to autoload . For most people that would be the plugins64+ folder. There are slightly different setups people have for avisynth+ (slightly different folder organization or names)

    The unzipped mp_pipeline x86 folder is for x86 host (using x64 plugins in a x86 host) . Same thing there, 4 files into the x86 plugins folder

    I should mention that you need both avisynth versions to be working for mp_pipeline. For this old .dll the x86 version relies on old 2.5. header, so the avisynth x86 version must be 2.6 (classic or MT) installed, not avisynth+ x86. It's as simple as switching the avisynth.dll in the Windows\SysWOW64 directory for avisynth x86.

    EDIT: apparently you can load different versions of avisynth.dll's in the mp_pipeline blocks

    ### dll: avisynth.dll
    # you can use a different version of avisynth to run script block, just specify path to the avisynth dll like the line above

    I'm also not aware of the remapframes or trim function. Sorry, I'm still an absolute newb at AviSynth and really have no prior coding experience, and there's not really a definitive resource explaining how AviSynth works in good detail - even their own wiki is just vaguely helpful at explaining the broadest workings of it.
    The documentation could be better, with more examples, but you can learn this pretty easily . If you're stuck, just ask someone will help


    Code:
    My current script looks like this:
    
    
    Code:
    SetFilterMTMode("QTGMC", 2)
        FFmpegSource2("dv-source.avi", atrack=1)
        ConvertToYV12()
        AssumeBFF()
        QTGMC(preset="Slower",EdiThreads=2)
        Spline64Resize(960,720)
        TemporalDegrain2(grainLevel=True)
        Prefetch(6)
    This script is then encoded to an MP4 through FFMPEG.
    It should be ConvertToYV12(interlaced=true)

    You enclose x64 or x86 segments in section like this. eg. This would "sandwich" an x86 filter inbetween 2 x64 filters . Everything is enclosed in MP_Pipeline(""" and """)

    Code:
    MP_Pipeline("""
    
    ### platform: win64
    #your x64 filter here
    ### ###
    
    ### platform: win32
    #your x86 filter here
    ### ###
    
    ### platform: win64
    #your x64 filter here
    ### ###
    
    """)
    But mp_pipeline has it's own threading model and chunking. It might not work well with prefetch(x) , or it takes a lot of testing (e.g. with avsmeter64) to get the ideal settings. It can cause thrashing an severe speed penalties.

    It will take some planning for where the ideal place for stamping is, because if you do it earlier, QTGMC will deinterlace it (QTGMC is good, but there is potential for some artifacts when stuff moves "underneath", it can confuse motion vectors). It might be better to overlay onto alpha channel clip, then overlay that at the end , I'll think about it


    I was only using TemporalDegrain2 because it was available for 64-bit, but if MP_Pipeline enables the use of 32-bit plugins, I would like to switch to SMDegrain as well as using one of these datestamping plugins, since TemporalDegrain2 is not very useful at all in removing the video noise. It would also be nice to choose the font and color of the datestamp, but I don't know if either plugin supports that. I guess I'll take what I can get.
    MP_pipeline enables using 32bit plugins in a x64 host or vice versa. It works with most plugins (not all). You can pass back and forth between x64, x86

    I don't understand - SMDegrain works with x64 natively

    Dvinfo supports font,color, position options

    Code:
    DVInfo (clip, string "filename", string "output", int "x", int "y", string "font", int "size", int "text_color", int "halo_color", string "rec_format", string "tc_format", bool "show_error", float "threshold", int "autoframes", string "fix_format")

    EDIT: yes the default top left position has significant artifacts when stuff moves underneath. If you set QTGMC(border=true), it will reduce the amount of artifacts (this is one of the "shortcut" settings different than it's precursor tempgaussmc_beta )


    Something like this works

    Code:
    MP_Pipeline("""
    
    ### platform: win32
    LoadPlugin("PATH\dvinfo.dll")
    FFVideoSource("PATH\Video.avi")
    ConvertToYV12(interlaced=true)
    DVInfo("PATH\Video.avi")
    ### ###
    
    ### platform: win64
    AssumeBFF()
    QTGMC(preset="Slower",EdiThreads=2, border=true)
    SMDegrain()
    Spline64Resize(960,720)
    ### ###
    
    """)
    Getting the "ideal" mp_pipeline multithreading speed in terms of branches, chunks, prefetch values is something you have to experiment with (avsmeter64)
    Last edited by poisondeathray; 20th Dec 2020 at 18:50.
    Quote Quote  
  7. The external .dll load method works if you have an incompatible avisynth x86 version installed. Do not use quotation marks for the path. It would look like this

    ### dll: PATH\avisynth.dll

    A clean mask "msk" is generated by using the same plugin (to prevent QTGMC interfering with the overlay) , by setting one instance of the color and the halo outline color to white, then expanding that to full range Y (a full black,white 0,255) . The second instance "d" is the one you change for color and halo color. If you change parameters like font, x,y position, size, etc... you must do the same for both lines; just don't change the colors for the mask layer

    The remapframes syntax is given in the documentation. You enter the frames to replace in your clean version with the overlaid version. In the example below 100 to 150, 300 to 350, 600 to 700 inclusive would have the overlay. You can use an editor like avspmod to preview and make adjustments. Each carriage return has an entry.

    It's a slow script with very low CPU% usage. You can try fiddling with the internal branch and prefetch parameters to speed it up. External prefetch almost always slows things down and causes thread thrashing. If it were me, I would run multiple instances in parallel

    Code:
    MP_Pipeline("""
    
    ### platform: win64
    
    FFVideoSource("PATH\Video.avi")
    ConvertToYV12(interlaced=true)
    AssumeBFF()
    a=last
    
    b=blankclip(a)
    
    a
    QTGMC(preset="Slower",EdiThreads=2)
    SMDegrain()
    bg=last
    
    ### export clip:  b,bg
    
    ### ###
    
    ### platform: win32
    
    ### dll: PATH\avisynth.dll
    
    LoadPlugin("PATH\dvinfo.dll")
    
    msk = b.DVInfo("PATH\Video.avi", text_color=$FFFFFF, halo_color=$FFFFFF).levels(16,1,235,0,255,false).changefps(b.framerate*2) #mask clip, full range Y, changefps for double rate to match QTGMC double rate
    
    d = b.DVInfo("PATH\Video.avi").changefps(b.framerate*2)#overlay clip, use whatever colors,  changefps for double rate to match QTGMC double rate
    
    ### export clip:  d,msk
    ### pass clip:  bg
    
    ### ###
    
    ### platform: win64
    
    date = mt_merge(bg, d, msk, luma=true)
    
    RemapFrames(bg, mappings="[100 150] [100 150]
    [300 350] [300 350]
    [600 700] [600 700]", sourceclip=date)
    
    Spline64Resize(960,720)
    
    """)
    Quote Quote  



Similar Threads