Skocz do zawartości

Jak Wydobyć Rozdzielczość Z Filmu Video Rmvb, Avi?


WalDo

Rekomendowane odpowiedzi

Nagrywam sobie serial z TV. Koduję do AVI lub RMVB. Domyślnie rozdzielczość jest taka jaka daje mi TV. Konkretnie 576x432.

W mencoderze zmniejszam sobie rozdzielczość (320x240) i bitrate (220) żeby odtwarzać sobie na moim starym palmtopie i nie przewalać 800-900MB (AVI) czy 400-500MB (RMVB) tylko 130-150. Polecenie jest proste

mencoder plik.rmvb -vf scale=320:240 -oac mp3lame -lameopts preset=32 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=220 -of avi -o plik_na_PocketPC.avi

Jak nietrudno obliczyć 576/432=320/240 więc proporcje filmu wyjściowego są zachowane.

 

Chciałem napisać skrypt, który mi to przekodowanie nieco zautomatyzuje i tu dochodzę do sedna problemu.

Jak wydobyć z nagranego filmu jego rozdzielczość? Odtwarzając z terminala w mplayer widzę m.in. takiej linijki

VIDEO:  [RV40]  576x432  24bpp  30.000 fps
...
VO: [vdpau] 576x432 => 576x432 Planar YV12

Super... Tylko jak to zobaczyć nie uruchamiając odtwarzania filmu i na tej podstawie wyliczyć właściwe proporcje tj. szer.320, wys. X? Bo nie zawsze musi to być 576x432 bo filmy panoramiczne albo np. zripowane z DVD mogą mieć nieco inne proporcje.

 

Ewentualnie jak przekodować w mencoderze nagranie tak, żeby podać mu szerokość (konkretnie 320) a wysokość niech sobie sam wyliczy proporcjonalnie?

 

Szukam tego w manualach i na stronie mplayera, googluję i nic. Wygląda mi na to, że bez uruchomienia filmu nie da się odczytać informacji, które wg mnie powinny być w jakimś nagłówku pliku video.

 

Jeśli ktoś ma jakiś inny sposób wyciągnięcia rozmiarów filmu z pliku, to chętnie się dowiem

 

P.S. Wiem, że mogę od razu nagrać w rozmiarze 320:XXX, ale nie chcę, bo czasem chciałbym zachować odpowiednią jakość do oglądania na zwykłej plazmie.

 

[EDIT]

Nie ma to jak napisać na forum - zaraz odpowiedź sama w ręce (tj.oczy) wejdzie :)

Dla potomnych: wystarczy uruchomić dekodowanie filmu wskazując jako wyjście /dev/null - dekodowanie kończy się od razu ale nagłówek z rozdzielczościa jest wyświetlany

mencoder plik.avi -o /dev/null | grep ^VIDEO

 

Oczywiście jeśli ktoś zna inny sposób być może bardziej elegancki, to niech się podzieli wiedzą

Odnośnik do komentarza
Udostępnij na innych stronach

Przeskalować możesz parametrami: scale=320:-3 lub scale -xy 512 (-zoom też może się przydać). Nie wiem czy palmtop poradzi sobie proporcjami i sam nie przeskaluje, dlatego można dodać czarne pasy, aby zachować proporcje: expand=320:240 (ja tak zawsze robiłem). Czyli całość w ten sposób:

mencoder plik.rmvb -vf scale=320:-3,expand=320:240 -oac mp3lame -lameopts preset=32 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=220 -of avi -o plik_na_PocketPC.avi

Dodatkowo jeśli odtwarzacz nie obsługuje napisów, a chciałbyś je mieć to możesz w czasie konwersji zaaplikować tzw. hardsuby. Nie mam formułki do tego na wierzchu, bo już dawno w to się nie bawiłem, ale jeśli chcesz to mogę przeszukać dysk.

EDIT: Aha tu o seriale chodzi, a nie filmy. W takim razie napisy nie są potrzebne :)

Odnośnik do komentarza
Udostępnij na innych stronach

Proporcje wyliczysz przez obliczenie jakiegoś współczynnika

Łopatologicznie powinienem pokazać o co chodzi

