[Problem] VirtualDubMod - kompresja plikow OGM


(Szpakos01) #1

Witam

Mam kilka filmow w formacie ogm i chce je przerobic na avi i robie to za pomoca programu VirtualDubMod v1.5.10.1 PL i skompresowalem juz 2 z 20 filmow i zaczely sie problemy... Przy probie skompresowania 4 filmu po zaladowaniu pliku ogm do VirtualDubMod pokazuje sie w obrazie taki komunikat:

po czym i tak probuje skompresowac film (czyli przerbic na avi) z tym ze filmy sa w kulku wersjach jezykowych a mnie interesuje tylko jedna wiec sobie wylaczam niechciane audio i zostawiam tylko to co mnie interesuje (czyli wylaczam strumienie) i za pomoca codeka ffdshow (czy jakos tak) kompresuje sobie film, i sie okazuje ze nie dosc ze przerobiony film jest bez zadnego dzwieku to na poczatu pokazuje sie ten komunikat (juz po przerobieniu) gdzie 2 wczesniejsze wersje byly dobrze zrobione i z nimi nie ma zadnego problemu...

czy wie ktos co jest grane, co sie /cenzura/ lub co robie zle... Prosze o jakies wskazowki...


(MrAsusrp6) #2

moze to ci pomoze :slight_smile:

WARNING: NOTHING TO OUTPUT BFRAME DECODER LAG

Z tego, co zauważyłem, komunikat ten irytuje wielu z nas. Swego czasu i mnie strasznie on denerwował.

Na wstępie należy podkreślić, że komunikat ten nie jest spowodowany żadnym błędem. Pojawia się on najczęściej, kiedy do programu Virtual Dub lub Virtual Dub Mod wczytujemy film w formacie AVI zakodowany za pomocą kompresora XviD, w którym nie użyto podczas kodowania filmu opcji Packed Bitstream. Funkcja ta upraszcza obsługę klatek typu B. W skrocie mozna zatem powiedzieć, że ktoś, kto tworzył dany film w formacie AVI za pomocą kodeka XviD wyłączył tę funkcję.

Jeżeli taki materiał (film) wczytujemy potem do naszego Virtual Dub(Mod), to oznacza, że najprawdopodobniej mamy zamiar poddać ten film jakiejś obróbce (zrobić jego rekompresję, dodać jakieś filtrowanie, napisy, zmienić rozdzielczość lub podzielić czy wyciąć kawałek filmu). Nie obawiajmy się zatem, że komunikat ten w jakiś sposób zakłóci nasze działania. Z całkowitym spokojem możemy przystąpić do dalszych działań i nasz materiał wynikowy na pewno nie będzie uszkodzony. No, może nie do końca.

I własnie ze względu na to "nie do końca" postanowiłem napisać tego posta. Okazuje się bowiem, że program Virtual Dub pozostawia ten komunikat jako pierwszą klatkę obrazu. Możemy się zatem spodziewać, że niekorzystnym skutkiem pojawiania się tego napisu będzie jego obecność w naszym pliku wynikowym. Zatem po rekompresji takiego filmu, jego przycięciu czy podziale zobaczymy, że na samym poczatku nowopowstałego filmu "mignie" nam przez ułamek sekundy czarny obraz z białymi literami tego komunikatu. Niektórym z pewnością nie będzie to przeszkadzać, ale na pewno znajdą się tez tacy, których będzie to drażnić. Ktoś może wpaść na pomysł, aby wyciać ten poczatek obrazu, który zawiera komunikat. Jeśli jednak uzyjemy do tego celu właśnie Virtual Dub'a to nie mamy co liczyć, że nam się to powiedzie. Program wytnie zadaną przez nas liczbę początkowych klatek, ale jako pierwszą klatkę po wyciętym obszarze znowu zamieści komunikat w obrazie. Wyjściem może być użycie innego programu do przycinania, jakim jest np. AVI Splitter. Co jednak zrobić, żeby zrekompresować taki materiał bez konieczności późniejszego jego przycinania ?

Najlepiej będzie "załadować" nasz film do programu VD poprzez skrypt AVS, podając w nim ścieżkę do naszego filmu.

Czyli np.: AVISource("D:\film.avi

a pod spodem dodać:

A=AVISource("D:\film.avi").Trim(1,1)

B=AVISource("D:\film.avi").Trim(1,0)

unalignedsplice(A,cool.gif

Takie komendy w naszym skrypcie spowodują zastąpienie wyżej wymienionego komunikatu (klatka 0) przez klatkę 1.

Teoretycznie mozna zastosować również samą komendę trim(1,0), ale całkowite wycięcie klatki z obrazu może spowodować desynchronizację dźwięku z obrazem.

Kolorem czerwonym oznaczyłem wpisy, które są tu podane jako przykład ściezki dostepu do naszego pliku AVI. W te miejsca nalezy wpisać ścieżkę dostępu do pliku na własnym dysku.

Altermatywą jest też wpisanie nieco krótszej komendy do skryptu. Zamiast powyższych trzech linijek możemy dopisać jedynie:

CODE

FreezeFrame(0,1,1)

To spowoduje zastąpienie pierwszej klatki przez następną i jeśli film rozpoczyna się od kilku czarnych klatek (najczęściej), to nie będzie widac żadnej różnicy. Nawet jeśli tak nie będzie, to po prostu dwie pierwsze klatki będą takie same, co z pewnością nie zrobi nam różnicy.

To wszystko jeśli chodzi o obróbkę materiału bezpośrednio w samym Virtual Dub. Są jednak tacy, którzy będą chcieli zrekompresować obraz za pomocą programu Gordian Knot, wczytując do niego skrypt ze ścieżką dostępu do pliku avi. Gordian Knot również korzysta z Virtual Dub'a podczas kompresji, zatem jeśli nie zmodyfikujemy naszego skryptu, jak powyżej, to również nasz plik wynikowy będzie zawierał nieszczęsny komunikat. Pracując z Gordian Knot'em możemy postapić dwojako. Mozemy do wczytywanego skryptu o charakterze AVISource dodać wyżej opisane komendy i na tym koniec. Możemy też pozostawić ten pierwszy skrypt bez zmian (będzie zawierał tylko komendę AVISource...), a natomiast zmodyfikować tworzony w Gordian Knot kolejny skrypt, dodając te same wpisy. Pamietajmy tylko, żeby w takim wzpadku w miejsca oznaczone na czerwono wpisać ścieżki dostępu do naszego pierwotnego skryptu, czyli dla przykładu:

A=AVISource("D:\Skrypt.avs").Trim(1,1)

B=AVISource("D:\Skrypt.avs").Trim(1,0)

unalignedsplice(A,cool.gif

Na koniec informacja dla tych, którzy sami będą tworzyć film w formacie AVI i chcą zabezpieczyć siebie i/lub innych przed pojawianiem się tego komunikatu na ekranie Virtual Dub'a. Tak, jak podałem na samym początku. Problem tkwi w procesie dekodowania klatek typu B. Zatem przeprowadzając kompresję, np. z DVD do AVI wypada nam wyłączyć uzycie klatek typu B w naszym kodeku lub uaktywnić funkcję Packed Bitstream. Dezaktywację klatek B przeprowadzimy przyciskając "more..." obok Profile @ Level. Tam odznaczamy B-VOPs lub ustawmy Max consecutive B-VOPs na 0. Tam też znajdziemy opcję Packed Bitstream.

info http://divx.howto.pl