(nikt jeszcze nie ocenił tego wpisu)
Loading...Loading...

Kodowanie wideo w formacie WebM przy użyciu narzędzia ffmpeg

W rozdziale:

Kodowanie wideo w formacie WebM przy użyciu narzędzia ffmpeg

Format WebM jest w pełni obsługiwany przez ffmpeg od wersji 0.6. W wierszu poleceń wpisz polecenie ffmpeg bez żadnych parametrów, aby sprawdzić czy narzędzie zostało skompilowane z obsługą VP8:

you@localhost$ ffmpeg
FFmpeg version SVN-r23197, Copyright (c) 2000-2010 the FFmpeg developers
  built on May 19 2010 22:32:20 with gcc 4.4.3
  configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvorbis --enable-libvpx

Jeśli nie widzisz napisów --enable-libvorbis i --enable-libvpx, to masz niewłaściwą wersję ffmpeg. (Jeśli samodzielnie skompilowałeś program, sprawdź czy nie masz zainstalowanych dwóch wersji. Nie przejmuj się tym, nie spowoduje to żadnych konfliktów. Będziesz tylko musiał wpisać pełną ścieżkę do wersji ffmpeg z obsługą VP8.)

Wykonamy kodowanie dwuprzebiegowe. W pierwszym przebiegu plik wideo jest tylko skanowany (-i pr6.dv) i zapisywane są pewne informacje w dzienniku (któremu automatycznie zostanie nadana nazwa pr6.dv-0.log). Kodek wideo określamy za pomocą parametru -vcodec:

you@localhost$ ffmpeg -pass 1 -passlogfile pr6.dv -threads 16  -keyint_min 0 -g 250 -skip_threshold 0 -qmin 1 -qmax 51 -i pr6.dv -vcodec libvpx -b 614400 -s 320x240 -aspect 4:3 -an -y NUL

Większa część polecenia ffmpeg nie ma nic wspólnego z VP8 ani WebM. Kodek libvpx ma kilka opcji dotyczących VP8, które można przekazać do ffmpeg, ale nie wiem jak one działają. Gdy czego się o nich dowiem i uznam, że są tego warte, to napiszę coś o nich w tym miejscu.

W drugim przebiegu ffmpeg czyta zdobyte za pierwszym razem informacje oraz koduje audio i wideo. W wyniku tego powstaje plik z rozszerzeniem .webm.

you@localhost$ ffmpeg -pass 2 -passlogfile pr6.dv -threads 16  -keyint_min 0 -g 250 -skip_threshold 0 -qmin 1 -qmax 51 -i pr6.dv -vcodec libvpx -b 614400 -s 320x240 -aspect 4:3 -acodec libvorbis -y pr6.webm

W poleceniu tym zostało użytych pięć ważnych parametrów:

  • -vcodec libvpx oznacza, że do kodowania używamy kodeka VP8. W WebM zawsze używany jest kodek wideo VP8.
  • -b 614400 określa szybkość transmisji bitów. W odróżnieniu od innych formatów, libvpx należy podawać liczbę bitów, nie kilobitów. Jeśli chcesz ustawić szybkość transmisji bitów na 600, musisz pomnożyć 600 przez 1024 i wpisać wynik równy 614400.
  • -s 320x240 określa szerokość i wysokość docelowego filmu.
  • -aspect 4:3 określa współczynnik kształtu obrazu filmu. Filmy o standardowej rozdzielczości najczęściej mają współczynnik kształtu obrazu 4:3, a większość filmów o wysokiej rozdzielczości ma kształt 16:9 lub 16:10. Z moich doświadczeń wynika, że lepiej jest to ustawienie zdefiniować własnoręcznie w wierszu poleceń niż liczyć, że ffmpeg automatycznie je wykryje.
  • -acodec libvorbis oznacza, że używamy kodeka audio Vorbis. W WebM zawsze używany jest kodek audio Vorbis.

Dodaj komentarz