Skocz do zawartości

Transkodowanie z Mencoderem (dla V39 i nie tylko) + GUI


sollyth

Rekomendowane odpowiedzi

Witam!

 

Wstęp:

 

Chcę się z Wami podzielić moimi przemyśleniami na temat konwersji materiałów wideo, przy pomocy mencodera, do formatu akceptowanego przez V39. Mencoder to niezwykle wszechstronne narzędzie konsolowe (w M$ to narzędzie "wiersza poleceń" ;) ) służące do obróbki materiałów audio i wideo (kodowanie, konwertowanie, odszumianie, wyostrzanie, itp.). Mencoder jest "sercem" wielu popularnych programów "okienkowych" zarówno dla Linuksa jak i dla Windows. Przykładowym programem dla Windows jest Loli Video Converter, często polecany na tym forum do przygotowywania materiałów wideo dla różnych odtwarzaczy. Jedną z zalet tego programu jest możliwość nałożenia napisów z pliku tekstowego na film. Inną zaletą, ale jednocześnie wadą, jest jego prostota. Właściwie oprócz bardzo podstawowych ustawień zapisanych w pliku .ini niewiele możemy zmienić i zoptymalizować. Często podobnie jest z innymi programami - nakładkami na mencodera - udostępniają użytkownikowi zaledwie ułamek jego możliwości.

 

Pomyślałem sobie, że może dobrze byłoby zebrać w jednym wątku informacje o sposobie wykorzystania "gołego" mencodera do przygotowywania jak najlepszej jakości materiałów wideo dla V39 (oczywiście po drobnych modyfikacjach "przepisy" nadadzą się również dla innych odtwarzaczy).

 

Temat może przydać się również użytkownikom Linuksa - tam, nie ukrywajmy, konwersję najprościej zrobić właśnie mencoderem w konsoli. Prawie każdy go ma, jako, że jest on integralną częścią popularnego i obecnego chyba w każdej nowoczesnej dystrybucji mplayera.

 

Mplayera dla Windows dobrze jest pobrać w wersji przygotowanej dla naszego procesora. Taka wersja "pod nasz procesor" będzie działała szybciej i prawdopodobnie stabilniej.

 

Do dzieła:

 

Po przydługim wstępie czas przystąpić do rzeczy. Ja swoje doświadczenia przeprowadzałem głównie pod Linuksem więc poniższe czary-mary jest przeznaczone dla niego (chociaż w 90% zadziała też w Windowsie - nie jestem pewien w tym momencie nakładania napisów):

 

mencoder film.avi -idx -noodml -vf scale=320:-2,expand=:240:::1,crop=320:240 -sws 9 -ovc lavc -ffourcc XVID -lavcopts vcodec=mpeg4:vbitrate=450:vhq -oac mp3lame -lameopts cbr:br=128:mode=0 -srate 44100 -sub film.txt -subcp utf-8 -subfont-text-scale 3.5 -o film_V39.avi

 

Po wykonaniu otrzymamy gotowy dla V39 film, z nałożonymi z pliku tekstowego napisami. Co jest ważne?:

  • film do przekodowania:

    film.avi

  • tu skalujemy film, z zachowaniem proporcji, do wymaganego rozmiaru 320x240:

    -vf scale=320:-2,expand=:240:::1,crop=320:240 -sws 9

  • tu ustalamy docelowy bitrate wideo:

    vbitrate=450

  • tu ustalamy docelowy bitrate audio:

    cbr:br=128

  • tu dokładamy napisy z pliku film.txt, który to plik jest w uft-8:

    -sub film.txt -subcp utf-8

  • tu decydujemy o rozmiarze napisów: w moim przypadku zostają ustalone na 3.5% przekątnej filmu:

    -subfont-text-scale 3.5

  • nazwa filmu po konwersji

    -o film_V39.avi

Uwagi:

 

Jeżeli wolimy żeby film po konwersji wypełniał cały nasz ekranik to zastosujmy skalowanie w postaci:

