################################################################################ # FastOverlay 0.3c by demi_alucard # ################################################################################ # Uso: # # video = video principal # # afx = video que você deseja dar overlay # # inicio = inicio do tempo do overlay # # fim = fim do tempo do overlay (opcional) # # Ex: a = AviSource("video.avi") # # b = AviSource("type00.avi") # # FastOverlay(a, b, 150, 300) # # Sobrepõe o vídeo type00.avi em cima do video.avi durante o frame 150 ao 300. # # Observações: # # - Colocar um valor negativo para 'inicio' cortara o começo do clipe afx # # - Caso o valor de inicio não seja especificado, inicio assumirá o valor 0. # # - Caso o valor de fim não seja especificado, fim assumirá o número total de # # frames de afx. Portanto fim é completamente opcional. # ################################################################################ function FastOverlay(clip video, clip afx, int "inicio", int "fim") { inicio = default(inicio, 0) fim = default(fim, inicio+afx.framecount-1) # correção para o problema do frame inicial negativo. aux = (inicio < 0) ? inicio : 0 inicio = (inicio < 0) ? 0 : inicio # correção para o problema do video duplicado. fim = (fim == 0) ? video.framecount-1 : fim # correção para o problema do frame 1 levando à metade do vídeo. antes = (inicio == 1) ? video.Trim(0, -1) : video.Trim(0, inicio-1) middle = video.Trim(inicio, fim) depois = video.Trim(fim+1, 0) # corta o inicio de type caso inicio seja um número negativo afx = (aux == 0) ? afx : afx.Trim(Abs(aux), 0) type = Overlay(middle, afx, mask=afx.ShowAlpha()) return (inicio == 0) ? type++depois : antes++type++depois } ################################################################################ # FastLayer 0.1a by demi_alucard # ################################################################################ # Uso: # # video = video principal # # afx = video que você deseja dar overlay # # inicio = inicio do tempo do overlay # # fim = fim do tempo do overlay (opcional) # # Ex: a = AviSource("video.avi") # # b = AviSource("type00.avi") # # FastLayer(a, b, 150, 300) # # Sobrepõe o vídeo type00.avi em cima do video.avi durante o frame 150 ao 300. # # Observações: # # - Colocar um valor negativo para 'inicio' cortará o começo do clipe afx # # - Caso o valor de inicio não seja especificado, inicio assumirá o valor 0. # # - Caso o valor de fim não seja especificado, fim assumirá o número total de # # frames de afx. Portanto fim é completamente opcional. # ################################################################################ function FastLayer(clip video, \ clip afx, \ int "inicio", \ int "fim") { inicio = default(inicio, 0) fim = default(fim, inicio+afx.framecount-1) video = video.ConvertToRGB32() # correção para o problema do frame inicial negativo. aux = (inicio < 0) ? inicio : 0 inicio = (inicio < 0) ? 0 : inicio # correção para o problema do video duplicado. fim = (fim == 0) ? video.framecount-1 : fim # correção para o problema do frame 1 levando à metade do vídeo. antes = (inicio == 1) ? video.Trim(0, -1) : video.Trim(0, inicio-1) middle = video.Trim(inicio, fim) depois = video.Trim(fim + 1, 0) # corta o inicio de type caso inicio seja um número negativo afx = (aux == 0) ? afx : afx.Trim(Abs(aux), 0) type = Layer(middle, afx) return (inicio == 0) ? (type++depois).ConvertToYV12() \ : (antes++type++depois).ConvertToYV12() } ################################################################################ # SideBySide 0.1 by demi_alucard # ################################################################################ # Uso: # # c = input clip (last) # # type = tipo de alinhamento (0) # # 0- Horizontal # # 1- Vertical # # filters = seus filtros # # Ex: SideBySide("""MipSmooth(preset="AnimeHQ").HQDN3d()""") # ################################################################################ function SideBySide(clip c, \ int "type", \ string "filters") { assert(strlen(filters) > 0, \"Erro: Você tem que adicionar algum filtro a funcao.") type = default(type, 0) source = (type==0) ? c.Crop(0,0,0,Height(c) / 2) : \ c.Crop(0,0,Width(c) / 2,0) source2 = (type==0) ? c.Crop(0,Height(c) / 2,0,0) : \ c.Crop(Width(c) / 2,0,0,0) filtered = (type==0) ? eval("source2."+filters) : \ eval("source2."+filters) cut = (type==0) ? StackVertical(source.Subtitle("Antes"), \ filtered.Subtitle("Depois")) : StackHorizontal(source. \ Subtitle("Antes"), filtered.Subtitle("Depois")) line = (type==0) ? BlankClip(c, height=2, color=$FFFFFF) : \ BlankClip(c, width=2, color=$FFFFFF) final = (type==0) ? Overlay(cut,line, \ y=(Height(c)/2)-1) : \ Overlay(cut,line,x=(Width(c)/2)-1) return final } ################################################################################ # FiltrarSecao 0.1 por demi_alucard # ################################################################################ # Uso: # # c = input clip (last) # # filters = filtros que serão aplicados na seção # # start_frame = frame inicial da seção (0) # # end_frame = frame final da seção (start_frame) # ################################################################################ function FiltrarSecao(clip c, \ string "filters", \ int "start_frame", \ int "end_frame") { start_frame = default(start_frame, 0) end_frame = default(end_frame, start_frame) begin = c.Trim(0, start_frame-1) mid = c.Trim(start_frame, end_frame) end = c.Trim(end_frame+1, 0) return begin ++ Eval("mid."+filters) ++ end } ################################################################################ # # # LAA - LimitedAntiAliasing por demi_alucard # # # ################################################################################ function LAA(clip clp, \ int "ssw", \ int "ssh", \ bool "edge", \ bool "chroma", \ bool "use_nnedi") { ox = clp.width() oy = clp.height() edge = default(edge, true) ssw = default(ssw, 2) ssh = default(ssh, 2) chroma = default(chroma, false) use_nnedi = default(use_nnedi, false) a = clp.isYV12() ? clp : clp.ConvertToYV12() b = use_nnedi ? a.nnedi(threads=2) : a.LanczosResize(ox*ssw, oy*ssh).TurnLeft() \ .SangNom().TurnRight().SangNom().LanczosResize(ox, oy) c = a.mt_edge("prewitt").mt_inflate() d = (edge==false) ? b : mt_merge(a, b, c) return (chroma==false) ? d : mergechroma(d, a) } ################################################################################ # # # ChromaShiftYV12 by demi_alucard # # # # BEWARE: It duplicates the last right/top pixels # ################################################################################ function ChromaShiftYV12(clip c, \ float "chroma_x", \ float "chroma_y") { ox = c.width() oy = c.height() chroma_x = default(chroma_x, 0) chroma_y = default(chroma_y, 0) shift = c.Spline36Resize(-ox, oy, chroma_x, chroma_y, -ox, oy) return MergeChroma(c, shift) }