Nowe posty

Autor Wątek: Mencoder. Problem z kompresją kodekiem x.264  (Przeczytany 9296 razy)

Offline

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 170
    • Zobacz profil
Mencoder. Problem z kompresją kodekiem x.264
« dnia: 2009-06-30, 22:45:50 »
Najpierw za pomocą mencodera zgrałem film z kamery Video8mm. Napisałem skrypt który koduje kodekiem bezstratnym. Jakość jest wyśmienita jak na tak marne źródło sygnału.

Rozmiar pliku 35,50GB

Zawartość skryptu:
mencoder tv:// -tv driver=v4l2:device=/dev/video0:normid=5:input=1:width=768:height=576:brightness=-2:contrast=1:hue=0:saturation=10: -endpos 01:33:45 -oac twolame -twolameopts br=160 -ovc lavc -lavcopts vcodec=ffv1 -o /multimedia/Torrent/test.avi -ofps 25 -idx
Teraz chcę zmniejszyć rozmiar pliku i skompresować nagrany film kodekiem x.264 pass3
W tym celu skonstruowałem trzy skrypty o takiej zawartości

pass1
mencoder -nosound "/multimedia/Torrent/test.avi" -endpos 00:00:45 -passlogfile "/multimedia/Torrent/srilanka.log" -ovc x264 -of rawvideo -x264encopts pass=1:bitrate=1200:subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid:weight_b -o NUL
pass2
mencoder -nosound "/multimedia/Torrent/test.avi" -endpos 00:00:45 -passlogfile "/multimedia/Torrent/srilanka.log" -ovc x264 -of rawvideo -x264encopts pass=2:bitrate=1200:subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid:weight_b -o NUL1
pass3
mencoder "/multimedia/Torrent/test.avi" -endpos 00:00:45 -passlogfile "/multimedia/Torrent/srilanka.log" -oac lavc -lavcopts acodec=mp2:abitrate=64 -ovc x264 -of rawvideo -x264encopts pass=3:bitrate=1200:subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid:weight_b -o "/multimedia/Torrent/SriLanka 2008.avi"
Mencoder kompresuje wszystko bardzo powoli niestety wynik jest nie do przyjęcia. Skompresowany w ten sposób film jest odtwarzany przez SMPlayer w przyśpieszonym tempie. Wszystko bardzo szybko rusza się. Co robię nie tak?

Offline

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 170
    • Zobacz profil
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #1 dnia: 2009-07-03, 14:20:22 »
Już wiem czemu mi za szybko szło. Wywaliłem parametr -of rawvideo I jest w porządku.

Mam teraz jeszcze kilka pytań na temat mencodera

1. Czy jest jakiś parametr który spowoduje automatyczne dzielenie kompresowanego pliku na kawałki o wielkości 2 GB?

2. Jakim parametrem ustawić czas od którego ma zacząć kompresować mencoder? Chciałbym uciąć początek materiału Video który zaczynam kompresować.

arctgx

  • Gość
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #2 dnia: 2009-07-03, 15:28:17 »
Jeśli chodzi o czas, to masz parametr -ss (zobacz też na temat -endpos).

Offline

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 432
    • Zobacz profil
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #3 dnia: 2009-07-03, 20:25:26 »
Kolega arctgx dobrze mówi. Cytując za manualem Mplayera:
_____________________________
-endpos <[[hh:]mm:]ss[.ms]|size[b|kb|mb]> (zobacz także -ss i -sb)
 Zatrzymuje kodowanie w podanym czasie lub pozycji bajtu.
 INFORMACJA: Pozycja bajtu nie będzie dokładna, ponieważ może się on tylko zatrzymać granicy ramki.

 PRZYKŁAD:
          -endpos 56
               Koduje tylko 56 sekund.
          -endpos 01:10:00
               Koduje tylko 1 godzinę i 10 minut.
          -endpos 100mb
               Koduje tylko 100 MB.
__________________________________________

Czyli można się poruszać po wielkości pliku :)
Natomiast, będziesz musiał to ręcznie pociąć, ustawiając później czas początkowy od tego miejsca. O możliwości automatycznego cięcia nie słyszałem :/