-vf scale=320:240

Obraz będzie wypełniał nasz ekran, ale na przykład filmy panoramiczne zostaną przycięte z lewego i prawego krańca.

 

W moim przykładzie mencoder używa domyślnej czcionki do której ścieżka jest podana w ukrytym katalogu .mplayer w katalogu domowym. Możemy sami zadać czcionkę napisów (tak bym robił też w Windows - nie wiem jak ustawić font domyślny...):

-font ścieżka_do_fontu

 

Dla przeważającej liczby dostępnych napisów wymagane będzie podanie innej niż w moim przykładzie strony kodowej, a mianowicie cp1250.

 

Nie wiem czy opcja

-subcp strona_kodowa_napisów

będzie działała pod Windows: man mplayer podaje, że działa dla systemów wyposażonych w programik iconv, a Windows chyba nie jest w niego wyposażony. Pewnie jest jeszcze możliwy jakiś inny sposób określenia strony kodowej napisów...

 

Może czasem zajść potrzeba ograniczenia liczby klatek na sekundę w wyjściowym materiale (na przykład dla odtwarzaczy mających ograniczenie do 15 klatek na sekundę). Użyjemy wtedy opcji:

-ofps 15

 

------------------------------EDIT 1------------------------------

 

Działający (u mnie ;)) odpowiednik dla Windows (font napisów na filmie ustaliłem jako Arial, strona kodowa pliku z napisami to cp1250) wygląda tak:

mencoder film.avi -idx -noodml -vf scale=320:-2,expand=:240:::1,crop=320:240 -sws 9 -ovc lavc -ffourcc XVID -lavcopts vcodec=mpeg4:vbitrate=450:vhq -oac mp3lame -lameopts cbr:br=128:mode=0 -srate 44100 -sub film.txt -font "c:\windows\fonts\arial.ttf" -subfont-encoding cp1250 -subfont-text-scale 3.5 -o film_V39.avi

--------------------------------------------------------------------

 

Na zakończenie:

 

Wymienione przeze mnie opcje są bardzo podstawowe. Umożliwiają osiągnięcie celu: przekodowanie materiału wideo do postaci "zjadliwej" dla V39. Ale mencoder to potężne narzędzie i za jego pomocą można dokonywać dosłownie cudów podczas kodowania. Począwszy od kosmetycznych zmian takich jak zmiana koloru czy położenia napisów, a kończąc na możliwości wyrafinowanej ingerencji w parametry i algorytmy kodeka. Można również nakładać wiele różnych filtrów mających na celu zmianę obrazu (na przykład filtry wyostrzające). Kompresowanie filmów pod odtwarzacze z takim maleńkim ekranem jest raczej dość specyficzne, dlatego zastanawiam się czy istnieje jakiś stały "żelazny" zestaw opcji, parametrów, filtrów umożliwiający osiągnięcie najlepszego efektu, albo co też ważne, najmniejszego pliku wynikowego, bez widocznej utraty jakości.

 

Zachęcam do eksperymentów i dzielenia się ich wynikami!!

Odnośnik do komentarza
Udostępnij na innych stronach

hehe przydatne, zaraz sprawdze czy działa :)

 

// ok, mam pytaanie- jak sprawić aby napisy były na czarnym tle,

oraz jakie jest kodowanie txt poza utf-8 - cp1250?

 

Napisy są domyślnie na czarnym tle - ale to tło jest bardzo "wąskie". Możesz je regulować opcją:

-ffactor parametr

Domyślnie mencoder (mplayer) ustawia:

-ffactor 0.75

Zmień sobie na:

-ffactor 10

a zobaczysz różnicę ;)

 

