Anfo-Event.pl • Zobacz wątek - [Techniczne] krojenie obrazu na części i ponowne składanie

Teraz jest 10 gru 2022, o 06:56

Strefa czasowa: UTC + 1 [ DST ]





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
 Tytuł: [Techniczne] krojenie obrazu na części i ponowne składanie
PostNapisane: 14 lis 2010, o 04:02 
Przelotem

Dołączył(a): 19 sty 2009, o 02:03
Posty: 6
Offline
Witam serdecznie,
mam pewien ogólny problem techniczny z którym bezskutecznie walczę od kilku dni.

Chcę zrobić rekompresję video z pliku MKV(x264) gdzie obraz będzie podzielony fragmentami, gdyż filtry AVISynth które stosuję nie nadają się do całości materiału, a tylko do wybranych części. Wszystkie fragmenty będą po kolei scalone, stanowiąc całość obrazu.

Potrzebuję pomocy, aby poprawnie zbudować/poprawić mój skrypt AVS, w którym będę mógł samodzielnie sterować (w zależności od fragmentu) doborem filtrów AVISynth. Poniżej skrypt, który obecnie stosuję:

Kod:
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\VSFilter.dll")
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\DGAVCDecode.dll")
Import("C:\Program Files\AviSynth 2.5\plugins\LSFmod.v1.9.avsi")
Import("C:\Program Files\AviSynth 2.5\plugins\GradFunkMirror.avsi")
Import("C:\Program Files\AviSynth 2.5\plugins\Toon-v0.8.avs")

Default = AVCSource("C:\Users\Robert\Desktop\RAW.dga").Tweak(sat=1.07,bright=-2).Levels(1,1.000,255,0,255).UnDot().
MSmooth(mask=false,threshold=1,strength=1).lsfmod().Toon()

# Unband = GradFunkMirror(Default)
# GrainRemove = fft3dfilter(sigma=1.25, bt=4, bw=32, bh=32, ow=16, #oh=16,sharpen=0.6)
#Text = TextSub("D:\Skrypty\Opening.ass").TextSub("D:\Skrypty\Ending-gotowy.ass").TextSub("D:\Skrypty\dialogi - do kodowania.ass")

Default.Trim(0,115).GradFunkMirror().TextSub("D:\Skrypty\Opening.ass").TextSub("D:\Skrypty\Ending-gotowy.ass")
.TextSub("D:\Skrypty\dialogi - do kodowania.ass").fft3dfilter(sigma=1.25, bt=4, bw=32, bh=32, ow=16, oh=16,sharpen=0.6)
+ Trim(Default,582,19080).GradFunkMirror().TextSub("D:\Skrypty\Opening.ass").TextSub("D:\Skrypty\Ending-gotowy.ass")
.TextSub("D:\Skrypty\dialogi - do kodowania.ass")
Przykładowe klatki kluczowe I biorę z podglądu obrazu MKV w Avidemux.

Jak widać z powyższego skryptu zrobiłem sobie zmienną o nazwie Default - służy ona do łądowania projektu dga utworzonego za pomocą DGAVCDecode + zestawu filtrów które zawsze chcę stosować do całości materiału video.

Dodatkowo chciałbym jeszcze skorzystać z filtrów GradFunkMirror, fft3dfilter oraz TextSub(wszystkie w komentarzu). Dlatego też pomyślałem sobie żeby zrobić odpowiednio zmiennie np. Unband (GradFunkMirror), GrainRemove(fft3dfilter) i Text(funkcja TextSub użyta 3x dla 3 różnych plików ASS). Na koniec, chcę aby do każdej funkcji Trim przy złączeniach fragmentów zawsze była dodana zmienna Default razem ze zmienną Text i w zależności od fragmentu żebym mógł sam zdecydować czy dodatkowo dodać zmienną Unband lub GrainRemove.

Niestety, ale przy próbie zrobienia np. Default.Trim(0,115).Uband.GrainRemove AVISynth pokazuje mi błąd z informacją, że nie wie co to jest funkcja Unband oraz GrainRemove. W przypadku funkcji Text również nie chce dodać na raz do materiału video 3 plików ASS - więc musiałem na końcu łańcucha przy funkcji Trim dodać każdy filtr osobno.

Prośba o pomoc w jaki sposób zaimplementować proponowane zmiany, gdyż skrypt na pewno będzie miał sporo linijek Trim a w obecnej wersji będzie mało przejrzysty, wygodny w edycji a co najważnejsze mało efektywnie działał.


Góra
 Zobacz profil  
 
 Tytuł: Re: [Techniczne] krojenie obrazu na części i ponowne składan
PostNapisane: 17 lis 2010, o 20:19 
Rezydent

Dołączył(a): 17 sty 2009, o 21:23
Posty: 80
Lokalizacja: group formerly known as GLS
Offline
Takie rzeczy to nie w avisynthie, albo ja o czymś nie wiem ;)

Tak na szybko:

Kod:
# Unband = GradFunkMirror(Default)
# GrainRemove = fft3dfilter(sigma=1.25, bt=4, bw=32, bh=32, ow=16, #oh=16,sharpen=0.6)
#Text = TextSub("D:\Skrypty\Opening.ass").TextSub("D:\Skrypty\Ending-gotowy.ass").TextSub("D:\Skrypty\dialogi - do kodowania.ass")


Te linie przypisują do zmiennych *wartości* clip zwracane przez wywołanie odpowiednich metod na jakimś domyślnym clipie (tym co jest aktualnie pod last? nie wiem, nie pamiętam). Więc Unband i GrainRemove to nie są w tym wypadku aliasy funkcji, tylko clipy, i nic dziwnego, że ci to nie działa.

Jeżeli chcesz coś takiego zrobić, zdefiniuj sobie odpowiednie funkcje, coś w stylu...

Kod:
function GrainRemove(clip c, float sig, float shr) {
   return c.fft3dfilter(sigma=sig, bt=4, bw=32, bh=32, ow=16, #oh=16,sharpen=shr)
}


Edit: Poza tym, nie wiem co próbujesz zrobić, ale nie sądzę, żeby wywoływanie TextSuba na poszczególnych clipach *przed* splicem było tym, co chcesz osiągnąć. Będzie te suby renderować traktując początek każdego clipu jako czas "0"... Podstaw wynik tego trimowania pod coś i na tym wywołaj TextSuby *raz*, czyli...

Kod:
vid = Trim(Default,0,100).funkcja().funkcja(). + ... + Trim(Default,10000,12000).funkcja()

return vid.Textsub1(...).Textsub2(...).TextSub3(...)


Góra
 Zobacz profil  
 
 Tytuł: Re: [Techniczne] krojenie obrazu na części i ponowne składan
PostNapisane: 17 lis 2010, o 23:18 
Przelotem

Dołączył(a): 19 sty 2009, o 02:03
Posty: 6
Offline
Spoko, dzięki za info Tomusso.


Góra
 Zobacz profil  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1 [ DST ]


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość



Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów

Szukaj:
Skocz do:  
cron
Anfo-Event © 2009-2019
Powered by phpBB © 2000-2019
Theme Created by HOLLYSMOKE