• Nie Znaleziono Wyników

Konvertowanie video

N/A
N/A
Protected

Academic year: 2021

Share "Konvertowanie video"

Copied!
8
0
0

Pełen tekst

(1)

Wstęp

Odtwarzany obraz wideo jak widomo jest złudzeniem bazującym na niedoskonałości i bezwładności ludzkiego wzroku. W uproszczeniu jest to pokaz slajdów, który wielokrotnie zmieniany w ciągu sekundy pozwala na wytworzenie złudzenia płynnej animacji. Przeciętny film wideo wyświetla 24 klatki na sekundę.

Ramki

W trakcie zapisu cyfrowego bez zastosowania kompresji nawet kilka minut filmu potrafi zajmować kilka GB miejsca na dysku. W tym celu stosuje się różnego rodzaju metody kompresji wideo. Każdąklatkę z filmu przedstawiono za pomocą ramki, która odświeża obraz na ekranie. Aby obniżyć ilość zajmowanego miejsca przez film zaczęto kompresować same klatki obrazu np. do formatu jpg. Pozwoliło to na zmniejszenie rozmiaru ramki i tak film może teraz zajmować ok 1/10 miejsca oryginału. Jednakże przy fakcie, że na każdą sekundę filmu przypadają 24 ramki oraz fakcie, że obraz zmienia się w bardzo niewielkim stopniu pomiędzy klatkami filmu postanowiono wprowadzić dodatkowe usprawnienie. Wprowadzono dodatkowe typy ramek, które już nie przechowują zapisu pełnej ramki obrazu, lecz jedynie fragmenty, które w trakcie sceny się zmieniły. Można powiedzieć, że ramki nanoszą jedynie poprawki do wyświetlanej sceny np. w ramce głównej będzie zapisany pełny obraz ulicy w mieście natomiast w ramkach pośrednich będą zapisane jedynie fragmenty obrazu, które przedstawiają jadące samochody.

Wyróżniono trzy typy ramek bez względy na rodzaj zastosowanego kodeka. Są nimi:

I-frame(Intra-codedpicture)– czyli ramka główna, zawiera ona zapis całego obszaru ramki.

Zajmują one najwięcej miejsca. Umieszczane są zawsze jako pierwsze w każdym ujęciu filmu oraz co pewien czas w celu uniknięcia rozjeżdżania się obrazu.

P-frame (Predictedpicture) – czyli ramki z zapisanymi jedynie zmianami fragmentów obrazu,

które należy wprowadzić w trakcie odtwarzania. Ramka ta odnosi się jedynie do ramek poprzednich. Ramki te określają różnego rodzaju operacje na wyświetlanym obrazie takie jak np. podmiana obrazu, przesunięcie fragmentu obrazu. Rodzaj operacji zależy od specyfiki zastosowanego kodeka.

B-frame (Bi-predictivepicture) – Tak jak P-frame z taką różnicą, że może odnosić się do

przyszłych ramek. Np. przez kopiowanie fragmentów obrazu z klatki głównej, która dopiero nastąpi.

Kontenery

Rozszerzenia pliku .avi, .mp4 nie wskazują na typ zastosowanego kodeka, ale na rodzaj użytego kontenera. Kontener jest to format zapisu pliku, który w najczęstszym przypadku łączy strumień wideo i strumień audio. Dodatkowo może np. zawierać dodatkowe strumienie audio z dubbingiem lub napisy do filmu. Kontener oprócz łączenia strumieni w jedną całość dba o synchronizacje

(2)

poszczególnych strumieni tak, aby obraz nie rozjeżdżał się z dźwiękiem.Najczęściej spotykanymi kontenerami są:

 AVI - standardowy kontener systemu Windows

 WMA, WMV (Advanced Systems Format) - standardowy kontener dla multimediów pakietu Windows Media

 MOV - standardowy kontener wideo QuickTime firmy Apple

 Ogg- standardowy kontener audio dla kodeków Xiph.org, może również przechowywać wideo, wykupiony i rozwijany obecnie przez google.

 3gp - używany przez telefony komórkowe.

 mp4 - Główne zastosowania MPEG-4 to media strumieniowe w sieci Web, dystrybucja CD, wideokonferencje i telewizja.

 DV (Digital Video) - format cyfrowego zapisu wizji stosowany głównie w kamerach cyfrowych. Bardzo mały współczynnik kompresji.

Strumienie