W Linuksie często jest jeszcze używana dla polskich tekstów strona kodowa iso-8859-2, choć chyba współczesne dystrybucje promują (i słusznie ;)) utf-8. W starych windach (np. Windows 98) polskie znaki były kodowane jeszcze inaczej... w cp852. Straszne z tym zamieszanie, tak więc dobrze by było aby unicode się w końcu upowszechnił. Z własnego doświadczenia się domyślam, że pytasz o strony kodowe bo wyszły Ci po kompresji pod windą krzaki. To dlatego, że w Windows nie działa opcja -subcp (wymaga programiku do konwersji iconv, którego winda nie posiada). Rzuć okiem jeszcze raz na mój post główny - dopisałem fragment z działającą pod Windows składnią.

Odnośnik do komentarza
Udostępnij na innych stronach

Opiszcie całkowicie oznaczenia każdego słowa lub podajcie adres na jakąś stronkę a za 2 miechy zrobię wam własną nakładkę - można zrobić projekt jakiś wspólny :) ja program ktoś grafikę ktoś inny stronę www jeszcze ktoś inny języki i wypromować :P

 

Ogólnie super że to dałeś bo i tak chciałem kiedyś zrobić własną nakładkę na mencodera ale nie mam nigdy czasu szukać informacji :(

Odnośnik do komentarza
Udostępnij na innych stronach

czekam na czasy, kiedy będą istaniały tylko dwa rodzaje kodowania znaków: UTF-8 i zamiennie UTF-16 ;)

 

a poradnik jest bardzo dobry :) teraz napiszcie jeszcze jakiś mały front-end, jak swojego czasu istniał RazorLame jako nakładka na LAME-a ;)

 

@Setesh

 

w pomocy mplayera masz wszystko co powyżej... i o wiele więcej, jeszcze będziesz żałował że zaglądałeś do pomocy mplayera ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Witam!

 

Właściwie pisząc ten króciutki poradnik nie miałem w głowie zamiaru tworzenia GUI. Ale w sumie, jak sobie sprawę przemyślałem, to doszedłem do wniosku, że może faktycznie nie byłoby głupim pomysłem stworzenie jakiegoś prostego GUI - takiego wyspecjalizowanego. Widział bym to na przykład tak: udostępniło by się użytkownikom opcje, wartości parametrów (i ich wszelakie kombinacje) tylko takie, które nie są w stanie spowodować tego, że film się nie odtworzy w danym odtwarzaczu. Czyli na przykład jeżeli mówimy o V39 to nie byłoby możliwości zmiany kodeka, zmiany rozdzielczości z 320x240, nie byłoby możliwości stworzenia filmiku z więcej niż 30 kl/s itp. Pozostałe "bezpieczne" opcje można by umieścić w GUI. Żeby program był funkcjonalny nie tylko dla użytkowników jednego modelu odtwarzacza, można by rozważyć możliwość wczytywania profili danego odtwarzacza: pomysł zbliżony do tego zastosowanego np. w Loli Video Converter ale bardziej rozwinięty. Wczytanie profilu dla danego odtwarzacza, przystosowywało by program (zadawało mencoderowi niemodyfikowalne przez użytkownika opcje i parametry dostosowane do danego modelu odtwarzacza, dynamicznie przystosowywało GUI dla danego odtwarzacza itd.). Profile mogły by zawierać również pre-definiowane zestawy opcji (super jakość - duży rozmiar, średnia jakość - średni rozmiar, jakość denna - maleńki rozmiar). Eh, no i jak tak sobie rozmyślam to mi się w głowie tworzy coraz większy kombajn... Jako język proponował bym JAVA - szybkość nie jest ważna - kodował będzie przecież i tak mencoder, a miło by było gdyby toto zechciało działać zarówno pod Windows jak i pod Linuksem. To tyle na razie mi przychodzi do głowy na szybko - śpieszę się bo muszę jechać za Kraków na święta zaraz ;).

 

Acha, dziękuję za słowa uznania za poradnik - to zawsze jest miłe :D

Odnośnik do komentarza
Udostępnij na innych stronach