rozmiar=$(mencoder plik.avi -o /dev/null | grep ^VIDEO | grep -oE '[0-9]+x[0-9]+')
rozmiar_x=${rozmiar%x*}
rozmiar_y=${rozmiar#*x}

 

i tui trzeba kombinować ze zmiennoprzecinkowymi

wspolczynnik=$((rozmiar_x*100/320)) # aby było 100x większe, 320 - nowa szerokość.
nowy_rozmiar_y=$(($rozmiar_y*100/$wspolczynnik))

No i powinien być nowy rozmiar Y. Czyli nowy rozmiar obrazu to tutaj "320x$nowy_rozmiar_y".

 

Jak coś popaprałem to popraw, bo niestety pisze z pamięci + drobnym spr. w bashu, ale proporcje nowego obrazu powinny być wyliczone.

 

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki za pomoc. Jak pisałem wyżej główny problem - brak szybkiego znalezienia rozdzielczości oryginalnego filmu - mam rozwiązany.

 

Przeskalować możesz parametrami: scale=320:-3 lub scale -xy 512
Hmm... czyli wartość "-3" zapewni mi że z automatu będę miał 320:240 albo 320:180 (w przypadku panoramicznych 16:9 coś takiego mi się wylicza)? A scale -xy 320 niestety mi nie działa - nie wiem dlaczego, ale obraz pozostaje w początkowej rozdzielczości.

Nie wiem czy palmtop poradzi sobie proporcjami i sam nie przeskaluje, dlatego można dodać czarne pasy
Staram się obcinać te czarne pasy, bo to jakiś tam dodatkowy "ciężar" pliku, ale też o tym myślałem.

Opcja expand nie jest mi potrzebna jeśli podam "scale=320:240" (tak jak pisałem w 1. poście).

 

EDIT: Aha tu o seriale chodzi, a nie filmy. W takim razie napisy nie są potrzebne :)
Player obsługuje napisy (znalazłem w wątku → http://pdaclub.pl/forum/oprogramowanie-ppc...2195ccc84998ea), ale to nagrania z polskojęzycznego kanału (AXN Crime), więc mam lektora.

 

 

Proporcje wyliczysz przez obliczenie jakiegoś współczynnika

Łopatologicznie powinienem pokazać o co chodzi

Z liczeniem proporcji nie mam problemów jak mam dane za to chyba nigdy nie korzystałem z grepa z opcją "-oE" i z tego rozbicia danych względem znaku "x" - podoba mi się. Zaraz coś tam sobie zmienię, a na razie wyszedł mi taki skrypcik siermiężny
#!/bin/bash
VIDEO=${1}

ORG_RES=`mencoder ${VIDEO} -o /dev/null 2>/dev/null| grep ^VIDEO | awk '{print $3}' | sed "s/x/\ /"`
ORG_RES_HIGHT=`echo ${ORG_RES} | awk '{print $2}' `
ORG_RES_WIDTH=`echo ${ORG_RES} | awk '{print $1}'`
RES_HIGHT=`echo 320*${ORG_RES_HIGHT}/${ORG_RES_WIDTH} | bc `
RES="320:"$RES_HIGHT

mencoder ${VIDEO} -vf scale=${RES} -oac mp3lame -lameopts preset=32 \
                                   -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=220 \
                                   -of avi -o ${VIDEO}.PPC.avi 2>/dev/null

Jak na moje potrzeby to mi wystarczy.

 

[EDIT]

Sprawdziłem to scale=320:-3 i to załatwia problem bez żmudnego przeliczania - dzięki thof. Skąd znasz tę opcję? Wydawało mi się, ze przewaliłem spory kawałek internetu i trochę manuali przez ostatnie 2-3 dni, ale tego jakoś nie znalazłem.

Odnośnik do komentarza
Udostępnij na innych stronach

Sprawdziłem to scale=320:-3 i to załatwia problem bez żmudnego przeliczania - dzięki thof. Skąd znasz tę opcję? Wydawało mi się, ze przewaliłem spory kawałek internetu i trochę manuali przez ostatnie 2-3 dni, ale tego jakoś nie znalazłem.
Raz mi się zdarzyło przeczytać prawie cały man mencoder :) Linia 3553:

       [=w:h[:interlaced[:chr_drop[:par[:par2[:presize[:noup[:arnd]]]]]]]]
              Scales the image with the software scaler (slow) and performs a YUV<->RGB colorspace conversion (also see -sws).

                 <w>,<h>
                      scaled width/height (default: original width/height)
                      NOTE: If -zoom is used, and underlying filters (including libvo) are incapable of scaling, it defaults to d_width/d_height!
                          0:   scaled d_width/d_height
                         -1:   original width/height
                         -2:   Calculate w/h using the other dimension and the prescaled aspect ratio.
                         -3:   Calculate w/h using the other dimension and the original aspect ratio.
                         -(n+8): Like -n above, but rounding the dimension to the closest multiple of 16.

Kiedyś jeszcze używałem filtrów rozjaśniających wideo bez zauważalnej straty jakości (oszczędność baterii): pp=hb/vb/dr/al (trzeba dopisać po przecinku za scale). Jeszcze możesz zmniejszyć fpsy parametrem -ofps 22 co też powinno wpłynąć na rozmiar bez efektu klatkowania.

Odnośnik do komentarza
Udostępnij na innych stronach

Dżizaz... :) Ja dość dokładnie cały rozdział 11. przeczytałem czyli to → http://www.mplayerhq.hu/DOCS/HTML/en/encoding-guide.html (wraz z podrozdziałami ;)), ale jakoś nie trafiłem.

Manualem nie gardziłem, ale nie ukrywam, że przy tak obszernych publikacjach wolę wersję papierową - "man" ogranicza mi jakoś możliwości przeglądania, ale to pewnie dlatego, że ja starej daty jestem.

 

Dzięki raz jeszcze.

 

[EDIT]

W linii 3553 nie ma ani słowa o tym. Masz na myśli takie zwykłe "man mencoder" z Fedory 13?

Odnośnik do komentarza
Udostępnij na innych stronach

man mencoder > mencoder.man z archa, czyli MEncoder SVN-r31774-4.5.0. Może to jakaś nowa opcja i jeszcze nie zdążyli zaktualizować manuali, bo ja pamiętam, że właśnie skalowałem w ten sposób scale -xy -zoom 320 (parametr zoom jest ważny). Jeszcze możesz poszukać w info mencoder
Odnośnik do komentarza
Udostępnij na innych stronach

Jeszcze możesz poszukać w info mencoder
Wrrrr... <_<

Od dwóch dni (prawie trzech) czytam manuale o tym i wymiękłem. Widać z tego że trzeba jednak korzystać z "man" i to z różnych dystrybucji :)

W każdym razie mój problem uważam za rozwiązany. A przy okazji nauczyłem się niezłych sztuczek, o których wcześniej nie wiedziałem (rozmiar%x*, rozmiar#*x - piękne :))

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...