Offline

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 170
    • Zobacz profil
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #4 dnia: 2009-07-07, 18:25:55 »
Dzięki wszystkim za informację. Poradziłem już z -ss i -endpos. Ćwiczę teraz kodowanie przy stałym kwantyzatorze w x.264. W manualu wyczytałem, że do tego służy opcja vqscale.

Napisałem taki skrypt

mencoder "/multimedia/Torrent/test.avi" -oac twolame -twolameopts br=56 -ovc x264 -x264encopts pass=1:[b]vqscale=2[/b]:subq=7:partitions=all:8x8dct:me=umh:frameref=15:bframes=3:b_pyramid:weight_b -o null.avi
Gdy go uruchamiam to wywala mi błąd

MEncoder SVN-1.rc2.23.r28791.2plf2009.1-4.3.2 (C) 2000-2009 MPlayer Team
Option x264encopts: Unknown suboption vqscale                          
success: format: 0  data: 0x0 - 0xdfbb1846                              
AVI file format detected.                                              
[aviheader] Video stream found, -vid 0                                  
[aviheader] Audio stream found, -aid 1                                  
AVI: ODML: Building ODML index (2 superindexchunks).                    
VIDEO:  [FFV1]  768x576  24bpp  25.000 fps  54036.9 kbps (6596.3 kbyte/s)
[V] filefmt:3  fourcc:0x31564646  size:768x576  fps:25.000  ftime:=0.0400
==========================================================================
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 44100 Hz, 2 ch, s16le, 160.0 kbit/11.34% (ratio: 20000->176400)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)
==========================================================================
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Unsupported PixelFormat -1
Selected video codec: [ffv1] vfm: ffmpeg (FFV1 (lossless codec))
==========================================================================
VDec: vo config request - 768 x 576 (preferred colorspace: Planar YV12)
VDec: using Planar I420 as output csp (no 4)
Movie-Aspect is undefined - no prescaling applied.
FATAL: Cannot initialize video driver.
VDec: vo config request - 768 x 576 (preferred colorspace: Planar YV12)
VDec: using Planar I420 as output csp (no 4)
Movie-Aspect is undefined - no prescaling applied.
FATAL: Cannot initialize video driver.

Exiting...
Gdy zmienię vqscale na bitrate

mencoder "/multimedia/Torrent/test.avi" -oac twolame -twolameopts br=56 -ovc x264 -x264encopts pass=1:[b]bitrate=2000[/b]:subq=7:partitions=all:8x8dct:me=umh:frameref=15:bframes=3:b_pyramid:weight_b -o null.avi
to wszystko jest ok i mencoder kompresuje plik. Moim zdaniem oznacza to, że pozostała część skryptu jest ptawidłowa.

Jak zmodyfikować powyższy skrypt, żeby skompresować plik video za pomocą kodeka x.264 przy stałym kwantyzatorze?

arctgx

  • Gość
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #5 dnia: 2009-07-07, 18:51:00 »
vqscale jest parametrem dla -lavcopts, a nie dla -x264encopts.
man -P 'less -p "x264encopts"' mplayer

Offline

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 170
    • Zobacz profil
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #6 dnia: 2009-07-07, 20:48:43 »
Cytat: arctgx
vqscale jest parametrem dla -lavcopts, a nie dla -x264encopts.
man -P 'less -p "x264encopts"' mplayer
Przepraszam bardzo ale jestem bardzo początkującym użytkownikiem menkodera i nie bardzo wiem jak wykorzystać to co napisałeś. W dokumentacji KLIK  nie znalazłem nic na temat opcji less. Mógłbyś mnie bardziej naprowadzić?

arctgx

  • Gość
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #7 dnia: 2009-07-07, 21:50:07 »
Wpisz to w konsoli. Otworzy to po prostu manual mplayera w pierwszej napotkanej linii, która zawiera łańcuch "x264encopts" i tyle :) Polecenie less to przeglądarka plików tekstowych (wyjście q, zobacz zresztą man less)