Każdy kontener zawiera w sobie poszczególne strumienie wideo i audio. Strumień jest to bezpośredni zapis skompresowanych ramek obrazu.

Najczęściej używanymi kodekami audio są:

 MP3 ((ang.) MPEG-1/MPEG-2 Audio Layer 3) – algorytm kompresji stratnej dźwięku, przetworzonego uprzednio na sygnał cyfrowy.

 AAC (ang. Advanced Audio Coding) – algorytm stratnej kompresji danych dźwiękowych, którego specyfikacja została opublikowana w roku 1997. Format AAC zaprojektowany został jako następca MP3, oferujący lepszą jakość dźwięku przy podobnym rozmiarze danych

 AC3 - Używany przeważnie w razie potrzeby zapisu wielokanałowego dźwięku np. dźwięku surround.

Najczęściej używanymi kodekami wideo są:

 AVC (ang. Advanced Video Coding) – standard kodowania sekwencji wizyjnych przyjęty w roku 2003 jako 10. część standardu ISO MPEG-4 oraz jako rekomendacja ITU-T H.264. Projekt x264 zajmuje się stworzeniem otwartej implementacji tego kodera. Efektywność kompresji formatu AVC dzięki wprowadzeniu nowych rozwiązań jest o wiele większa niż poprzednich standardów: MPEG-1, MPEG-2 czy MPEG-4 część 2 (popularne implementacje to DivX i Xvid).

W kodeku tym wyróżniono trzy podstawowe profile w zależności od zastosowania.

Profil Podstawowy – Baseline Profile (BP) Głównie dla aplikacji o najniższym wykorzystaniu kodera, ten profil wykorzystywany jest przede wszystkim do wideokonferencji oraz urządzeń i aplikacji przenośnych.

Profil Główny – Main Profile (MP) Uniwersalny dla klientów przekazów strumieniowych np. satelitarnych DVB-S2 oraz naziemnych DVB-T i DVB-T2 o rozdzielczości nieprzekraczającej 720x576 pikseli.

(3)

Profil Wysoki – High Profile (HiP) Głównie wykorzystywany dla klientów przekazów strumieniowych o wysokiej rozdzielczości np. satelitarnych S2 oraz naziemnych T i DVB-T2. Skuteczniejszy od Main Profile, ponieważ jest w stanie w pełni skorzystać z rozdzielczości 1280x720i, 1280x720p oraz 1920x1080i. Stosowany jest również do kompresji filmów na dyskach HD DVD i Blu-ray.

 DivX – stratna metoda kompresji obrazu filmowego, w nowszych wersjach zgodna z MPEG-4 część 2, pozwalającą zapisać na zwykłej płycie kompaktowej filmy o długości ok. 90 min i jakości niewiele ustępującej DVD-Video. Wykorzystywana także do przesyłania filmów przez Internet.

 Xvid (dawniej XviD) jest biblioteką kodeków video podążającą za standardem MPEG-4, a w szczególności MPEG-4 Part 2 Advanced Simple Profile (ASP).

FFMPG

Jest wieloplatformowym projektem, którego celem jest dostarczenie kompletnej platformy do nagrywania, konwertowania i przesyłania strumieniowego treści audiowizualnych. Głównym komponentem jest biblioteka libavcodec, która odpowiada za obsługę wielu popularnych kodeków. Projekt stanowi w praktyce podstawę dla odtwarzaczy multimediów w wielu dystrybucjach Linuksa. W zależności od opcji wybranych podczas kompilacji FFmpeg jest udostępniany na licencji LGPL albo GPL.

Zadanie 1

Należy pobrać kompilacje FFmpeg na system windowsz stronyhttp://ffmpeg.zeranoe.com/builds/

Po rozpakowaniu w katalogu bin znajdują się trzy aplikacje. Wszystkie są aplikacjami konsolowymi przez co można ich używać w trakcie pisania skryptów i pozwala zautomatyzować konwersje wideo. Jest to bardzo utrudnione przy aplikacjach okienkowych.

Następnie pobrać lub odszukać przykładowe fragmenty wideo. Muszą być stosunkowo krótkie, aby proces konwersji nie trwał zbyt długo. W systemie windows można przeszukać katalog C:\Users\Public\Videos\Sample Videos.

Zadanie2

Utworzyć plik skryptu .bat w którym dla ułatwienia będą pisane komendy.

