VideoHelp Forum

Our website is made possible by displaying online advertisements to our visitors.
Please consider supporting us by disabling your ad blocker or buy PlayOn and record Netflix! :)
+ Reply to Thread
Results 1 to 10 of 10
Thread
  1. Member
    Join Date
    Aug 2007
    Location
    Europe
    Search Comp PM
    Hi,

    I have a DVD made by a colleague but I don't know which tool he has used but the encoding is very bad, not in term of video quality (more than bad but due to the source) but due to the MPEG encoding.
    If I try to rip it with AVIdemux, I get regularly some video and audio freeze.

    Original VOB: https://share.orange.fr/#CGVqdSn5GK35cfa6f18b
    Example of freeze (at 17 s and after): https://share.orange.fr/#D5iWeqTRAE35cfa6f325

    Could you help me?
    I have tried virtualdub, VLC: nothing to correct the MPEG file.

    Thanks for your help
    Rmanal
    Quote Quote  
  2. Member
    Join Date
    May 2014
    Location
    Tennessee, US
    Search Comp PM
    If your VOB is smaller than 500mb, you can post directly to this forum. If you want to make a smaller sample, here is how to use DGIndwex ro make and post it https://forum.videohelp.com/threads/359295-Record-without-interlacing?p=2272359&viewfu...=1#post2272359. --so that readers don't have to navigate incredibly slow foreign-language host sites that force users to search for invisible download controls:

    Offhand, from the streaming FLV on the host site, I don't see much hope. Better encoding won't "improve" an ugly source. Better encoding simply shows an ugly video as-is. Also, MPEG is lossy encoding. Lossy encoding loses a certain amount of data from the original source. After that data is lost, it can't be recovered.
    Last edited by LMotlow; 26th Nov 2017 at 08:25.
    - My sister Ann's brother
    Quote Quote  
  3. Explorer Case's Avatar
    Join Date
    Feb 2004
    Location
    Middle Earth
    Search Comp PM
    After fixing the timecode breaks with MPEG Streamclip, the fixed file plays without freezing and converts fine on my side.
    Last edited by Case; 26th Nov 2017 at 15:46.
    Quote Quote  
  4. Try VOB2MPG with the original VOB set (including IFO files). Programs can usually handle MPG better than VOB. That might be enough for AviDemux to handle the video properly.

    And you need to deinterlace your video before encoding progressive. Or encode interlaced so the player can deinterlace at playback.
    Quote Quote  
  5. Member
    Join Date
    May 2014
    Location
    Tennessee, US
    Search Comp PM
    The attached "Li'l Better" mp4 plays a li'l better.
    Sample frames below: original (left image) -vs- Li'l Better (right image):




    But still looks awful. Garbage In = garbage out.
    Image Attached Files
    - My sister Ann's brother
    Quote Quote  
  6. Member
    Join Date
    Aug 2007
    Location
    Europe
    Search Comp PM
    Hi all

    LMotlow: seems very better
    How have you done that? Could you explain to a noob?

    Thx a lot for your support
    Rmanal
    Quote Quote  
  7. Member
    Join Date
    May 2014
    Location
    Tennessee, US
    Search Comp PM
    I used Avisynth for the heavy work, then applied Virtualdub's ColorMill to the Avistynth script output for levels and color to boost midtones and lower the darkest blacks.

    First thing I did was open the VOB in Virtualdub and save the audio track as a resampled WAV file. Next, I made a d2v project file from the VOB with DGIndex. Then I ran the following script, which processes only the brighter part of the VOB sample (the entire VOB takes too long). I would process the darker parts separately and increase the "enhance" value of the ContrastMask for darker parts.


    Code:
    Import("Drive:\Avisynth\plugins\FixRipsP2.avs")
    Import("Drive:\Avisynth\plugins\RemoveDirtMC.avs")
    
    vid=MPEG2Source("Drive:\path\VTS_01_2.d2v")
    aud=WavSource("Drive:\path\VTS_01_2.wav")
    AudioDub(vid,aud)
    Trim(3093,3974)
    ContrastMask(6.0)
    ColorYUV(Cont_y=20,off_y=-10,off_v=-4,off_u=-3)
    SmoothLevels(16,1.0,255,16,235,protect=6)
    Crop(18,0,-20,-12,true).AddBorders(10,4,12,8)
    AssumeTFF()
    SeparateFields()
    RemoveDirtMC(40,false)
    FixRipsP2()
    TemporalDegrain(SAD1=100, SAD2=100, Sigma=4)
    AddGrainC(2.5,2.5)
    Weave()
    ### -----------------------------------------
    ### ----- to RGB for VirtualDub filters -----
    ConvertToRGB32(interlaced=true,matrix="Rec601")
    return last
    Below is the FixRipsP2 filter, which I save in my plugins as FixRipsP2.avs. Be careful with this filter, it's destructive and can smear or obscure objects with really bad video. And it's slow. Really sloooow:

    Code:
    # ################ FixRipsP2 function, modified from poisondeathray median filter ######################################
    # https://forum.videohelp.com/threads/343296-Transfer-of-real-bad-tape-to-pc-and-restore?p=2139402&viewfull=1#post2139402
    #
    # required support plugins:
    # - RemoveGrain package or RgTools.dll
    # - DePan (with DepanEstimate & DePanInterleave)
    # - MvTools
    # - MaskTools
    #
    # ########################### for progressive video or SeparateFields() ################################################
    
    function FixRipsP2(clip a)
    {
    a
    clense(reduceflicker=false).merge(last,0.5).clense(reduceflicker=false)
    mot=removegrain(11,0).removegrain(20,0).DepanEstimate(range=2)
    take2=a.depaninterleave(mot,prev=2,next=2,subpixel=2)
    clean1=take2.TMedian2().selectevery(5,2)
    
    sup1 = clean1.minblur(1).removegrain(11,0).removegrain(11,0)
     \           .mt_lutxy(clean1,"x 1 + y < x 2 + x 1 - y > x 2 - y ? ?",U=2,V=2)
     \           .msuper(pel=2,sharp=0)
    sup2 = a.msuper(pel=2,levels=1,sharp=2)
    
    bv22=sup1.manalyse(isb=true, truemotion=false,global=true,delta=2,blksize=16,overlap=8,search=5,searchparam=4,DCT=5)
    bv21=sup1.manalyse(isb=true, truemotion=false,global=true,delta=1,blksize=16,overlap=8,search=5,searchparam=4,DCT=5)
    fv21=sup1.manalyse(isb=false,truemotion=false,global=true,delta=1,blksize=16,overlap=8,search=5,searchparam=4,DCT=5)
    fv22=sup1.manalyse(isb=false,truemotion=false,global=true,delta=2,blksize=16,overlap=8,search=5,searchparam=4,DCT=5)
    
    interleave(a.mcompensate(sup2,fv22),a.mcompensate(sup2,fv21),a,a.mcompensate(sup2,bv21),a.mcompensate(sup2,bv22))
    TMedian2().selectevery(5,2)
    
    sup3 = last.msuper(pel=2,sharp=2)
    bv33=sup3.manalyse(isb=true, truemotion=false,global=true,delta=3,blksize=8,overlap=4,search=5,searchparam=4,DCT=5)
    bv32=sup3.manalyse(isb=true, truemotion=false,global=true,delta=2,blksize=8,overlap=4,search=5,searchparam=4,DCT=5)
    bv31=sup3.manalyse(isb=true, truemotion=false,global=true,delta=1,blksize=8,overlap=4,search=5,searchparam=4,DCT=5)
    fv31=sup3.manalyse(isb=false,truemotion=false,global=true,delta=1,blksize=8,overlap=4,search=5,searchparam=4,DCT=5)
    fv32=sup3.manalyse(isb=false,truemotion=false,global=true,delta=2,blksize=8,overlap=4,search=5,searchparam=4,DCT=5)
    fv33=sup3.manalyse(isb=false,truemotion=false,global=true,delta=3,blksize=8,overlap=4,search=5,searchparam=4,DCT=5)
    
    last.mdegrain3(sup3,bv31,fv31,bv32,fv32,bv33,fv33,thSAD=499)
    
    interleave()
    return last
    }
    
    
    function MinBlur(clip clp, int r, int "uv")
    {
    uv   = default(uv,3)
    uv2  = (uv==2) ? 1 : uv
    rg4  = (uv==3) ? 4 : -1
    rg11 = (uv==3) ? 11 : -1
    rg20 = (uv==3) ? 20 : -1
    medf = (uv==3) ? 1 : -200
    
    RG11D = (r==0) ? mt_makediff(clp,clp.sbr(),U=uv2,V=uv2)
     \    : (r==1) ? mt_makediff(clp,clp.removegrain(11,rg11),U=uv2,V=uv2)
     \    : (r==2) ? mt_makediff(clp,clp.removegrain(11,rg11).removegrain(20,rg20),U=uv2,V=uv2)
     \    :          mt_makediff(clp,clp.removegrain(11,rg11).removegrain(20,rg20).removegrain(20,rg20),U=uv2,V=uv2)
    RG4D  = (r<=1) ? mt_makediff(clp,clp.removegrain(4,rg4),U=uv2,V=uv2)
     \    : (r==2) ? mt_makediff(clp,clp.medianblur(2,2*medf,2*medf),U=uv2,V=uv2)
     \    :          mt_makediff(clp,clp.medianblur(3,3*medf,3*medf),U=uv2,V=uv2)
    DD    = mt_lutxy(RG11D,RG4D,"x 128 - y 128 - * 0 < 128 x 128 - abs y 128 - abs < x y ? ?",U=uv2,V=uv2)
    clp.mt_makediff(DD,U=uv,V=uv)
    return(last)
    }
    
    # median of 5 clips from helpers.avs by G-force
    function Median2(clip "input_1", clip "input_2", clip "input_3", clip "input_4", clip "input_5", string "chroma")
    {
    chroma = default(chroma,"process") #default is "process". Alternates: "copy first" or "copy second"
    #MEDIAN(i1,i3,i5)
    Interleave(input_1,input_3,input_5)
    chroma == "process" ? Clense(reduceflicker=false) : Clense(reduceflicker=false,grey=true)
    m1 = selectevery(3,1)
    #MAX(MIN(i1,i3,i5),i2)
    m2  = input_1.MT_Logic(input_3,"min",chroma=chroma).MT_Logic(input_5,"min",chroma=chroma).MT_Logic(input_2,"max",chroma=chroma)
    #MIN(MAX(i1,i3,i5),i4)
    m3  = input_1.MT_Logic(input_3,"max",chroma=chroma).MT_Logic(input_5,"max",chroma=chroma).MT_Logic(input_4,"min",chroma=chroma)
    Interleave(m1,m2,m3)
    chroma == "process" ? Clense(reduceflicker=false) : Clense(reduceflicker=false,grey=true)
    selectevery(3,1)
    chroma == "copy first" ? last.MergeChroma(input_1) : chroma == "copy second" ? last.MergeChroma(input_2) : last
    Return(last)
    }
    
    function TMedian2(clip c) {
    Median2(c.selectevery(1,-2), c.selectevery(1,-1), c, c.selectevery(1,1), c.selectevery(1,2) ) }
    Attached are the versions of ContrastMask and RemoveDirtMC that I used.
    Image Attached Files
    Last edited by LMotlow; 27th Nov 2017 at 13:07. Reason: I swear these typos are created after posting. Bigley.
    - My sister Ann's brother
    Quote Quote  
  8. Member
    Join Date
    Aug 2007
    Location
    Europe
    Search Comp PM
    Your expertise is too far from my knowledge
    Thank you very much, If I have time, I will try
    Quote Quote  
  9. Member
    Join Date
    May 2014
    Location
    Tennessee, US
    Search Comp PM
    The first Avisynth scirpt shown near the top of post #7 is a fairly typical script that imports some filter plugins, opens a video for filtering, and executes some Avisynth filter plugins. The script is opened in VirtualDub and saved as a new lossless AVI using VirtualDub controls. The Avisynth script at the bottom of post #7 was not designed by me (it's 'wsy too complicated!) but was written by Avisynth developers. The script's name is FixRipsP2. It can be copied and pasted into a text file and saved as an avisynth plugin. It's a filter executed by the shorter script.

    Yes, Avisynth has a learning curve but it's manageable. It far outpaces VirtualDub or video editors for cleanup work. Most users learn it by following forum threads, looking at the way sample scripts are used, reading forum articles on what the filters are designed to do, and following documentation that comes with the plugins.
    - My sister Ann's brother
    Quote Quote  
  10. Member
    Join Date
    Aug 2007
    Location
    Europe
    Search Comp PM
    For instance handbarke works perfectly, without correction.
    Thx for that
    Quote Quote  



Similar Threads