Zobaczysz, że dla tego kodeka nie ma parametru vqscale. Tylko tyle chciałem podpowiedzieć - pokazać jak korzystać z dokumentacji man (MPlayer ma prócz tego bogatszą dokumentację w HTML, częściowo po polsku). Podpowiadam nie wnikając, jaki efekt daje ten parametr. Jakieś dwa lata temu poddałem się na nieokreślony czas z kompresją filmów, ale może jeszcze wrócę kiedyś do eksperymentów.

Zarówno dokumentacja man, jak i HTML powinny być dostępne od razu w jednej z paczek MPlayera.

Offline

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 170
    • Zobacz profil
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #8 dnia: 2009-07-07, 23:09:13 »
Cytat: arctgx
Wpisz to w konsoli. Otworzy to po prostu manual mplayera w pierwszej napotkanej linii, która zawiera łańcuch "x264encopts" i tyle :) Polecenie less to przeglądarka plików tekstowych (wyjście q, zobacz zresztą man less)

Zobaczysz, że dla tego kodeka nie ma parametru vqscale. Tylko tyle chciałem podpowiedzieć - pokazać jak korzystać z dokumentacji man (MPlayer ma prócz tego bogatszą dokumentację w HTML, częściowo po polsku). Podpowiadam nie wnikając, jaki efekt daje ten parametr. Jakieś dwa lata temu poddałem się na nieokreślony czas z kompresją filmów, ale może jeszcze wrócę kiedyś do eksperymentów.

Zarówno dokumentacja man, jak i HTML powinny być dostępne od razu w jednej z paczek MPlayera.
[gienek@stacjonarny ~]$ man -P 'less -p "x264encopts"' mplayer
bash: man: command not found
.

Co za różnica czy kożystam z manuala na stronie internetowej czy z zawartego w jednej z paczek mencodera?

Czyli nie ma możliwości kodowania kodekiem x264 ze stałym kwantyzatorem?

arctgx

  • Gość
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #9 dnia: 2009-07-07, 23:15:37 »
Zazwyczaj żadna różnica, chyba że w bieżącej wersji podręcznika dostarczonej wraz z paczką pojawi się coś nowego. Kopie w sieci, a także tłumaczenia, bywają do tyłu wobec bieżącej wersji.

Zdziwiłem się, że system może domyślnie nie mieć zainstalowanego polecenia man (chyba że leży ono poza tzw. ścieżką wyszukiwania $PATH w powłoce - ale zdaje się nie interesować Cię to, więc nie rozwijam tematu).

O sednie sprawy czyli kodeku, niech wypowie się ktoś, kto ma ochotę lub potrafi wniknąć w informacje na temat jego parametrów. Sam nie chcę wypowiadać się na podstawie pobieżnej lektury.

Offline

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 170
    • Zobacz profil
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #10 dnia: 2009-07-08, 11:46:22 »
Grzebałem się jeszcze po różnych dokumentacjach i wygrzebałem takie coś

Cytuj
qp_constant=<0-51>
Wybiera kwantyzator, jaki będzie użyty z klatkami P. Klatki I i B różnią się od tej wartości odpowiednio o ip_factor i pb_factor. Najbardziej przydatny zakres to 20−40 (domyślnie: 26). Niższe wartości to lepsza dokładność, ale większe wartości bitrate. 0 oznacza kompresję bezstratną. Zauważ, że kwantyzacja w H.264 działa zupełnie inaczej niż w MPEG-1/2/4: Parametr kwantyzacji (QP) H.264 jest w skali logarytmicznej. Przelicznik ma w przybliżeniu wartość H264QP = 12 + 6*log2(MPEGQP). Na przykład, współczynnik QP=2 dla MPEG odpowiada wartości QP=18 dla H.264.
.

Jak oni otrzymali wartość QP=18 ze wzoru H264QP = 12 + 6*log2(MPEGQP)


.


Bardzo dawno już nie chodziłem do szkoły i zapomniałem podstaw matematyki może to dlatego mi nie wychodzą obliczenia.
Powiedzmy, że chcę ustawić stały kwantyzator dla kodeka x.264 który zapewni taką samą jakość jak kwantyzator o wartości 2 w MPEG podstawiam to do wzoru i liczę tak