W pierwszej kolejności należy zbadać plik wideo, który będzie enkodowany. W tym celu w pliku bat można wpisać poniższą komendę i wywołać skrypt.

.\ffmpeg\bin\ffprobe.exe -show_streams SAMPLE.avi pause

(4)

Służy do odczytywania parametrów wideo np. rodzaj zastosowanego kodeka wideo oraz audio, rozmiar ramki, rozdzielczość wideo. Przydatne narzędzie, gdy potrzebne jest określenie długości filmu i zastosowanych kodeków. Wywołanie programu wypisuje w konsoli parametry wideo. Przykład dla wywołania z parametrem –show_streams.

.\ffmpeg\bin\ffprobe.exe -show_streams SAMPLE.avi Input #0, avi, from 'SAMPLE.avi':

Metadata:

encoder : VirtualDubMod 1.5.10.2 (build 2542/release)

Duration: 00:01:02.77, start: 0.000000, bitrate: 2891 kb/s

Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv

420p, 1280x536 [SAR 1:1 DAR 160:67], 2242 kb/s, 23.98 tbr, 23.98 tbn, 23.98 tbc

Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, 5.1(side), fltp, 64 0 kb/s [STREAM] index=0 codec_name=mpeg4 codec_long_name=MPEG-4 part 2 profile=Advanced Simple Profile codec_type=video codec_time_base=2733/65535 codec_tag_string=XVID codec_tag=0x44495658 width=1280 height=536 has_b_frames=1 sample_aspect_ratio=1:1 display_aspect_ratio=160:67 pix_fmt=yuv420p level=5 timecode=N/A quarter_sample=0 divx_packed=0 id=N/A r_frame_rate=10000000/417083 avg_frame_rate=0/0 time_base=417083/10000000 start_pts=0 start_time=0.000000 duration_ts=1505 duration=62.770991 bit_rate=2242431 nb_frames=1505 nb_read_frames=N/A nb_read_packets=N/A DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 DISPOSITION:comment=0 DISPOSITION:lyrics=0 DISPOSITION:karaoke=0 DISPOSITION:forced=0 DISPOSITION:hearing_impaired=0 DISPOSITION:visual_impaired=0 DISPOSITION:clean_effects=0 DISPOSITION:attached_pic=0 [/STREAM] [STREAM] index=1 codec_name=ac3

codec_long_name=ATSC A/52A (AC-3) profile=unknown codec_type=audio codec_time_base=1/48000 codec_tag_string=[0] [0][0] codec_tag=0x2000 sample_fmt=fltp sample_rate=48000 channels=6 channel_layout=5.1(side) bits_per_sample=0 dmix_mode=-1 ltrt_cmixlev=-1.000000 ltrt_surmixlev=-1.000000 loro_cmixlev=-1.000000 loro_surmixlev=-1.000000 id=N/A r_frame_rate=0/0 avg_frame_rate=0/0 time_base=1/80000 start_pts=0 start_time=0.000000 duration_ts=N/A duration=N/A bit_rate=640000 nb_frames=5021679 nb_read_frames=N/A nb_read_packets=N/A DISPOSITION:default=0 DISPOSITION:dub=0 DISPOSITION:original=0 DISPOSITION:comment=0 DISPOSITION:lyrics=0 DISPOSITION:karaoke=0 DISPOSITION:forced=0 DISPOSITION:hearing_impaired=0 DISPOSITION:visual_impaired=0 DISPOSITION:clean_effects=0 DISPOSITION:attached_pic=0 [/STREAM]

Jak widać film zawiera dwa strumienie, jeden wideo (kodowany za pomocą kodeka xvid), drugi audio (6 kanałów kodowane za pomocą kodeka ac3). Ich parametry podano w znacznikach [STREAM] …

(5)

Najważniejsze parametry:

 index – numer strumienia w trakcie konwersji właśnie za pomocą indeksów można się odwoływać do poszczególnych strumieni.

 codec_name – nazwa kodeka

 profile – nazwa profilu, chodzi o zastosowany zestaw parametrów enkodowania.

 codec_type – typ kodeka (video, audio)

 width – szerokość ramek

 height – wysokość ramek

 duration – czas trwania filmu w sekundach.

Zadanie3

Przekonwertować wideo do formatu mp4 z zastosowaniem kodeka x264.

Do tego celu należy użyć aplikacji ffmpeg.exe która służy do konwersji wideo. Można skorzystać z przykładu poniżej.

