<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>woszkowski.com &#187; Video</title>
	<atom:link href="http://www.woszkowski.com/category/video/feed" rel="self" type="application/rss+xml" />
	<link>http://www.woszkowski.com</link>
	<description></description>
	<lastBuildDate>Thu, 15 Oct 2009 09:59:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Optymalizacja H.264</title>
		<link>http://www.woszkowski.com/optymalizacja-h264,73.html</link>
		<comments>http://www.woszkowski.com/optymalizacja-h264,73.html#comments</comments>
		<pubDate>Tue, 06 Jan 2009 23:45:27 +0000</pubDate>
		<dc:creator>Paweł Woszkowski</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://www.woszkowski.com/?p=73</guid>
		<description><![CDATA[Począwszy od wersji 9.0.r115 Flash Player ma wbudowaną obsługę formatu video H.264. W&#160;chwili obecnej taką lub nowszą wersję playera posiada 90% internautów. Czas więc najwyższy przyjrzeć się temu formatowi bliżej i&#160;postarać się wykorzystać jak najbardziej jego możliwości. Nie jest to zadanie łatwe, gdyż liczba parametrów jakie oferuje może przyprawić o&#160;ból głowy. Na początek trochę teorii. [...]]]></description>
			<content:encoded><![CDATA[<p>Począwszy od wersji 9.0.r115 Flash Player ma wbudowaną obsługę formatu video H.264. W&nbsp;chwili obecnej taką lub nowszą wersję playera posiada 90% internautów. Czas więc najwyższy przyjrzeć się temu formatowi bliżej i&nbsp;postarać się wykorzystać jak najbardziej jego możliwości. Nie jest to zadanie łatwe, gdyż liczba parametrów jakie oferuje może przyprawić o&nbsp;ból głowy. Na początek trochę teorii. Poniżej schemat blokowy kodeka H.264:</p>
<div id="attachment_74" class="wp-caption alignnone" style="width: 455px"><img class="size-full wp-image-74" title="h264" src="http://www.woszkowski.com/wp-content/uploads/2009/01/h264.jpg" alt="Schemat blokowy kodeka H.264" width="445" height="408" /><p class="wp-caption-text">Schemat blokowy kodeka H.264</p></div>
<p>Ok, darujmy sobie teorię. <img src='http://www.woszkowski.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Oto lista podstawowych parametrów z&nbsp;ich krótkim opisem oraz optymalnymi wartościami (nazwy parametrów mogą być różne w&nbsp;różnych programach).</p>
<ul>
<li><strong>Profile </strong>(określa technikę i&nbsp;strategię używaną przez koder oraz dekoder, co wpływa na wymaganą moc obliczeniową): <strong>High</strong></li>
<li><strong>Level </strong>(określa maksymalną rozdzielczość, wymaganą pamięć, lokalny bitrate, oraz poziom buforowania): <strong>4.1</strong> (5.1 dla Full HD)</li>
<li><strong>Constant Bitrate</strong> &#8211; korzystne przy streamingu</li>
<li><strong>Variable Bitrate</strong> &#8211; korzystne przy progressive download</li>
<li><strong>Multi-pass encoding</strong> &#8211; kiedy tylko to możliwe używamy <strong>2-pass encoding</strong></li>
<li><strong>IDR Interval</strong> (odległość pomiędzy klatkami kluczowymi &#8211; key frames distance): <strong>50 &#8211; 250</strong></li>
<li><strong>Dynamic IDR positioning</strong> (dynamiczne umieszczanie klatek kluczowych zdeterminowane detekcją scen): <strong>40 &#8211; 50</strong></li>
<li><strong>B-frames</strong> (lub B-pictures &#8211; klatki interpolowane na podstawie klatek poprzednich oraz następnych; nie są referencją dla innych klatek; wartość parametru określa ich maksymalną występującą po sobie ilość; kiedy koder to umożliwia, rekomenduje się użycie &#8220;auto decision&#8221;): <strong>1 &#8211; 3</strong></li>
<li><strong>B-pyramid</strong> (umożliwia kiedy to konieczne użycie  B-frames jako klatek referencyjnych): <strong>włączyć</strong> jeżeli jest dostępne</li>
<li><strong>Entropy coding</strong> (kodowanie entropijne binarnego strumienia obrazu): jeżeli to możliwe używamy <strong>CABAC </strong>zamiast CAVLC</li>
<li><strong>Search mode</strong> (technika szukania wukorzystywana w&nbsp;estymacji ruchu): <strong>hexagonal</strong></li>
<li><strong>Search accuracy</strong>: <strong>quarter-pixel</strong></li>
<li><strong>Number of reference frames</strong>: <strong>2 &#8211; 5</strong></li>
<li><strong>Intra frame prediction</strong>: należy używać <strong>Hadamard transform</strong></li>
<li><strong>Rate distortion optimization</strong> (optymalizuje estymację ruchu, jednak może znaczenie spowolnić przetwarzanie i&nbsp;niewiele poprawić jakość): <strong>complex</strong></li>
<li><strong>De-blocking</strong> (filtr &#8211; jeden z&nbsp;głównych powodów wysokiej wydajności kodeka H.264; nigdy nie należy go wyłączać): pozostawić <strong>wartości standardowe</strong></li>
</ul>
<p>Zastosowanie powyższych parametrów powoduje jednak znaczne wydłużenie czasu kodowania (nawet kilkukrotnie w&nbsp;stosunku do czasu trwania filmu). Oto lista parametrów oraz wartości jakie można im przypisać, żeby skrócić czas i&nbsp;jednocześnie nie stracić zbyt wiele na jakości:</p>
<ul>
<li><strong>reference frames</strong>: <strong>2</strong></li>
<li>zablokować <strong>B-pyramid</strong></li>
<li>zmniejszyć  <strong>search range</strong> (np. do <strong>16</strong> lub do <strong>simple</strong>) oraz <strong>search mode</strong></li>
<li>zmniejszyć <strong>search accuracy</strong> do <strong>half-pixel</strong></li>
<li>zablokować <strong>rate distortion optimizations</strong> (RDO)</li>
<li>rozważyć zmniejszenie rozdzielczości lub zastosować <strong>pre-filtering</strong></li>
</ul>
<p>W takim razie do dzieła. Pod nóż poszły trzy programy: <a title="MediaCoder" href="http://mediacoder.sourceforge.net/" target="_blank">MediaCoder</a>, <a title="MainConcept Reference" href="http://www.mainconcept.com/site/prosumer-products-4/mainconcept-reference-20373/information-20393.html" target="_blank">MainConcept Reference</a>, Adobe Media Encoder CS4 oraz 42 sekundowy film w&nbsp;jakości Full HD (1080i). Żeby dostrzec pogorszenie jakości, narzuciłem dość rygorystyczne warunki: docelowa rozdzielczość 720&#215;400 oraz bitrate video 300kbps.</p>
<p>Niestety w&nbsp;MediaConcept Reference nie udało mi się wyprodukować filmu z&nbsp;dźwiękiem w&nbsp;formacie AAC, więc odpadł w&nbsp;zasadzie w&nbsp;przedbiegach. Nie jest to jednak dużą stratą, gdyż Adobe Media Encoder opiera się na kodeku opracowanym właśnie przez firmę MediaConcept. Tak więc poniżej porównanie klipów pochodzących z&nbsp;dwóch pozostałych programów.</p>
<p><a title="MediaCoder Example" href="http://woszkowski.com/h264/mc.html" target="_blank">Przykład 1: Media Coder</a><a href="http://woszkowski.com/h264/mc.html"><br />
</a><a title="Adobe Media Encoder CS4 Example" href="http://woszkowski.com/h264/ame.html" target="_blank">Przykład 2: Adobe Media Encoder CS4</a></p>
<p>MediaCoder wygrywa w&nbsp;tej konkurencji, choć oba programy wymagają przetestowania kompresji na filmach o&nbsp;innym tempie akcji (częste zmiany scen, dużo ruchu i&nbsp;szczegółów). Jakość obu filmów jest jednak i&nbsp;tak bardzo zadowalająca. Biorąc pod uwagę poprzedni kodek (On2vp6) otrzymujemy o&nbsp;wiele lepszą jakość przy niższym bitrate i&nbsp;cztery razy większej rozdzielczości (biorąc pod uwagę powierzchnię).</p>
<p>Kilka porad nie do końca związanych z&nbsp;kodekiem:</p>
<ul>
<li>Wybierz odpowiedni bitrate do zadanej rozdzielczości; oto zalecane wartości:<br />
-  1080p: Full HD (1920&#215;1080) 2 &#8211; 3 Mbps<br />
- 720p HD (1280&#215;720): 1.5 &#8211; 2 Mbps<br />
- 576p HQ (1024&#215;576): 1 &#8211; 1.2 Mbps<br />
- 480p SD (848&#215;480): 0.8 &#8211; 1 Mbps<br />
- 360p MD (640&#215;360): 0.6 &#8211; 0.8 Mbps</li>
<li>Rozważ kodowanie w&nbsp;rozdzielczości anamorficznej (np. 1440 x 1080 zamiast 1920 x 1080 i&nbsp;późniejsze rozciągnięcie obrazu we flashu &#8211; wg standardu dalej będzie to obraz Full HD)</li>
<li>Odszum video przed zakodowaniem (&#8221;temporal denoise filter&#8221;, &#8220;3D denoise filter&#8221;). Skalowanie również działa jako filtr odszumiający, o&nbsp;ile jest to skalowanie bilinear lub bicubic.</li>
<li>Jeżeli film źródłowy jest nagrany z&nbsp;przeplotem i&nbsp;nie posiadasz zaawansowanego programu do jego usuwania, spróbuj zakodować obraz w&nbsp;dwukrotnie niższej rozdzielczości pionowej i&nbsp;rozciągnij go we Flashu.</li>
<li>Jeżeli rozciągasz film we Flashu używaj video.smoothing=true. Pamiętaj, aby wyłączyć smoothing przy wchodzeniu w&nbsp;tryb fullscreen, aby uaktywnić akcelerację sprzętową.</li>
<li>Jeżeli kodujesz w&nbsp;niskiej jakości, można użyć we Flashu prostego sharpen filter w&nbsp;celu wyostrzenia szczegółów.</li>
</ul>
<p>Na koniec jeszcze dwa przykłady przygotowane za pomocą MediaCoder pokazujące możliwości formatu H.264. Pierwszy z&nbsp;nich to fragment filmu w&nbsp;rozdzielczości HD (720p: 1280 x 720) i&nbsp;jakości 1Mbps: <a title="HD Example" href="http://woszkowski.com/h264/pb-hd-1000.html" target="_blank">http://woszkowski.com/h264/pb-hd-1000.html</a>. Drugi to film w&nbsp;rozdzielczości Full HD (1080p: 1920 x 1080) i&nbsp;jakości 1.5Mbps: <a title="Full HD Example" href="http://woszkowski.com/h264/pb-fhd-1500.html" target="_blank">http://woszkowski.com/h264/pb-fhd-1500.html</a>. W&nbsp;obu przypadkach polecam przełączenie do trybu fullscreen przyciskiem w&nbsp;lewym górnym rogu filmu.</p>
<p>Na podstawie sesji &#8220;Encoding Video for the Highest Quality and Performance&#8221;, Fabio Sonnati, Adobe MAX 2008, Milan.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woszkowski.com/optymalizacja-h264,73.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
