<?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>Claudio&#039;s Hideout &#187; ffmpeg</title>
	<atom:link href="http://claudio.cicali.name/post/tag/ffmpeg/feed/" rel="self" type="application/rss+xml" />
	<link>http://claudio.cicali.name</link>
	<description>Claudio Cicali web hub</description>
	<lastBuildDate>Sun, 25 Sep 2011 11:29:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Digital Video Frustration</title>
		<link>http://claudio.cicali.name/post/2009/05/digital-video-frustration/</link>
		<comments>http://claudio.cicali.name/post/2009/05/digital-video-frustration/#comments</comments>
		<pubDate>Mon, 25 May 2009 07:42:33 +0000</pubDate>
		<dc:creator>claudio</dc:creator>
				<category><![CDATA[Articoli]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[digital video]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[mencoder]]></category>
		<category><![CDATA[Multimedia]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://claudio.cicali.name/?p=421</guid>
		<description><![CDATA[Scrivo questo post per due motivi: prima di tutto per lamentarmi, che è lunedì ed è attività che mi riesce bene. L&#8217;altro motivo è per scrivere da qualche parte le frustrazioni incontrate nel tentare di fare manipolazioni e presdigitazioni su dei video usando soltanto strumenti open source (il problema non è l&#8217;open source, come vedremo). [...]]]></description>
			<content:encoded><![CDATA[<p>Scrivo questo post per due motivi: prima di tutto per lamentarmi, che è lunedì ed è attività che mi riesce bene. L&#8217;altro motivo è per scrivere da qualche parte le frustrazioni incontrate nel tentare di fare manipolazioni e presdigitazioni su dei video usando soltanto strumenti open source (il problema non è l&#8217;open source, come vedremo).</p>
<p>Il problema: prendere una parte di un video pubblicato via RTMP (streaming vero, da piattaforma proprietario Adobe) e piazzare sopra lo spezzone un logo in sovraimpressione.</p>
<p>Semplice no?</p>
<p>Dettaglio tecnico: i video in questione sono codificati in H.264/MP3. Il container è l&#8217;f4v (ma questo, fortunatamente, conta poco o nulla).</p>
<p>L&#8217;operazione è da compiere <em>server side</em> per cui tutto attraverso command line e scripting (no GUI).</p>
<p>Che strumenti ci sono a disposizione per fare un lavoretto del genere? Ovviamente <strong>rtmpdump</strong>, <strong>ffmpeg</strong> e/o <strong>mencoder</strong>.</p>
<p>Spezzando diligentemente il problema principale in problemi più piccoli, il primo era: scaricarsi dallo streaming uno spezzone di un video. Il tool (unico, non ci sono alternative al momento) è appunto rtmpdump. Appena lo provo rimango subito molto contento del fatto che rtmpdump scaricasse non in &#8220;tempo reale&#8221; secondo gli FPS del filmato, ma mooolto più velocemente, praticamente in download. Peccato però che il tool non permettesse di specificare un tempo di partenza e uno di fine dello scaricamento. O tutto o niente. Un altro problema di rtmpdump è che il container del filmato scaricato è FLV, senza possibilità di intervenire su questa opzione.</p>
<p>Riprendendo in mano le mie conoscenze arrugginitissime di C++, modifico il programma in modo da poter specificare un offset di partenza e un tempo massimo di scaricamento. Tutto OK, senonché il filmato finale riporterà comunque la durata complessiva del filmato originale.</p>
<p>Mentre lavoro su questo problemino, il giorno stesso <a href="http://linuxcentre.net/adobe-has-issued-a-dmca-removal-request-for-rtmpdump/">Adobe fa chiudere</a> il sito di rtmpdump per contravvenzione al DMCA (nota che <a href="http://www.adobe.com/aboutadobe/pressroom/pressreleases/200901/012009RTMP.html ">Adobe dichiarava</a> simpaticamente di voler aprire il protocollo). Per adesso, dunque, sospendo la questione rtmpdump.</p>
<p>Mi trovo dunque tra le mani un video H.264/MP3. Problema successivo: stamparci sopra un logo per tutta la durata dello stesso.</p>
<p>L&#8217;unico modo per farlo (talvolta è bello sapere di aver un&#8217;unica possibilità, talvolta meno), è usare l&#8217;opzione &#8220;vhook&#8221; di ffmpeg. In pratica è possibile eseguire del codice &#8211; una sorta di sistema a plugin &#8211; durante la codifica del video. Uno di questi plguin si chiama, pensa un po&#8217;, &#8220;watermark&#8221; e fa esattamente quello che mi serve.</p>
<p>Però. Però si dà il fatto che questo sistema di &#8220;plugin&#8221; sia stato misconosciuto dagli sviluppatori di ffmpeg (&#8220;fa cagare&#8221;) e per questo prima deprecato (nella versione 0.5) e poi direttamente tolto (versione SVN attuale)&#8230; il sistema sarà sostituito (notare il tempo al futuro) da un framework molto più elegante chiamato libavfilter.</p>
<p>La versione che arriva con la mia Ubuntu è la 0.5 (meno male!) ma è compilata con il simpatico &#8211;disable-vhook (merda!). Ergo, se voglio usare -vhook devo ricompilarmi ffmpeg, ma la versione 0.5, non la versione SVN. Nota a latere: se chiedi supporto agli sviluppatori (mailing list o canale IRC), questi vogliono che tu faccia i test solo con la versione SVN&#8230; che non supporta vhook&#8230; OK, capito?</p>
<p>Faccio le mie prove e sembra andare tutto bene&#8230; il logo in sovraimpressione fa la sua sporca figura ma&#8230; ma l&#8217;audio è desincronizzato! Dopo qualche secondo, l&#8217;audio rallenta e dopo un po&#8217; le immagini sembrano quelle di un filmato di Enrico Ghezzi.</p>
<p>Il problema sembra essere il decoder MP3 usato da ffmpeg, al quale non piace troppo l&#8217;Mp3 della traccia audio del filmato. Probabilmente è colpa del coder usato, ma alla fine sembra che devo trovare un&#8217;altra soluzione. Qualcuno attento potrebbe obiettare &#8220;Ma perché per un H264 viene usata una traccia audio Mp3 e non AAC?&#8221;. Osservazione più che corretta. Il problema è che questi video sono prodotti in codifica &#8220;real time&#8221; da alcune squadre di produzione. Il software utilizzato per questa codifica è Adobe Live Encoder il quale, &#8220;bontà sua&#8221;, non supporta out-of-the-box AAC. Occorre acquistare un plugin che costa circa 250€ (ogni commento è superfluo). Per questo motivo il cliente ha preferito per adesso usare Mp3 con l&#8217;encoder marcio di Adobe.</p>
<p>Quanti decoder Mp3 ci sono Open Source? Due. Uno è <strong>libavcodec</strong>, fornito ed usato da ffmpeg e l&#8217;altro è <a href="http://www.underbit.com/products/mad/">libmad</a>. È possibile usare libmad con ffmpeg? No.</p>
<p>A questo punto occorre tirare fuori dal cassetto degli attrezzi <strong>mencoder</strong>, che invece può usare come decoder libmad, e provare. (qualcuno sa come e se si può usare libmp3lame per decodificare gli mp3 di ffmpeg?)</p>
<p>Incredibilmente, funziona. Mencoder + libmad riesce a ricodificare il video tenendo sincronizzato audio e video.</p>
<p>L&#8217;idea dunque sarebbe: passo lo spezzone originale da mencoder per crearne una versione digeribile da ffmpeg, usando come video codec &#8220;copy&#8221;, in modo da non dover ricodificare il video perdendo di qualità. Poi il video viene passato a ffmpeg per il watermarking del logo.</p>
<p>Già. Peccato che il video prodotto da mencoder con questa procedura sia &#8220;sminchiato&#8221;, come dicono a Milano&#8230; pieno di artefatti e con grossi problemi nelle immagini in movimento (bpyramid? bframes? Boh&#8230;).</p>
<p>E così continuo le mie prove, sinceramente frustrato e con poche speranze&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://claudio.cicali.name/post/2009/05/digital-video-frustration/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