.\ffmpeg\bin\ffmpeg.exe -i SAMPLE.avi -codec:a libvo_aacenc -b:a 96k -ac 2 -codec:v libx264 -profile:v baseline -preset slow SAMPLE.mp4

Parametry:

-i SAMPLE.avi - plik wejściowy

-codec:alibvo_aacenc – kodek:audio, a raczej biblioteka, która realizuje enkodowanie

-b:a 96k – bitrate:audio czyli ilość bajtów jaką może zużyć kodek na sekundę nagrania. W naszym

przypadku jest to 96 kilobitów.

-ac 2 – ilość kanałów audio.

-codec:v libx264 – kodek:video x264

-profile:vbaseline– profil video, czyli zestaw wbudowanych parametrów enkodowania

związanych z jakością enkodowanego wideo przekładającą się na rozmiar pliku. W naszym przypadku jest to profil podstawowy, ale może być również: main, high, high10, high422,

high444.

-presetslow– prędkość enkodowania, im wolniej tym lepsza jakość wideo przy tym samym

rozmiarze pliku.

Po konwersji można porównać jakość uzyskanego wideo oraz rozmiar pliku z plikiem wejściowym. Dodatkowo proszę poszukać w dokumentacji dołączonej do aplikacji i spróbować przekonwertować wideo do innego formatu i skorzystać z innych parametrów konwersji.

Zadanie 3

Przekonwertować wideo do formatu mp4 z zastosowaniem kodeka x264 wraz z przeskalowaniem ramek wideo do rozmiaru VGA.

(6)

Można skorzystać z przykładu:

.\ffmpeg\bin\ffmpeg.exe -i SAMPLE.avi -vf [in]scale=640:480[out] -codec:a libvo_aacenc -b:a 96k -ac 2 -codec:v libx264 -profile:v baseline -preset slow SAMPLE_VGA.mp4

Dodane parametry:

-vf [in]scale=640:480[out]– video filter, [in] odnosi się do pliku wejściowego, [out] do pliku

wyjściowego, który będzie enkodowany. Filtry działają na zasadzie pośrednika między dekoderem video źródłowego, a enkoderem video docelowego.

Scale oznacza, że obraz zostanie przeskalowany do rozdzielczości 640 na 480. Można również

użyć npcrop (obcina obraz) rotete(obraca) i wielu innych.

Dokładniejsza dokumentacja filtrów jest w pliku doc/ffmpeg-filters.html

Zadanie4

Przekonwertować wideo do formatu mp4 z zastosowaniem kodeka x264 wraz z przeskalowaniem ramek wideo do rozmiaru VGA i umieszczenie loga.

(7)

.\ffmpeg\bin\ffmpeg.exe -i SAMPLE.avi -i logo.png

-filter_complex "[0:v]scale=640:480[scaled];[scaled][1:v]overlay=10:10[out]" -map "[out]" -codec:a libvo_aacenc -b:a 96k -ac 2 -codec:v libx264 -profile:v baseline -preset slow SAMPLE_VGA_LOGO.mp4

Dodane parametry:

-filter_complex "[0:v]scale=640:480[scaled];[scaled][1:v]overlay=10:10[out]"

Opcja ta pozwala korzystać z wielu strumieni wejściowych w naszym przypadku to film i zdjęcie z logiem, ale mogą być również dwa filmy.

[0:v] – oznacza strumień video pierwszego filmu, który będzie przeskalowany i wysłany na

wejście strumienia nazwanego [scaled]. Następnie wyjście strumienia [scaled] i [v:1] czyli naszego zdjęcia będzie nałożone na siebie za pomocą filtra overlay wartości 10:10 oznaczają, że [v:1] będzie odsunięty od górnego lewego rogu o 10 pixeli.

-map "[out]" - mapuje wyjście strumienia filter_comlex na wyście [out] tak, aby enkoder

mógł rozpoznać swój strumień wejściowy.

Zadanie5

Połączyć dwa filmy w formie gdzie oba są odtwarzane jeden przy drugim. .\ffmpeg\bin\ffmpeg.exe -i SAMPLE.mp4 -i SAMPLE2.mp4

-filter_complex "nullsrc=size=200x100 [back]; [0:v]setpts=PTS-STARTPTS, scale=100x100 [left]; [1:v] setpts=PTS-STARTPTS, scale=100x100[right]; [back][left]overlay=shortest=1[back+left];