powiem wam szczerze - jeśli jest sens robić GUI to tylko w takim języku, żeby wynikowy plik wykonywalny był "samowystarczalny"... JAVA nie jest (trzeba mieć java runtime), .NET nie jest (.NET framework)... nie wiem któro z tych jest bardziej opasłe...

 

inaczej prościej będzie po prostu WPISAĆ te parametry, nie bawiąc się w pobieranie czegokolwiek i instalację czegoś, co na dysku zajmuje 100...200MB tylko po to żeby użyć czegoś co zajmuje 8MB (mencoder.exe) i 80KB (GUI)

 

... bo to jest BEZ SENSU

 

chyba że wszyscy mają Vistę i .NET w standardzie...

 

i wiecie co jeszcze? jak ktoś ma javę to używa irivertera (mimo że bez napisów) a jak ma .net to loli - więc nie ma sensu robić "ponownie tego samego" mimo że "nowe" GUI miało by o 10 przełączników więcej...

Odnośnik do komentarza
Udostępnij na innych stronach

sollyth, fajnie ale to co pokazałeś jest w Loli (oczywiście w ini)

- bitrate audio/video

- rozmiar napisów

- przycinanie/nieprzycinanie itd

- napisy (nie wiem jak z kodowaniem - czyta wszystko, niezależnie od standardu czasu)

 

Co więcej potrzeba? :)

 

Jedynie co to to wszystko mogło by być konfigurowalne z poziomu programu, choć jak raz ustawiłem sobie .ini to od tamtej pory nie miałem [potrzeby tam zaglądać.

 

Ja mam zamiar w przypływie chęci przetłumaczyć Loli i dodać parę plików ini tylko dla Vedii (Panscan, bez obcinania, 2 wielkości napisów) To by rozwiązało problem ustawień dla większości ludzi.

Odnośnik do komentarza
Udostępnij na innych stronach

Wiesz KHRoN, jest klasa użytkowników dla których wpisanie czegokolwiek w konsolę NIGDY nie będzie prostsze... Nie chcę tu nikogo obrażać, po prostu tak jest. No dobra, przeklejenie gotowca jeszcze ujdzie, ale samodzielne wyszukanie w systemie pomocy jakiegoś dodatkowego polecenia i poprawne jego zastosowanie już odpada. Ba, znam ludzi świetnie posługujących się Excelem, Wordem, innym softem - a nie potrafiących uruchomić wiersza poleceń Windows... Po prostu teraz panuje już inna kultura korzystania z komputera.

 

Eh, teraz o językach. Prawdopodobnie języki kompilowanie do kodu pośredniego takie jak JAVA czy C# to przyszłość informatyki. Możemy ich nie lubić, ale będziemy się musieli do nich przyzwyczaić. Właściwie już musimy. Mają wady, ale mają też ogromne zalety. Na świecie liczy się już nie tylko M$ Windows. Tworzenie oprogramowania jest drogie i czasochłonne, firmy dążą do oszczędności. Tworzenie przenośnego oprogramowania się po prostu opłaca. A w dzisiejszych czasach to co się opłaca staje się standardem... Sam widzisz co się dzieje z brzmieniem iRiverów... iRiver'owi po prostu przestało się opłacać robić dobrze brzmiące playery. JAVA czy C# są "dalej" od sprzętu, od pamięci, od procesora, dzięki temu programista ma mniejszą możliwość popełnienia krytycznego błędu - to się firmom też opłaca. Zmierzam do tego, że już niedługo aby używać komputera po prostu będziesz musiał mieć zainstalowaną JAVE i . NET... Raz instalujesz i zapominasz. Przecież JAVA i .NET do kupy to 1 w porywach 2 albumy we flac ;)

 

Na prawdę posiadasz jeszcze maszynę bez JRE i .NET?

 

@Zoltan

 

 

Napisałem ten poradnik z kilku powodów: 1. nudziłem się; 2. w Linuksie nie ma Loli; 3. z głodu wiedzy - liczyłem, że może z wspólnych doświadczeniom forumowiczów wyłoni się jakiś niezły zestaw opcji, przy którym efekt kompresji będzie na naszym odtwarzaczu wyglądał na prawdę dobrze.

 

Wiem, że twórca Loli miał zamiar mocno skomplikować swój program. Widziałem nawet przyszłe GUI ;). Opisał to wszystko na jakimś zagranicznym forum Meizu. Ale sprzedał swojego Meizu i jego programik jakoś się przestał rozwijać... :D

 