H264QP =12+6*log2(MPEGQP) = 12+6*log2(2)=12+6*log4=
12+6*0,60206...=12+3,61236...=15,61236...
.
Jak widać wynik który otrzymałem znacznie różni się od tego z manuala. Gdzie popełniam błąd w obliczeniach?

______
arctgx: przeedytowałem tak, by nie trzeba było przewijać w bok

arctgx

  • Gość
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #11 dnia: 2009-07-08, 17:37:03 »
Logarytm o podstawie dwa z dwójki to po prostu jeden :D

Na potrzeby podstawiania innych wartości niż dwa przypominam przelicznik: log2(x)=ln(x)/ln(a), gdzie ln to logarytm naturalny.

O logarytmie można przypomnieć sobie choćby z Wikipedii.

Jeśli masz zainstalowaną paczkę bc, klepnij w powłokę
QP=2; echo "12 + 6 * (l(2)/l(${QP}))" | bc -l

Offline

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 170
    • Zobacz profil
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #12 dnia: 2009-07-08, 18:12:20 »
Znalazłem opcję w manualu ale niestety nie potrafię jej użyć

Przerobiłem wielokrotnie tu już zamieszczany skrypt

mencoder "/multimedia/Torrent/test.avi" -oac twolame -twolameopts br=56 -ovc x264 -x264encopts pass=1:qp_constant=18:subq=6:partitions=all:8x8dct:me=umh:frameref=10:bframes=3:b_pyramid:weight_b -o null.avi
Niestety wywala błąd

[gienek@stacjonarny mencoder]$ ./XviD\\ pass\\ 5x1
MEncoder SVN-1.rc2.23.r28791.2plf2009.1-4.3.2 (C) 2000-2009 MPlayer Team
Option x264encopts: Unknown suboption qp_constant
success: format: 0  data: 0x0 - 0xdfbb1846
AVI file format detected.
[aviheader] Video stream found, -vid 0
[aviheader] Audio stream found, -aid 1
AVI: ODML: Building ODML index (2 superindexchunks).
VIDEO:  [FFV1]  768x576  24bpp  25.000 fps  54036.9 kbps (6596.3 kbyte/s)
[V] filefmt:3  fourcc:0x31564646  size:768x576  fps:25.000  ftime:=0.0400
==========================================================================
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 44100 Hz, 2 ch, s16le, 160.0 kbit/11.34% (ratio: 20000->176400)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)
==========================================================================
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Unsupported PixelFormat -1
Selected video codec: [ffv1] vfm: ffmpeg (FFV1 (lossless codec))
==========================================================================
VDec: vo config request - 768 x 576 (preferred colorspace: Planar YV12)
VDec: using Planar I420 as output csp (no 4)
Movie-Aspect is undefined - no prescaling applied.
FATAL: Cannot initialize video driver.
VDec: vo config request - 768 x 576 (preferred colorspace: Planar YV12)
VDec: using Planar I420 as output csp (no 4)
Movie-Aspect is undefined - no prescaling applied.
FATAL: Cannot initialize video driver.

Exiting...
Ręce normalnie opadają. Co znów robię nie tak? Czyżby nieaktualny manual w internecie?

arctgx

  • Gość
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #13 dnia: 2009-07-08, 18:32:22 »
Gdyby nie wyszukiwarka, też bym się wkurzył: manual jedno, a kiedy wkleisz ten komunikat, znajdziesz o podopcji qp zamiast qp_constant. Kto jednak nie znający kodu źródłowego dowiedzie, że robi ona to samo?

arctgx

  • Gość
Mencoder. Problem z kompresją kodekiem x.264
« Odpowiedź #14 dnia: 2009-07-08, 18:56:39 »
Ale... ściągnąłem MPlayera z repo svn i najnowszy angielski manual już wspomina o qp i potwierdza że robi to samo.

http://www.mplayerhq.hu/design7/dload.html#svn