[back+left][right] overlay=shortest=1:x=100 [left+right]"

-map "[left+right]" -codec:a libvo_aacenc -b:a 96k -ac 2 -codec:v libx264 -profile:v baseline -preset slow SAMPLE_VGA2.mp4

Dodane parametry:

nullsrc=size=200x100 – pusta ramka o rozmiarze 200x100 pikseli.

Zadanie 6

Wydobyć pojedyncze ramki filmu i zapisać w formacie png.

Przydatne w przypadku kiedy trzeba utworzyć miniaturki materiałów wideo lub animacji gif streszczający cały film.

Można skorzystać z poniższego fragmentu kod:

(8)

Dodane parametry:

-ss 10 – offset w sekundach, od którego ma zacząć się operacja wydobycia ramki

-deinterlace – usunięcie przeplotu (pozostałość z czasów telewizji analogowej)

-r 1 – framerate, czyli ilość ramek na sekundę.

-t 1 – czas całej operacji w naszym przypadku to jedna sekunda.

Ustawiliśmy framerate na 1 klatkę na sekundę i kazaliśmy przekonwertować jedną sekundę filmu w takim wypadku wychodzi ze na wyjściu pojawi się jedynie jedna ramka.

Zadanie 7

Wydobyć pojedyncze ramki filmu, a następnie utworzyć z nich animacje gif.

Do tego celu należy pobrać kolejny zestaw narzędzi ImageMagic najlepiej w wersji portable. Pobrać go można z strony: http://www.imagemagick.org/script/binary-releases.php#windows

W tym celu można skorzystać z kodu:

.\ffmpeg\bin\ffmpeg.exe -ss 10 -i SAMPLE_VGA_LOGO.mp4 -deinterlace -r 1 -t 1 thumb_1.png .\ffmpeg\bin\ffmpeg.exe -ss 20 -i SAMPLE_VGA_LOGO.mp4 -deinterlace -r 1 -t 1 thumb_2.png .\ffmpeg\bin\ffmpeg.exe -ss 30 -i SAMPLE_VGA_LOGO.mp4 -deinterlace -r 1 -t 1 thumb_3.png .\ffmpeg\bin\ffmpeg.exe -ss 40 -i SAMPLE_VGA_LOGO.mp4 -deinterlace -r 1 -t 1 thumb_4.png .\ffmpeg\bin\ffmpeg.exe -ss 50 -i SAMPLE_VGA_LOGO.mp4 -deinterlace -r 1 -t 1 thumb_5.png .\ImageMagick\convert.exe -delay 50 .\thumb_*.png .\anim.gif

Dodane parametry:

-delay 50 – opóźnienie w milisekundach pomiędzy kolejnymi klatkami

.\thumb_*.png – gwiazdka określa, że będą brane wszystkie pliki, które będą pasowały do nazwy, a w miejscu kropki znajdować się będzie numer kolejności.

Cytaty

Powiązane dokumenty

Powiedz, jeśli masz ochotę, że jest to instynkt, który ani nie ma, ani też nie domaga się wyjaśnienia, poza tym oczywistym, iż ponadnaturalny świat naprawdę istnieje i zawiera

Zaprojektować system ze zmiennymi

Możemy wtedy napisać wzór (24.1) jako iloczyn skalarny wektora prędkości Ev strumienia powie- trza i wektora powierzchni ES ograniczonej ramką:.. Φ = vS cos θ = Ev ·

Z mapy tego poziomu wynika, że poziom -700 m cechuje aię wzrostem temperatury, co zresztą jest zgodne z prawidłowością, przepływu energii cieplnej z głębi ku

zanurzam się głęboko w oceanie moich myśli. Potrzebne są takie dni, żeby myśli przepłynęły i odeszły. Tutaj wystąpiło kil- ka metafor: myśl to strumień lub rzeka, bo

Moim zdaniem nie tyle bowiem mamy do czynienia z narratorem sza- leńcem, ile raczej z kimś, kto się do tego szaleństwa przygotowuje, jest bliski popadnięcia w pełny, obejmujący

W sposób podobny do po- przedniego możemy rozwiązać zadanie następujące:.. Popędy tych

 kandela (cd) - jednostka podstawowa układu SI, określająca światłość źródła emitującego w pewnym kierunku światło monochromatyczne o częstotliwości 5.4·10 14 Hz