Przepraszam za ewentualne ortografy i literówki ale edytuję ten post z telefonu....

Odnośnik do komentarza
Udostępnij na innych stronach

> Co więcej potrzeba?

 

zeby uniezaleznic sie od .NET framework? nie kazdy ma viste (a nawet jesli ma, to chce sie niedlugo - po wyprobowaniu SP1 - wrocic na XP i czekac na SP3 ;) )

 

a nawet w XP trzeba sobie recznie .NET doinstalowac

 

kiedys przynajmniej bylo tak, ze jak juz jakichs plikow DLL brakowalo, to bylo to "do 10MB" a nie "10MB do pobrania, 100MB po zainstalowaniu"... -_-

 

> mam zamiar w przypływie chęci przetłumaczyć Loli

 

loli juz jest przetlumaczone ;)

 

> języki kompilowanie do kodu pośredniego takie jak JAVA czy C# to przyszłość informatyki

 

nie sprzeczam sie z tym, mam tego swiadomosc... a mimo to tego nie lubie ;) wciaz mnie trafia jak widze jak mi sie na dwuglowym procku i 2gb ram-u maszyna wirtualna java - z bolem - uruchamia... i jak mi caly system "zamiera na moment"... -_-

 

> Przecież JAVA i .NET do kupy to

 

to kupa ladowania za kazdym razem... wiem...

 

> Na prawdę posiadasz jeszcze maszynę bez JRE i .NET?

 

oczywiscie ze nie, ale cieszylbym sie gdybym taka mial... chyba po prostu wychowalem sie w innych czasach...

Odnośnik do komentarza
Udostępnij na innych stronach

Ogólnie jeśli ja się wezmę za pisanie GUI to będzie ono w C++ (bo uwielbiam ten język i jest cholernie prosty!!!).

 

Java i .Net... Jak bym mógł to bym twórców tych języków za jaja powiesił - sorki po prostu nie cierpię tych języków (i nie mówcie o plusach czy minusach bo to nie wpłynie na moją opinie o nich) Wystarczy że muszę się ich uczyć (a nie chce mi się)

 

Co to ilości opcji... myślałem aby dać użytkownikom 2 opcje :

 

1) Na pasku ustawiasz jakość/wielkość pliku końcowego

2) Klikasz na "Opcje zaawansowane" a tam już by był pozostały zestaw opcji

 

Oczywiście plik z napisami występowałby w obu wersjach - Jak będę miał chwilkę to zrobię przykładowe GUI (sam design) i pokaże wam jak by mogło wyglądać.

Odnośnik do komentarza
Udostępnij na innych stronach

Tak próbowałem , pojawia się na chwilę czarne okienko i zaraz ginie .....???

 

Tak się dzieje gdy uruchamiasz jakiś konsolowy program klikając w niego myszką - jak się wykona to zabiera ze sobą okno konsoli... A polecenie mencoder.exe wykonuje się na prawdę szybko ;)). Zrób na przykład tak: wrzuć plik mencoder.exe do głównego katalogu na dysku c. Wrzuć tam też film który chcesz konwertować. Odpal sobie konsolę - wiersz polecenia w menu Akcesoria (albo szybciej: wpisujesz cmd w uruchom... w głównym menu windy). Przejdź do katalogu głównego (komenda cd \) i możesz działać - możesz z mojego postu skopiować sobie całą składnię i wkleić do konsoli (pod prawym klawiszem myszy).

 

to prościej będzie użyć irivertera albo loli...

 

Eh, ze trzy dni temu zabrałem się dla rozrywki za pisanie prostego GUI dla mencodera - na razie wyłącznie pod kontem V39. Wybrałem jednak Javę ze względu na przenośność (teoretyczną ;)). Właściwie istnieje już coś około pre_alfy ;). Można wczytać plik filmu, plik napisów, nadać nazwę filmu po konwersji. Przy wczytywaniu filmu wyświetlane są "szczegóły filmu" pobrane z mencodera. Można bez sięgania do osobnego programu dowiedzieć się właściwie wszystkiego o pliku: użyte kodeki (wideo i audio), bitrate wideo, audio - to podstawowe rzeczy, ale szczegółów jest masa... Prosto z GUI można nadać bitrate wideo, audio, można wybrać typ skalowania, można nakazać kopiować ścieżkę dźwiękową zamiast kompresować ją ponownie (można wyczytać ze "szczegółów" jaki jest oryginalny kodek zastosowany w materiale do transkodowania i jeżeli ścieżka jest ścieżką mp3 to można ją po prostu przekopiować - przyda się przy koncertach, teledyskach na przykład gdy zależy nam na jak najlepszej jakości dźwięku). Prosto z GUI można zmieniać rozmiar napisów i nakazać kompresowanie na przykład pierwszych 40 sekund filmu (może przydać się do przy próbach). No i to właściwie tyle na razie. Mógłbym już zamieścić plik jar - tak żeby zobaczyć czy ktoś się nim zainteresuje ;) - ale jeszcze się wstrzymam co najmniej do momentu rozwiązania dręczącego (i cholernie wkurzającego...) mnie problemu: pasek postępu działa pod Linuksem, ale pod windą jest martwy (tak zwana przenośność....). Po za tym całość jest mocną alfą - rzuca wyjątkami na lewo i prawo ale działa...

Odnośnik do komentarza
Udostępnij na innych stronach

Prawdę mówiąc te konsolowe programy to trochę aż nadto jak dla mnie :(

Bardziej odpowiada mi zabawa z Loli :) Z tym ,że brakuje mi w tym programiku kilku dodatkowych ustawień:

 

Wybaczcie więc jeszcze Lamerskie pytania :

 

1) Z jaką rozdzielczością zapisywany jest sygnał audio w Loli w konwertowanym pliku - 8 czy 16 bitów ?

 

 

2) Czy można w plikach .ini ustawić obcinanie boków obrazu panoramicznego tak aby wypełniał cały ekran 320/240 ?

Odnośnik do komentarza
Udostępnij na innych stronach

No dobra, uporałem się w końcu mniej więcej z zapanowaniem nad procesem mencodera w systemie Windows (hmmm, w Linuksie było jakoś prościej...), więc postanowiłem zamieścić to co mam do tej pory (a nie jest tego na razie za wiele ;)). Załączony zip zawiera dwa pliki: plik .jar i .exe. Obu można użyć do uruchomienia programu, ale plik exe ma pewną przewagę - w razie braku odpowiedniego JRE w systemie (a sollcoder wymaga Javy w wersji co najmniej 1.6.0) proponuje pobranie odpowiedniej wersji z sieci.

 

Jak toto uruchomić? Trzeba się samodzielnie zaopatrzyć w mplayera (kompilacje dla Windows pod różne procesory można pobrać np. stąd) . Trzeba utworzyć jakiś katalog, wrzucić do niego pliki mplayer.exe i mencoder.exe oraz sollcoder.jar lub sollcoder.exe. No i właściwie to wszystko. Powinno ruszyć po kliknięciu sollcoder.jar lub sollcoder.exe... Oczywiście można sobie utworzyć odpowiednie skróty.

 

SollCoder.zip

 

Pozdrawiam

sollyth

Odnośnik do komentarza
Udostępnij na innych stronach

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Zarejestruj się aby mieć większy dostęp do zasobów forum. Przeczytaj regulamin Warunki użytkowania i warunki prywatności związane z plikami cookie Polityka prywatności