<?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>Helyar.net &#187; Linux</title>
	<atom:link href="http://www.helyar.net/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.helyar.net</link>
	<description>From the desktop of George Helyar</description>
	<lastBuildDate>Thu, 26 Jan 2012 16:11:27 +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>How to compile ffmpeg from source</title>
		<link>http://www.helyar.net/2010/how-to-compile-ffmpeg-from-source/</link>
		<comments>http://www.helyar.net/2010/how-to-compile-ffmpeg-from-source/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 13:15:43 +0000</pubDate>
		<dc:creator>George Helyar</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[compile]]></category>
		<category><![CDATA[ffmpeg]]></category>

		<guid isPermaLink="false">http://www.helyar.net/?p=512</guid>
		<description><![CDATA[ffmpeg is a free and very powerful video encoding tool that is the basis of many other popular video encoding tools, with a command line interface. Because of the frequent updates to ffmpeg and the codecs it uses, it is often best to download the latest source and compile it yourself. These updates usually include [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ffmpeg.org/">ffmpeg</a> is a free and very powerful video encoding tool that is the basis of many other popular video encoding tools, with a command line interface.</p>
<p>Because of the frequent updates to ffmpeg and the codecs it uses, it is often best to download the latest source and compile it yourself. These updates usually include new features, bug fixes, support for new codecs and noticeable speed improvements. Most Linux distributions have outdated packages in their repositories so being able to compile the latest code from source is very useful</p>
<p>I use ffmpeg to output H.264 video with AAC audio in a MP4 container. I also occasionally convert audio to mp3. This means I will be compiling the following:</p>
<ul>
<li><a href="http://ffmpeg.org/">ffmpeg</a></li>
<li><a href="http://www.videolan.org/developers/x264.html">x264</a></li>
<li><a href="http://www.audiocoding.com/">faac/faad</a></li>
<li><a href="http://lame.sourceforge.net/">LAME</a></li>
</ul>
<h3>Preparing to compile on Linux</h3>
<p><em>(If you already compile things on Linux, skip to the next section.)</em><br />
First make sure that you have all of the tools and headers required to compile on Linux. On Debian based systems (including Ubuntu) you can usually run the following as root to get everything you need. First update your system. It is important that you get the latest kernel and the correct sources for it.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #c20cb9; font-weight: bold;color: blue;">apt-get</span> update
<span style="color: #c20cb9; font-weight: bold;color: blue;">apt-get</span> dist-upgrade</pre></div></div>

<p>A reboot may be required here if your kernel updated.</p>
<p>Now get the compilers, tools and headers needed to compile software on Linux:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #c20cb9; font-weight: bold;color: blue;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;color: blue;">install</span> build-essential linux-headers-<span style="color: #000000; font-weight: bold;color: black;">`</span><span style="color: #c20cb9; font-weight: bold;color: blue;">uname</span> -r<span style="color: #000000; font-weight: bold;color: black;">`</span> <span style="color: #c20cb9; font-weight: bold;color: blue;">git</span> subversion yasm</pre></div></div>

<p>NB: your &#8220;git&#8221; package may be called something like &#8220;git-core&#8221;</p>
<h3>Compile ffmpeg (empty)</h3>
<p>Because some libraries require ffmpeg to be installed, we will first install a blank copy with no additional codecs specified.</p>
<p>When I update, I often find that I need to recompile a blank version of ffmpeg before I can compile x264.</p>
<p>Download the latest ffmpeg source with subversion, configure, compile:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #c20cb9; font-weight: bold;color: blue;">svn</span> checkout <span style="color: #c20cb9; font-weight: bold;color: blue;">svn</span>:<span style="color: #000000; font-weight: bold;color: black;">//</span>svn.ffmpeg.org<span style="color: #000000; font-weight: bold;color: black;">/</span>ffmpeg<span style="color: #000000; font-weight: bold;color: black;">/</span>trunk <span style="color: #c20cb9; font-weight: bold;color: blue;">ffmpeg</span>
<span style="color: #7a0874; font-weight: bold;color: blue;">cd</span> <span style="color: #c20cb9; font-weight: bold;color: blue;">ffmpeg</span>
.<span style="color: #000000; font-weight: bold;color: black;">/</span>configure
<span style="color: #c20cb9; font-weight: bold;color: blue;">make</span></pre></div></div>

<p>If this all worked with no errors (you can check with <code>echo $?</code>), run</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #c20cb9; font-weight: bold;color: blue;">make</span> <span style="color: #c20cb9; font-weight: bold;color: blue;">install</span></pre></div></div>

<p> as root. Use su or sudo if you need to. I use su.</p>
<h3>Compile faac and faad</h3>
<p>Download and extract faac and faad from <a href="http://www.audiocoding.com/">audiocoding.com</a>.</p>
<p>As above, run</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;">.<span style="color: #000000; font-weight: bold;color: black;">/</span>configure
<span style="color: #c20cb9; font-weight: bold;color: blue;">make</span>
<span style="color: #c20cb9; font-weight: bold;color: blue;">su</span> <span style="color: #660033;">-c</span> <span style="color: #ff0000;">'make install'</span></pre></div></div>

<p>on both libraries.</p>
<p>You can optionally do the same thing with <a href="http://lame.sourceforge.net/">LAME</a> if you want to be able to encode mp3 audio.</p>
<p><em>NB: if you get a <code>strcasestr</code> error compiling faac, just comment it out in faac_1.28/common/mp4v2/mpeg4ip.h</em></p>
<h3>Compile x264</h3>
<p>Download and compile the latest x264 source with git:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #c20cb9; font-weight: bold;color: blue;">git</span> clone <span style="color: #c20cb9; font-weight: bold;color: blue;">git</span>:<span style="color: #000000; font-weight: bold;color: black;">//</span>git.videolan.org<span style="color: #000000; font-weight: bold;color: black;">/</span>x264.git
<span style="color: #7a0874; font-weight: bold;color: blue;">cd</span> x264
.<span style="color: #000000; font-weight: bold;color: black;">/</span>configure <span style="color: #660033;">--enable-static</span> <span style="color: #660033;">--enable-shared</span>
<span style="color: #c20cb9; font-weight: bold;color: blue;">make</span>
<span style="color: #c20cb9; font-weight: bold;color: blue;">su</span> <span style="color: #660033;">-c</span> <span style="color: #ff0000;">'make install'</span></pre></div></div>

<h3>Compile ffmpeg with the above codecs</h3>
<p>Now that we have all of the codecs (x264, aac, mp3) successfully installed as libraries on the system, we can reinstall ffmpeg to incorporate these libraries. First go back to the ffmpeg source directory and clean off the previous compile.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #7a0874; font-weight: bold;color: blue;">cd</span> <span style="color: #c20cb9; font-weight: bold;color: blue;">ffmpeg</span>
<span style="color: #c20cb9; font-weight: bold;color: blue;">make</span> clean</pre></div></div>

<p>Now configure to enable all of the installed libraries and recompile:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;">.<span style="color: #000000; font-weight: bold;color: black;">/</span>configure <span style="color: #660033;">--enable-gpl</span> <span style="color: #660033;">--enable-nonfree</span> <span style="color: #660033;">--enable-pthreads</span> <span style="color: #660033;">--enable-libx264</span> <span style="color: #660033;">--enable-libfaac</span> <span style="color: #660033;">--enable-libfaad</span> <span style="color: #660033;">--enable-libmp3lame</span>
<span style="color: #c20cb9; font-weight: bold;color: blue;">make</span></pre></div></div>

<p>(if it tells you that &#8211;enable-libfaad is not an option, just remove it. It&#8217;s probably either been rolled into faac or ffmpeg has it built in)</p>
<p>If it all worked, run make install as root.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #c20cb9; font-weight: bold;color: blue;">su</span> <span style="color: #660033;">-c</span> <span style="color: #ff0000;">'make install'</span></pre></div></div>

<h3>Testing</h3>
<p>As long as /usr/local/bin/ is on your $PATH environment variable, you should be able to just type <code>ffmpeg</code> to check that it is all installed. It should look something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;">$ <span style="color: #c20cb9; font-weight: bold;color: blue;">ffmpeg</span>
FFmpeg version SVN-r23548, Copyright <span style="color: #7a0874; font-weight: bold;color: black;">&#40;</span>c<span style="color: #7a0874; font-weight: bold;color: black;">&#41;</span> <span style="color: #000000;color: maroon;">2000</span>-<span style="color: #000000;color: maroon;">2010</span> the FFmpeg developers
  built on Jun  <span style="color: #000000;color: maroon;">9</span> <span style="color: #000000;color: maroon;">2010</span> <span style="color: #000000;color: maroon;">13</span>:<span style="color: #000000;color: maroon;">35</span>:<span style="color: #000000;color: maroon;">17</span> with <span style="color: #c20cb9; font-weight: bold;color: blue;">gcc</span> 4.4.4
  configuration: <span style="color: #660033;">--enable-gpl</span> <span style="color: #660033;">--enable-nonfree</span> <span style="color: #660033;">--enable-pthreads</span> <span style="color: #660033;">--enable-libx264</span> <span style="color: #660033;">--enable-libfaac</span> <span style="color: #660033;">--enable-libfaad</span> <span style="color: #660033;">--enable-libmp3lame</span>
  libavutil     <span style="color: #000000;color: maroon;">50.18</span>. <span style="color: #000000;color: maroon;">0</span> <span style="color: #000000; font-weight: bold;color: black;">/</span> <span style="color: #000000;color: maroon;">50.18</span>. <span style="color: #000000;color: maroon;">0</span>
  libavcodec    <span style="color: #000000;color: maroon;">52.75</span>. <span style="color: #000000;color: maroon;">1</span> <span style="color: #000000; font-weight: bold;color: black;">/</span> <span style="color: #000000;color: maroon;">52.75</span>. <span style="color: #000000;color: maroon;">1</span>
  libavformat   <span style="color: #000000;color: maroon;">52.68</span>. <span style="color: #000000;color: maroon;">0</span> <span style="color: #000000; font-weight: bold;color: black;">/</span> <span style="color: #000000;color: maroon;">52.68</span>. <span style="color: #000000;color: maroon;">0</span>
  libavdevice   <span style="color: #000000;color: maroon;">52</span>. <span style="color: #000000;color: maroon;">2</span>. <span style="color: #000000;color: maroon;">0</span> <span style="color: #000000; font-weight: bold;color: black;">/</span> <span style="color: #000000;color: maroon;">52</span>. <span style="color: #000000;color: maroon;">2</span>. <span style="color: #000000;color: maroon;">0</span>
  libavfilter    <span style="color: #000000;color: maroon;">1.20</span>. <span style="color: #000000;color: maroon;">0</span> <span style="color: #000000; font-weight: bold;color: black;">/</span>  <span style="color: #000000;color: maroon;">1.20</span>. <span style="color: #000000;color: maroon;">0</span>
  libswscale     <span style="color: #000000;color: maroon;">0.11</span>. <span style="color: #000000;color: maroon;">0</span> <span style="color: #000000; font-weight: bold;color: black;">/</span>  <span style="color: #000000;color: maroon;">0.11</span>. <span style="color: #000000;color: maroon;">0</span>
Hyper fast Audio and Video encoder
usage: <span style="color: #c20cb9; font-weight: bold;color: blue;">ffmpeg</span> <span style="color: #7a0874; font-weight: bold;color: black;">&#91;</span>options<span style="color: #7a0874; font-weight: bold;color: black;">&#93;</span> <span style="color: #7a0874; font-weight: bold;color: black;">&#91;</span><span style="color: #7a0874; font-weight: bold;color: black;">&#91;</span>infile options<span style="color: #7a0874; font-weight: bold;color: black;">&#93;</span> <span style="color: #660033;">-i</span> infile<span style="color: #7a0874; font-weight: bold;color: black;">&#93;</span>... <span style="color: #7a0874; font-weight: bold;color: black;">&#123;</span><span style="color: #7a0874; font-weight: bold;color: black;">&#91;</span>outfile options<span style="color: #7a0874; font-weight: bold;color: black;">&#93;</span> outfile<span style="color: #7a0874; font-weight: bold;color: black;">&#125;</span>...
&nbsp;
Use <span style="color: #660033;">-h</span> to get full <span style="color: #7a0874; font-weight: bold;color: blue;">help</span> or, even better, run <span style="color: #ff0000;">'man ffmpeg'</span></pre></div></div>

<h3>Using ffmpeg</h3>
<p>I have written a small Python <a href="http://www.helyar.net/enc">video encoding script</a> to make encoding as easy as</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;">enc <span style="color: #660033;">-t</span> <span style="color: #7a0874; font-weight: bold;color: blue;">cd</span> file.vob</pre></div></div>

<p>If anyone has any suggestions to improve this, please feel free to post them in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helyar.net/2010/how-to-compile-ffmpeg-from-source/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Remote recursive sha1sum with php</title>
		<link>http://www.helyar.net/2010/remote-recursive-sha1sum-with-php/</link>
		<comments>http://www.helyar.net/2010/remote-recursive-sha1sum-with-php/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 13:29:11 +0000</pubDate>
		<dc:creator>George Helyar</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.helyar.net/?p=495</guid>
		<description><![CDATA[To calculate the SHA-1 sums, display them and make them available for download in a sums.gz file: &#60;?php echo&#40;`find ./some_directory/ -type f &#124; grep -v sums.gz &#124; xargs sha1sum &#124; gzip -c &#124; tee sums.gz &#124; zcat`&#41;; ?&#62; To check the sums: &#60;?php echo&#40;`zcat sums.gz &#124; sha1sum -c -`&#41;; ?&#62;]]></description>
			<content:encoded><![CDATA[<p>To calculate the SHA-1 sums, display them and make them available for download in a sums.gz file:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: black;"><span style="color: #000000; font-weight: bold;color: blue;">&lt;?php</span> <span style="color: #b1b100;color: blue;">echo</span><span style="color: #009900;color: black;">&#40;</span>`find <span style="color: #339933;color: black;">./</span>some_directory<span style="color: #339933;color: black;">/</span> <span style="color: #339933;color: black;">-</span>type f <span style="color: #339933;color: black;">|</span> grep <span style="color: #339933;color: black;">-</span>v sums<span style="color: #339933;color: black;">.</span>gz <span style="color: #339933;color: black;">|</span> xargs sha1sum <span style="color: #339933;color: black;">|</span> gzip <span style="color: #339933;color: black;">-</span>c <span style="color: #339933;color: black;">|</span> tee sums<span style="color: #339933;color: black;">.</span>gz <span style="color: #339933;color: black;">|</span> zcat`<span style="color: #009900;color: black;">&#41;</span><span style="color: #339933;color: black;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>To check the sums:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: black;"><span style="color: #000000; font-weight: bold;color: blue;">&lt;?php</span> <span style="color: #b1b100;color: blue;">echo</span><span style="color: #009900;color: black;">&#40;</span>`zcat sums<span style="color: #339933;color: black;">.</span>gz <span style="color: #339933;color: black;">|</span> sha1sum <span style="color: #339933;color: black;">-</span>c <span style="color: #339933;color: black;">-</span>`<span style="color: #009900;color: black;">&#41;</span><span style="color: #339933;color: black;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.helyar.net/2010/remote-recursive-sha1sum-with-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Improve your SSH with GNU Screen</title>
		<link>http://www.helyar.net/2009/improve-your-ssh-with-gnu-screen/</link>
		<comments>http://www.helyar.net/2009/improve-your-ssh-with-gnu-screen/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 15:59:40 +0000</pubDate>
		<dc:creator>George Helyar</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[screen]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://www.helyar.net/?p=406</guid>
		<description><![CDATA[SSH is a wonderful thing. You can log in to a terminal remotely and securely as well as tunnel traffic through that connection. However, one of the biggest problems with SSH is that as soon as you close the session (or are disconnected), any processes running are killed, which can lead to things like loss [...]]]></description>
			<content:encoded><![CDATA[<p>SSH is a wonderful thing. You can log in to a terminal remotely and securely as well as tunnel traffic through that connection. However, one of the biggest problems with SSH is that as soon as you close the session (or are disconnected), any processes running are killed, which can lead to things like loss of work or inconsistent files. It also means that you can&#8217;t leave things encoding overnight because as soon as you disconnect, it stops encoding. This is where <a href="http://www.gnu.org/software/screen/">GNU Screen</a> is useful.</p>
<p>When screen is open, you can disconnect and reconnect to get the same screen back again. You can also have multiple screens open at once and tab between them. Ctrl+a then c creates a new screen, Ctrl+a then n tabs to the next one and Ctrl+a then k kills the selected window.</p>
<p>This also means that you can resize windows and even the previous text is also resized if it was truncated or wrapped before.</p>
<p>Just add</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #c20cb9; font-weight: bold;color: blue;">screen</span> <span style="color: #660033;">-R</span></pre></div></div>

<p>to your ~/.profile to have it re-open the same screen every time you connect to SSH or, if there isn&#8217;t one running, start one.</p>
<p>You can also add a line to the bottom of your SSH session that tells you which tab you are currently looking at, the date, time and other similar details. This is called the hardstatus line.</p>
<p>I use the following hardstatus line in my ~/.screenrc</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;">hardstatus alwayslastline
hardstatus string <span style="color: #ff0000;color: maroon;">&quot;%{= kw}[%{= kg}%H%{= kw}]%-=%-w%{= kr}{%{= kw}%n %t%{= kr}}%{= kw}%+w%-=[%{= kg}%Y-%m-%d %c%{= kw}]&quot;</span></pre></div></div>

<p>To explain what each part does, I will first give the uncoloured version. %{= __} sets a colour. For example, &#8220;kg&#8221; is black background and green foreground.</p>
<p>If we remove all of these we get</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #ff0000;color: maroon;">&quot;[%H]%-=%-w{%n %t}%+w%-=[%Y-%m-%d %c]&quot;</span></pre></div></div>

<p>%H is a host name<br />
%-= is padding<br />
%-w is all of the windows before the current one<br />
%n %t is the current window number and name<br />
%+w is all of the windows after the current one<br />
%Y-%m-%d is the date<br />
%c is the time</p>
<p>Here&#8217;s how it looks (as always, <a href="http://www.helyar.net/wp-content/uploads/2009/09/screen.png">click</a> to enlarge):<br />
<a href="http://www.helyar.net/wp-content/uploads/2009/09/screen.png"><img src="http://www.helyar.net/wp-content/uploads/2009/09/screen-300x151.png" alt="screen" title="screen" width="300" height="151" class="aligncenter size-medium wp-image-409" /></a></p>
<p>The downside is that scrolling doesn&#8217;t seem to work at all. I don&#8217;t know if it has just been replaced by something internal to screen but I generally use something like shift+page up to scroll up or the scroll bar in PuTTY.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helyar.net/2009/improve-your-ssh-with-gnu-screen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>wget in Windows</title>
		<link>http://www.helyar.net/2009/wget-in-windows/</link>
		<comments>http://www.helyar.net/2009/wget-in-windows/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 18:57:19 +0000</pubDate>
		<dc:creator>George Helyar</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[cygwin]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://www.helyar.net/?p=292</guid>
		<description><![CDATA[wget is a command line utility found on many UNIX like operating systems, particularly Linux, used to download files from the command line. It is available from gnuwin32 but I had major problems trying to get all of its dependencies and in the end gave up with that. As I already have cygwin installed and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.gnu.org/software/wget/">wget</a> is a command line utility found on many UNIX like operating systems, particularly Linux, used to download files from the command line.</p>
<p>It is available from <a href="http://gnuwin32.sourceforge.net/packages/wget.htm">gnuwin32</a> but I had major problems trying to get all of its dependencies and in the end gave up with that. As I already have <a href="http://www.cygwin.com/">cygwin</a> installed and wget installed on that, I decided to just take it from there as these files will run as long as cygwin1.dll and any other dll dependencies are present.</p>
<p>I zipped these files up <a href="http://www.helyar.net/files/wget_1.11.4_cygwin.zip">here</a> (2 MB) for those who do not have Cygwin. All you have to do is extract them to somewhere on your system path environment variable (e.g. C:\Windows\System32) and you should be able to use wget from the command prompt as follows:</p>
<pre>C:\Users\George\Desktop&gt;wget --version
GNU Wget 1.11.4

Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
&lt;http://www.gnu.org/licenses/gpl.html&gt;.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Originally written by Hrvoje Niksic &lt;hniksic@xemacs.org&gt;.
Currently maintained by Micah Cowan &lt;micah@cowan.name&gt;.</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.helyar.net/2009/wget-in-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to set target file sizes in ffmpeg</title>
		<link>http://www.helyar.net/2009/how-to-set-target-file-sizes-in-ffmpeg/</link>
		<comments>http://www.helyar.net/2009/how-to-set-target-file-sizes-in-ffmpeg/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 21:29:39 +0000</pubDate>
		<dc:creator>George Helyar</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[aac]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[x264]]></category>

		<guid isPermaLink="false">http://www.helyar.net/?p=240</guid>
		<description><![CDATA[This script is now available as an ongoing project that can be downloaded. Please see the Video Encoding Project. This post describes the methods and mathematics behind the script. After much searching, I found almost nothing regarding how to target a specific file size with ffmpeg, such as 700MiB to fit on a CD. Almost [...]]]></description>
			<content:encoded><![CDATA[<p>This script is now available as an ongoing project that can be downloaded. Please see the <a href="http://www.helyar.net/enc">Video Encoding Project</a>. This post describes the methods and mathematics behind the script.<br />
<hr />
<p>After much searching, I found almost nothing regarding how to target a specific file size with ffmpeg, such as 700MiB to fit on a CD. Almost everything I found suggested to use a negative bitrate for mencoder, such as -700000. However, this did not work for me at all (even by copying and pasting verbatim). Because of this, I set about doing it manually with some mathematics.</p>
<p>What I am going to do here assumes a single audio stream, a single video stream and nothing else in the output file at all (i.e. no subtitles, no alternate languages, no director&#8217;s commentaries, etc).</p>
<p>When encoding media, audio uses a constant bit rate. This means that you can calculate how much space it will take if you know which bit rate you are using and how long the stream is in seconds. This also means that to know how big the video stream should be, we can calculate how big the audio stream will be and subtract it from the target file size. For example, if the target file size is 350MiB and the audio will take up 30MiB, we know the video should aim to be 320MiB (ignoring overheads in the multiplexing, container headers, etc). We can use the same calculations in reverse to work out an average or constant bit rate from a file size and a length in seconds.</p>
<p>In this example, I will be using <a href="http://www.amazon.co.uk/Dads-Army-Complete-Collection-DVD/dp/B000VA3J7K">Dad&#8217;s Army</a> Series 6 Episode 1 &#8211; The Deadly Attachment. I have already ripped this from the DVD with <a href="http://www.slysoft.com/en/anydvd.html">SlySoft AnyDVD</a> and PgcDemux on Windows. Automating PgcDemux rips is worth a whole entry in itself. Note that I have bought this legally and I do not intend to sell or share it. I just want a copy that I can store on my network and play from any computer. Storing 14 DVD images on hard drives takes quite a lot of space, which is where encoding comes in handy. In fact, some of my box sets contain over 60 DVDs (roughly 270GiB).</p>
<p>&#8212;&#8212;&#8212;-<br />
To install ffmpeg on Debian, it is best to get it from the Debian Multimedia repository. Add</p>
<pre>deb http://www.debian-multimedia.org lenny main
deb-src http://www.debian-multimedia.org lenny main</pre>
<p>to your /etc/apt/sources.list and then run</p>
<pre># apt-get update
# apt-get install debian-multimedia-keyring
# apt-get update
# apt-get install ffmpeg</pre>
<p>&#8212;&#8212;&#8212;-</p>
<p>The first thing we need to do to put this into practice is to get the length of the stream. If you supply the file to ffmpeg without telling it to do anything, it will give you an error. However, this error already contains all of the information we need:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;">$ <span style="color: #c20cb9; font-weight: bold;color: blue;">ffmpeg</span> <span style="color: #660033;">-i</span> da_6_01.VOB
FFmpeg version SVN-r13582, Copyright <span style="color: #7a0874; font-weight: bold;color: black;">&#40;</span>c<span style="color: #7a0874; font-weight: bold;color: black;">&#41;</span> <span style="color: #000000;color: maroon;">2000</span>-<span style="color: #000000;color: maroon;">2008</span> Fabrice Bellard, et al.
  configuration: <span style="color: #660033;">--prefix</span>=<span style="color: #000000; font-weight: bold;color: black;">/</span>usr ...
  built on May  <span style="color: #000000;color: maroon;">3</span> <span style="color: #000000;color: maroon;">2009</span> <span style="color: #000000;color: maroon;">12</span>:07:<span style="color: #000000;color: maroon;">18</span>, <span style="color: #c20cb9; font-weight: bold;color: blue;">gcc</span>: 4.3.2
Input <span style="color: #666666; font-style: italic;">#0, mpeg, from 'da_6_01.VOB':</span>
  Duration: 00:<span style="color: #000000;color: maroon;">29</span>:<span style="color: #000000;color: maroon;">23.90</span>, start: <span style="color: #000000;color: maroon;">0.287267</span>, bitrate: <span style="color: #000000;color: maroon;">5987</span> kb<span style="color: #000000; font-weight: bold;color: black;">/</span>s
    Stream <span style="color: #666666; font-style: italic;">#0.0[0x1e0]: Video: mpeg2video, yuv420p, 720x576 [PAR 16:15 DAR 4:3], 9800 kb/s, 25.00 tb(r)</span>
    Stream <span style="color: #666666; font-style: italic;">#0.1[0x80]: Audio: ac3, 48000 Hz, stereo, 192 kb/s</span>
Must supply at least one output <span style="color: #c20cb9; font-weight: bold;color: blue;">file</span></pre></div></div>

<p>We can see that the duration is 00:29:23.90.</p>
<p>As this is an error, we need to redirect stderr to stdout. This can be done with 2>&#038;1. We then need the line that contains the &#8220;Duration&#8221;, which we can get with grep. We can cut this line up to take the time out.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;">$ <span style="color: #c20cb9; font-weight: bold;color: blue;">ffmpeg</span> <span style="color: #660033;">-i</span> da_6_01.VOB <span style="color: #000000;color: maroon;">2</span><span style="color: #000000; font-weight: bold;color: black;">&gt;&amp;</span><span style="color: #000000;color: maroon;">1</span> <span style="color: #000000; font-weight: bold;color: black;">|</span> <span style="color: #c20cb9; font-weight: bold;color: blue;">grep</span> Duration <span style="color: #000000; font-weight: bold;color: black;">|</span> <span style="color: #c20cb9; font-weight: bold;color: blue;">cut</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">' '</span> <span style="color: #660033;">-f</span> <span style="color: #000000;color: maroon;">4</span> <span style="color: #000000; font-weight: bold;color: black;">|</span> <span style="color: #c20cb9; font-weight: bold;color: blue;">cut</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">'.'</span> <span style="color: #660033;">-f</span> <span style="color: #000000;color: maroon;">1</span>
00:<span style="color: #000000;color: maroon;">29</span>:<span style="color: #000000;color: maroon;">23</span></pre></div></div>

<p>This can be converted into seconds with the formula <code>s' = (h * 60 + m) * 60 + s</code>.</p>
<p>I used a python script to do this and to perform the necessary calculations mentioned earlier. Note that most of this python script is just for the convenience of getopts and that, if needed, it can be cut down significantly at the cost of flexibility. If you always want the same output size and audio bitrate, this script can be simplified to just a couple of lines.</p>
<p>calc_bitrate.py:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;color: black;"><span style="color: #808080; font-style: italic;color: green;">#!/usr/bin/python</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;color: blue;">from</span> <span style="color: #dc143c;color: blue;">getopt</span> <span style="color: #ff7700;font-weight:bold;color: blue;">import</span> <span style="color: #dc143c;color: blue;">getopt</span>, GetoptError
<span style="color: #ff7700;font-weight:bold;color: blue;">from</span> <span style="color: #dc143c;color: blue;">sys</span> <span style="color: #ff7700;font-weight:bold;color: blue;">import</span> argv, exit
&nbsp;
<span style="color: #ff7700;font-weight:bold;color: blue;">def</span> secs<span style="color: black;color: black;">&#40;</span>h, m, s<span style="color: black;color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;color: blue;">return</span> <span style="color: black;color: black;">&#40;</span>h <span style="color: #66cc66;color: black;">*</span> <span style="color: #ff4500;color: maroon;">60</span> + m<span style="color: black;color: black;">&#41;</span> <span style="color: #66cc66;color: black;">*</span> <span style="color: #ff4500;color: maroon;">60</span> + s
&nbsp;
<span style="color: #ff7700;font-weight:bold;color: blue;">def</span> calc_video_bitrate<span style="color: black;color: black;">&#40;</span>target_size, abr, <span style="color: #dc143c;color: blue;">time</span><span style="color: black;color: black;">&#41;</span>:
  target_bytes = target_size <span style="color: #66cc66;color: black;">*</span> <span style="color: #ff4500;color: maroon;">1024</span> <span style="color: #66cc66;color: black;">*</span> <span style="color: #ff4500;color: maroon;">1024</span>
  audio_bytes = <span style="color: black;color: black;">&#40;</span><span style="color: black;color: black;">&#40;</span>abr <span style="color: #66cc66;color: black;">*</span> <span style="color: #ff4500;color: maroon;">1000</span><span style="color: black;color: black;">&#41;</span> / <span style="color: #ff4500;color: maroon;">8</span><span style="color: black;color: black;">&#41;</span> <span style="color: #66cc66;color: black;">*</span> <span style="color: #dc143c;color: blue;">time</span>
  <span style="color: #ff7700;font-weight:bold;color: blue;">return</span> <span style="color: black;color: black;">&#40;</span>target_bytes - audio_bytes<span style="color: black;color: black;">&#41;</span> / <span style="color: #dc143c;color: blue;">time</span> <span style="color: #66cc66;color: black;">*</span> <span style="color: #ff4500;color: maroon;">8</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;color: blue;">try</span>:
  opts, args = <span style="color: #dc143c;color: blue;">getopt</span><span style="color: black;color: black;">&#40;</span>argv<span style="color: black;color: black;">&#91;</span><span style="color: #ff4500;color: maroon;">1</span>:<span style="color: black;color: black;">&#93;</span>, <span style="color: #483d8b;color: maroon;">&quot;s:a:t:&quot;</span>, <span style="color: black;color: black;">&#91;</span><span style="color: #483d8b;color: maroon;">&quot;size=&quot;</span>, <span style="color: #483d8b;color: maroon;">&quot;abr=&quot;</span>, <span style="color: #483d8b;color: maroon;">&quot;time=&quot;</span><span style="color: black;color: black;">&#93;</span><span style="color: black;color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;color: blue;">except</span> GetoptError, err:
  <span style="color: #ff7700;font-weight:bold;color: blue;">print</span> <span style="color: #008000;color: blue;">str</span><span style="color: black;color: black;">&#40;</span>err<span style="color: black;color: black;">&#41;</span>
  exit<span style="color: black;color: black;">&#40;</span><span style="color: #ff4500;color: maroon;">2</span><span style="color: black;color: black;">&#41;</span>
&nbsp;
target_size = <span style="color: #ff4500;color: maroon;">350</span> <span style="color: #808080; font-style: italic;color: green;">#MiB</span>
abr = <span style="color: #ff4500;color: maroon;">128</span> <span style="color: #808080; font-style: italic;color: green;">#kbps</span>
<span style="color: #dc143c;color: blue;">time</span> = <span style="color: #ff4500;color: maroon;">0</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;color: blue;">for</span> o, a <span style="color: #ff7700;font-weight:bold;color: blue;">in</span> opts:
  <span style="color: #ff7700;font-weight:bold;color: blue;">if</span> o <span style="color: #ff7700;font-weight:bold;color: blue;">in</span> <span style="color: black;color: black;">&#40;</span><span style="color: #483d8b;color: maroon;">&quot;-s&quot;</span>, <span style="color: #483d8b;color: maroon;">&quot;--size&quot;</span><span style="color: black;color: black;">&#41;</span>:
    target_size = <span style="color: #008000;color: blue;">int</span><span style="color: black;color: black;">&#40;</span>a<span style="color: black;color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;color: blue;">elif</span> o <span style="color: #ff7700;font-weight:bold;color: blue;">in</span> <span style="color: black;color: black;">&#40;</span><span style="color: #483d8b;color: maroon;">&quot;-a&quot;</span>, <span style="color: #483d8b;color: maroon;">&quot;--abr&quot;</span><span style="color: black;color: black;">&#41;</span>:
    abr = <span style="color: #008000;color: blue;">int</span><span style="color: black;color: black;">&#40;</span>a<span style="color: black;color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;color: blue;">if</span> <span style="color: #008000;color: blue;">len</span><span style="color: black;color: black;">&#40;</span>args<span style="color: black;color: black;">&#41;</span> <span style="color: #66cc66;color: black;">&lt;</span> <span style="color: #ff4500;color: maroon;">1</span>:
  <span style="color: #ff7700;font-weight:bold;color: blue;">print</span> <span style="color: #483d8b;color: maroon;">&quot;Usage: &quot;</span> + argv<span style="color: black;color: black;">&#91;</span><span style="color: #ff4500;color: maroon;">0</span><span style="color: black;color: black;">&#93;</span> + <span style="color: #483d8b;color: maroon;">&quot; [-s &lt;size (M)&gt;] [-a &lt;audio bit rate (k)&gt;] [[hh:]mm:]ss&quot;</span>
  exit<span style="color: black;color: black;">&#40;</span><span style="color: #ff4500;color: maroon;">2</span><span style="color: black;color: black;">&#41;</span>
&nbsp;
time_part = args<span style="color: black;color: black;">&#91;</span><span style="color: #ff4500;color: maroon;">0</span><span style="color: black;color: black;">&#93;</span>.<span style="color: black;color: black;">split</span><span style="color: black;color: black;">&#40;</span><span style="color: #483d8b;color: maroon;">&quot;:&quot;</span><span style="color: black;color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;color: blue;">if</span> <span style="color: #008000;color: blue;">len</span><span style="color: black;color: black;">&#40;</span>time_part<span style="color: black;color: black;">&#41;</span> <span style="color: #66cc66;color: black;">&lt;</span> <span style="color: #ff4500;color: maroon;">2</span>: time_part = <span style="color: black;color: black;">&#91;</span><span style="color: #ff4500;color: maroon;">0</span><span style="color: black;color: black;">&#93;</span> + time_part
<span style="color: #ff7700;font-weight:bold;color: blue;">if</span> <span style="color: #008000;color: blue;">len</span><span style="color: black;color: black;">&#40;</span>time_part<span style="color: black;color: black;">&#41;</span> <span style="color: #66cc66;color: black;">&lt;</span> <span style="color: #ff4500;color: maroon;">3</span>: time_part = <span style="color: black;color: black;">&#91;</span><span style="color: #ff4500;color: maroon;">0</span><span style="color: black;color: black;">&#93;</span> + time_part
<span style="color: #dc143c;color: blue;">time</span> = secs<span style="color: black;color: black;">&#40;</span><span style="color: #008000;color: blue;">int</span><span style="color: black;color: black;">&#40;</span>time_part<span style="color: black;color: black;">&#91;</span><span style="color: #ff4500;color: maroon;">0</span><span style="color: black;color: black;">&#93;</span><span style="color: black;color: black;">&#41;</span>, <span style="color: #008000;color: blue;">int</span><span style="color: black;color: black;">&#40;</span>time_part<span style="color: black;color: black;">&#91;</span><span style="color: #ff4500;color: maroon;">1</span><span style="color: black;color: black;">&#93;</span><span style="color: black;color: black;">&#41;</span>, <span style="color: #008000;color: blue;">int</span><span style="color: black;color: black;">&#40;</span>time_part<span style="color: black;color: black;">&#91;</span><span style="color: #ff4500;color: maroon;">2</span><span style="color: black;color: black;">&#93;</span><span style="color: black;color: black;">&#41;</span><span style="color: black;color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;color: blue;">print</span> <span style="color: #483d8b;color: maroon;">&quot;%d&quot;</span> <span style="color: #66cc66;color: black;">%</span> calc_video_bitrate<span style="color: black;color: black;">&#40;</span>target_size, abr, <span style="color: #dc143c;color: blue;">time</span><span style="color: black;color: black;">&#41;</span></pre></div></div>

<p>A typical usage for this would be <code>./calc_python.py -s 350 -a 128 29:23</code>.</p>
<p>We can then use a combination of these inside a shell script easily. I&#8217;m using bash syntax just to nest the commands into a single line but for compatibility with other shells, backticks (`) can be used and this is what I normally prefer. This script loops through all of the .VOB files in the directory and gives their target video bitrate for a 350MiB output and 128kbps audio.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #000000; font-weight: bold;color: blue;">for</span> vob <span style="color: #000000; font-weight: bold;color: blue;">in</span> <span style="color: #000000; font-weight: bold;color: black;">*</span>.VOB
<span style="color: #000000; font-weight: bold;color: blue;">do</span>
  <span style="color: #007800;">BR</span>=$<span style="color: #7a0874; font-weight: bold;color: black;">&#40;</span>.<span style="color: #000000; font-weight: bold;color: black;">/</span>calc_bitrate.py <span style="color: #660033;">-s</span> <span style="color: #000000;color: maroon;">350</span> <span style="color: #660033;">-a</span> <span style="color: #000000;color: maroon;">128</span> $<span style="color: #7a0874; font-weight: bold;color: black;">&#40;</span><span style="color: #c20cb9; font-weight: bold;color: blue;">ffmpeg</span> <span style="color: #660033;">-i</span> <span style="color: #007800;color: black;">$vob</span> <span style="color: #000000;color: maroon;">2</span><span style="color: #000000; font-weight: bold;color: black;">&gt;&amp;</span><span style="color: #000000;color: maroon;">1</span> <span style="color: #000000; font-weight: bold;color: black;">|</span> <span style="color: #c20cb9; font-weight: bold;color: blue;">grep</span> Duration <span style="color: #000000; font-weight: bold;color: black;">|</span> <span style="color: #c20cb9; font-weight: bold;color: blue;">cut</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">' '</span> <span style="color: #660033;">-f</span> <span style="color: #000000;color: maroon;">4</span> <span style="color: #000000; font-weight: bold;color: black;">|</span> <span style="color: #c20cb9; font-weight: bold;color: blue;">cut</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">'.'</span> <span style="color: #660033;">-f</span> <span style="color: #000000;color: maroon;">1</span><span style="color: #7a0874; font-weight: bold;color: black;">&#41;</span><span style="color: #7a0874; font-weight: bold;color: black;">&#41;</span>
  <span style="color: #7a0874; font-weight: bold;color: blue;">echo</span> <span style="color: #007800;color: black;">$vob</span> <span style="color: #007800;color: black;">$BR</span>
<span style="color: #000000; font-weight: bold;color: blue;">done</span></pre></div></div>

<p>I use this in 2-pass VBR mode with the libx264 video encoder and libfaac audio encoder in an mp4 container just by replacing the &#8220;echo&#8221; line of the above script with the following 2 lines:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #c20cb9; font-weight: bold;color: blue;">ffmpeg</span> <span style="color: #660033;">-i</span> <span style="color: #007800;color: black;">$vob</span> <span style="color: #660033;">-an</span> <span style="color: #660033;">-pass</span> <span style="color: #000000;color: maroon;">1</span> <span style="color: #660033;">-vcodec</span> libx264 <span style="color: #660033;">-vpre</span> fastfirstpass <span style="color: #660033;">-b</span> <span style="color: #007800;color: black;">$BR</span> <span style="color: #660033;">-bt</span> <span style="color: #007800;color: black;">$BR</span> <span style="color: #660033;">-deinterlace</span> <span style="color: #660033;">-threads</span> <span style="color: #000000;color: maroon;">0</span> <span style="color: #660033;">-y</span> pass1.mp4
<span style="color: #c20cb9; font-weight: bold;color: blue;">ffmpeg</span> <span style="color: #660033;">-i</span> <span style="color: #007800;color: black;">$vob</span> <span style="color: #660033;">-acodec</span> libfaac <span style="color: #660033;">-ab</span> 128k <span style="color: #660033;">-ac</span> <span style="color: #000000;color: maroon;">2</span> <span style="color: #660033;">-pass</span> <span style="color: #000000;color: maroon;">2</span> <span style="color: #660033;">-vcodec</span> libx264 <span style="color: #660033;">-vpre</span> hq <span style="color: #660033;">-b</span> <span style="color: #007800;color: black;">$BR</span> <span style="color: #660033;">-bt</span> <span style="color: #007800;color: black;">$BR</span> <span style="color: #660033;">-deinterlace</span> <span style="color: #660033;">-threads</span> <span style="color: #000000;color: maroon;">0</span> <span style="color: #660033;">-y</span> <span style="color: #000000; font-weight: bold;color: black;">`</span><span style="color: #7a0874; font-weight: bold;color: blue;">echo</span> <span style="color: #007800;color: black;">$vob</span> <span style="color: #000000; font-weight: bold;color: black;">|</span> <span style="color: #c20cb9; font-weight: bold;color: blue;">sed</span> <span style="color: #ff0000;">'s/VOB/mp4/'</span><span style="color: #000000; font-weight: bold;color: black;">`</span></pre></div></div>

<p>I have 2 versions of this script, one with &#8220;-deinterlace&#8221; and one without. PAL video (576i &#8211; used in Europe), such as Dad&#8217;s Army needs deinterlacing. NTSC video (480 &#8211; used in North America) usually does not.</p>
<p>For ripping DVDs to H.264 and maintaining the quality, I wouldn&#8217;t use a bitrate lower than 1000k or an audio bitrate lower than 128k stereo. This means that for getting media onto a CD, you probably want no smaller than 350MiB for 30 to 40 minutes or 700MiB for 1 hour or more, depending on your resolution. Also note that I only intend to play these in computers and fitting them onto CDs is just a convenience &#8211; standalone DVD players will not be able to play H.264 or AAC (Blu-ray and HDDVD players may be able to &#8211; mp4 containers and reading CDs would be more of an issue).</p>
<h3>Update:</h3>
<p>I have successfully tested this in a LG BD370 Blu-ray player.</p>
<p>I have not tried actually burning these onto CDs yet so if 2 won&#8217;t fit on a 700MiB CD, even with overburn (because of overheads that were ignored, as stated earlier) then the simplest solution is to just target a smaller file size with something like &#8220;-s 348&#8243;.</p>
<h2>The result</h2>
<p>Dad&#8217;s Army episodes are not all of the same length. Some are several minutes longer than others. The following shows how no matter the size of the input file, they all produce the same size output file:
<pre>$ ll da_5_*.VOB
-r--r--r-- 1 mythtv mythtv 1364660224 2009-06-04 00:01 da_5_01.VOB
-r--r--r-- 1 mythtv mythtv 1360699392 2009-06-04 00:01 da_5_02.VOB
-r--r--r-- 1 mythtv mythtv  956084224 2009-06-04 00:02 da_5_03.VOB
-r--r--r-- 1 mythtv mythtv 1355888640 2009-06-04 00:02 da_5_04.VOB
-r--r--r-- 1 mythtv mythtv 1114351616 2009-06-03 23:59 da_5_05.VOB
-r--r--r-- 1 mythtv mythtv 1034289152 2009-06-04 00:00 da_5_06.VOB
-r--r--r-- 1 mythtv mythtv 1045202944 2009-06-04 00:00 da_5_07.VOB
-r--r--r-- 1 mythtv mythtv 1345318912 2009-06-04 00:00 da_5_08.VOB
-r--r--r-- 1 mythtv mythtv 1391529984 2009-06-04 00:02 da_5_09.VOB
-r--r--r-- 1 mythtv mythtv 1342748672 2009-06-04 00:03 da_5_10.VOB
-r--r--r-- 1 mythtv mythtv 1158017024 2009-06-04 00:03 da_5_11.VOB
-r--r--r-- 1 mythtv mythtv 1157097472 2009-06-04 00:03 da_5_12.VOB
-r--r--r-- 1 mythtv mythtv 1180098560 2009-06-04 00:04 da_5_13.VOB
$ ll -h da_5_*.mp4
-rw-r--r-- 1 mythtv mythtv 352M 2009-06-17 06:18 da_5_01.mp4
-rw-r--r-- 1 mythtv mythtv 352M 2009-06-17 06:55 da_5_02.mp4
-rw-r--r-- 1 mythtv mythtv 352M 2009-06-17 07:30 da_5_03.mp4
-rw-r--r-- 1 mythtv mythtv 352M 2009-06-17 08:08 da_5_04.mp4
-rw-r--r-- 1 mythtv mythtv 352M 2009-06-17 08:44 da_5_05.mp4
-rw-r--r-- 1 mythtv mythtv 352M 2009-06-17 09:21 da_5_06.mp4
-rw-r--r-- 1 mythtv mythtv 352M 2009-06-17 09:58 da_5_07.mp4
-rw-r--r-- 1 mythtv mythtv 352M 2009-06-17 10:36 da_5_08.mp4
-rw-r--r-- 1 mythtv mythtv 352M 2009-06-17 11:15 da_5_09.mp4
-rw-r--r-- 1 mythtv mythtv 352M 2009-06-17 11:54 da_5_10.mp4
-rw-r--r-- 1 mythtv mythtv 352M 2009-06-17 12:29 da_5_11.mp4
-rw-r--r-- 1 mythtv mythtv 352M 2009-06-17 13:05 da_5_12.mp4
-rw-r--r-- 1 mythtv mythtv 352M 2009-06-17 13:41 da_5_13.mp4</pre>
<h2>Update:</h2>
<p>A pure python replacement script is available <a href="http://www.helyar.net/2009/ffmpeg-target-file-sizes-again/">here</a> that simplifies use.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helyar.net/2009/how-to-set-target-file-sizes-in-ffmpeg/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to install VMware Tools on a Linux guest</title>
		<link>http://www.helyar.net/2009/how-to-install-vmware-tools-on-a-linux-guest/</link>
		<comments>http://www.helyar.net/2009/how-to-install-vmware-tools-on-a-linux-guest/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 13:49:05 +0000</pubDate>
		<dc:creator>George Helyar</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://www.helyar.net/?p=221</guid>
		<description><![CDATA[Installing VMware tools on Windows guests is easy. You just select to install it from your VMware client and it appears as a CD. You can then install it as you would any other software. On Linux, it is a bit more difficult. Again, selecting to install it from your VMware client puts it in [...]]]></description>
			<content:encoded><![CDATA[<p>Installing VMware tools on Windows guests is easy. You just select to install it from your VMware client and it appears as a CD. You can then install it as you would any other software.</p>
<p>On Linux, it is a bit more difficult. Again, selecting to install it from your VMware client puts it in the CD drive. However, depending on your distribution, it may not be automatically mounted.</p>
<p>For an IDE virtual CD drive this mount, copy and then unmount would be something like</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #666666; font-style: italic;"># mount -t iso9660 -o ro /dev/hda /media/cdrom</span>
<span style="color: #666666; font-style: italic;"># cp /media/cdrom/VMwareTools-4.0.0-164009.tar.gz /root</span>
<span style="color: #666666; font-style: italic;"># umount /media/cdrom</span></pre></div></div>

<p>For a SCSI, SATA or SAS drive, this would be /dev/sda rather than /dev/hda. The &#8220;a&#8221; here assumes that it is the first drive. The 3<sup>rd</sup> SATA drive would be /dev/sdc, for example. In addition to this, partitions are labelled with numbers (such as /dev/sdc2 for the 2nd partition on the 3rd SATA drive) but this is not an issue for optical media such as CDs.</p>
<p>Now that the VMware tools archive has been copied off, it can be extracted.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #666666; font-style: italic;"># tar -xzf VMwareTools-4.0.0-164009.tar.gz</span></pre></div></div>

<p>Most people add a &#8220;v&#8221; to the options for verbose output but not only do I find it pointless, it also slows down the extraction (particularly over SSH, particularly for archives with a large number of files). You do not need it to tell if an error occurred during the extraction, as it tells you anyway. The &#8220;x&#8221; option is to extract the archive (&#8220;c&#8221; would be to create one), the &#8220;z&#8221; means use gzip (&#8220;j&#8221; would be bzip2) and the &#8220;f&#8221; specifies the archive&#8217;s file name.</p>
<p>Before we install vmware tools, there are some dependencies that we must meet. I am doing this with Debian 5.0.1 AMD64 on a VMWare vSphere (ESX 4.0) host. If you do not meet these dependencies beforehand, you will probably have to break out of the installer with ctrl+c and re-run the whole thing several times, which is not good.</p>
<p>The &#8220;killall&#8221; tool must be installed. You can tell if it is by running <code>which killall</code>. If a path appears, it is installed. If nothing appears, it is not. In Debian, this is not installed by default and is in the &#8220;psmisc&#8221; package.</p>
<p>In addition to this, we will need to compile kernel modules during the configure stage of the installation. This is apparently not always required but I have not met a distribution yet on which it was not required to compile them from source (possibly RHEL?). This means that we will need gcc, make and the Linux kernel headers. To take care of these dependencies run</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;color: black;"><span style="color: #666666; font-style: italic;"># apt-get update</span>
<span style="color: #666666; font-style: italic;"># apt-get install psmisc gcc make linux-headers-`uname -r`</span></pre></div></div>

<p>You may need to update your running kernel if it can no longer find the headers for your running kernel in the repository. You can do this with <code>apt-get dist-upgrade</code>.</p>
<p>Now that you have the dependencies installed, run <code>./vmware-install.pl</code>. You probably just want to say &#8220;yes&#8221; to everything. (<code>man yes</code>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helyar.net/2009/how-to-install-vmware-tools-on-a-linux-guest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing Debian</title>
		<link>http://www.helyar.net/2009/installing-debian/</link>
		<comments>http://www.helyar.net/2009/installing-debian/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 21:14:07 +0000</pubDate>
		<dc:creator>George Helyar</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[debian]]></category>

		<guid isPermaLink="false">http://www.helyar.net/blog/?p=74</guid>
		<description><![CDATA[A couple of posts back, I touched briefly on how I personally install Debian Linux. With a little know how (this post), Debian becomes a far better advertisement for Linux than Ubuntu is, as Ubuntu is no faster than Windows. In fact, Ubuntu out of the box on my computer (Intel E8500, 4GiB of 800MHz [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of posts back, I touched briefly on how I personally install Debian Linux. With a little know how (this post), Debian becomes a far better advertisement for Linux than Ubuntu is, as Ubuntu is no faster than Windows. In fact, Ubuntu out of the box on my computer (Intel E8500, 4GiB of 800MHz RAM, etc) is actually a lot slower than Vista out of the box and as long as you can maintain Windows (i.e. not filling it up with crap), Windows stays in the lead for performance.</p>
<p>For the sake of this post, I will be installing Debian onto a 64bit VMware Server 2.0 virtual machine. If you do this, make sure that if you want sound, you add virtual sound hardware when creating the virtual machine, as I forgot (I&#8217;m sure previous versions of VMware added them by default).</p>
<h2>Stage 1</h2>
<p>Installing Debian is a 2 stage setup, as far as we are concerned. The first part is the actual installer, which takes us up to a working command line install of Linux, perfect for use as a server. The next part installs the applications we want to use as a desktop/laptop computer from the command line and ends in a working graphical desktop. Before we can start, we need to grab the netinst disk image and burn it to a CD (in the case of vmware, simply mount the iso file inside vmware).</p>
<p>To start the install, we turn the machine on with the disk in the drive and boot off it. This takes us to a menu, asking us if we want to do a text install, a graphical install (this menu option is new to Debian 5, though it was available from an &#8220;expert&#8221; mode before) or other options. I will choose the text install as that is what I am used to, though the graphical install should look quite similar.</p>
<p style="text-align: center;"><img src="http://www.helyar.net/wp-content/uploads/2009/02/deb01.png" alt="Install menu" title="deb01" width="660" height="545" class="size-full wp-image-75" /></p>
<p>The Debian installer will prompt us for our language, keyboard layout, locale and so on. This is fairly self explanatory so I will leave it to the reader.</p>
<p>After this, we are asked how we want to partition the hard drive. The easiest thing to do is make sure that you have a block of unallocated space and just use the guided install for unallocated space. You can always go back and change things later if you want to, such as adding a /boot partition or removing a /swap partition. As I am using a new virtual machine with a completely blank disk, I am using the option of &#8220;Guided &#8211; use entire disk&#8221;. You <strong>don&#8217;t</strong> need to wipe your hard drive to install Debian and it is a good idea to set it up before installing with GParted if it is a disk that you already have data on. Just leave a hole in the partition table with GParted and install Debian to that unallocated space in guided mode.</p>
<p>If you are dual booting with another operating system such as Windows, I recommend that you add a 100MB ext2 /boot partition to the start of the drive. This is where GRUB will be installed to and having its own partition means that you can change to a different distribution of Linux or even remove Linux entirely and still keep the ever-useful GRUB on there, with tools like memtest86+.</p>
<p>Remember that you can probably only have 4 primary partitions on 1 drive and that you may want to use an extended partition containing 1 or more logical partitions for the 4th. This is a limit of IDE hard drives but most partitioning software and most SATA hard drives respect this limit.</p>
<p style="text-align: center;"><img src="http://www.helyar.net/wp-content/uploads/2009/02/deb02.png" alt="Partitioning menu" title="deb02" width="660" height="545" class="size-full wp-image-76" /></p>
<p>When you are done, it will ask you twice to confirm that you want to write these changes to the disk:</p>
<p style="text-align: center;"><img src="http://www.helyar.net/wp-content/uploads/2009/02/deb03.png" alt="Partitioning confirmation" title="deb03" width="660" height="545" class="aligncenter size-full wp-image-77" /></p>
<p>It will then install the &#8220;base system&#8221; to the hard disk. This includes things like the Linux kernel and other packages essential for the operating system. If you get the business card CD rather than the netinst CD, you will need to set up your networking before this in the install because they are not on the business card CD and must be downloaded during the installation.</p>
<p style="text-align: center;"><img src="http://www.helyar.net/wp-content/uploads/2009/02/deb04.png" alt="Installing base" title="deb04" width="660" height="545" class="aligncenter size-full wp-image-78" /></p>
<p>After a few minutes, the base system will be installed and you will be asked to set up user accounts. First, you need to set a root password and confirm it. After this, you enter your full name, user name and user password. You will usually be using this user name and password for Linux, switching to root only when you need to make changes like install new software, usually by use of the &#8220;su -&#8221; command.</p>
<p style="text-align: center;"><img src="http://www.helyar.net/wp-content/uploads/2009/02/deb05.png" alt="passwords" title="deb05" width="660" height="545" class="aligncenter size-full wp-image-79" /></p>
<p>Assuming that we are on the netinst CD, we now set up networking so that we can install any additional packages. I suggest that you install using an Ethernet cable and DHCP, as wireless generally doesn&#8217;t work on Linux until you have installed some firmware such as ipw2200 (for Intel 2200 wireless adapters), b43 (for Broadcom wireless adapters), madwifi (for Atheros wireless adapters), etc.</p>
<p>Next, we pick a mirror to download the packages from. If ftp.uk.debian.org does not work for you for some reason or is slow, try using mirrorservice.org. If your ISP is Virgin Media, you may want to try debian.virginmedia.com for an even faster download.</p>
<p style="text-align: center;"><img class="size-full wp-image-80 aligncenter" title="deb06" src="http://www.helyar.net/wp-content/uploads/2009/02/deb06.png" alt="mirror" width="660" height="545" /></p>
<p>This is where my guide gets different from any other guide you may see for installing Debian. At the task selection menu (tasksel), we deselect <strong>everything</strong>. These tasks tend to be bloated with random things that don&#8217;t even match the name of the task and even if you think one sounds like you want it (such as &#8220;Laptop&#8221;), you are probably better off installing the individual packages later on in stage 2 of this guide.</p>
<p style="text-align: center;"><img class="size-full wp-image-81 aligncenter" title="deb07" src="http://www.helyar.net/wp-content/uploads/2009/02/deb07.png" alt="task selection" width="660" height="545" /></p>
<p>Because we have removed everything from the list, only a few small packages need to be downloaded and installed. To be honest, I don&#8217;t know why <em>any</em> have to be, as we didn&#8217;t select any tasks but that just goes to show how tasksel always gives you far more than you want.</p>
<p style="text-align: center;"><img class="size-full wp-image-82 aligncenter" title="deb08" src="http://www.helyar.net/wp-content/uploads/2009/02/deb08.png" alt="task download" width="660" height="545" /></p>
<p>All that is left to do is to install the boot loader, GRUB, to the master boot record of the hard drive. This is what will give us a choice of operating system to run when we turn the computer on each time, assuming that we boot off this hard disk by default.</p>
<p style="text-align: center;"><img class="size-full wp-image-83 aligncenter" title="deb09" src="http://www.helyar.net/wp-content/uploads/2009/02/deb09.png" alt="grub install" width="660" height="545" /></p>
<p>That&#8217;s it for stage 1 and it probably took under 5 minutes to install Debian Linux to your hard drive. Now we can take the CD out of the drive and reboot the machine to the hard drive that we just installed GRUB to.</p>
<h2>Stage 2</h2>
<p>When we reboot the machine, we see GRUB giving us a choice of Debian or Debian (single-user mode). Single user mode is similar to safe mode in Windows. You only really need to use it if the standard mode does not work. If you want, you can remove it from your /boot/grub/menu.lst later and just press &#8220;e&#8221; from GRUB to edit the normal mode and add &#8220;single&#8221; to the kernel line if you ever need single user mode. If you have Windows installed on your computer, it should also have an entry to let you use that and you can change it to the default option inside the menu.lst file if you want, as well as setting the timeout.</p>
<p style="text-align: center;"><img src="http://www.helyar.net/wp-content/uploads/2009/02/deb10.png" alt="GRUB menu" title="deb10" width="666" height="418" class="aligncenter size-full wp-image-84" /></p>
<p>A few seconds after selecting Debian from GRUB, the operating system has loaded entirely and we are at a login prompt. Because we did not install anything, it is all text based at the moment. This would be useful for a server but we probably want a graphical desktop. I&#8217;ve tried using a text-only desktop before and it isn&#8217;t pretty.</p>
<p style="text-align: center;"><img src="http://www.helyar.net/wp-content/uploads/2009/02/deb11.png" alt="text login" title="deb11" width="666" height="418" class="aligncenter size-full wp-image-85" /></p>
<p>You should log in with your main user account and password then, once logged in, run the command &#8220;su -&#8221; and enter the root password to gain super user access. In a Linux command prompt, password fields do not display anything when you are typing them, not even asterisks (*). When you are in a root shell, the prompt should change from a $ to a #.</p>
<p>The first thing to do is add the non-free and contrib repositories to apt. You can use an editor such as vim or nano to edit /etc/apt/sources.list to remove any CDROM lines and add &#8220;contrib&nbsp;non-free&#8221; to the main Debian repository. I don&#8217;t add it to the main deb-src or to updates and as of yet I haven&#8217;t worked out what &#8220;volatile&#8221; is, as it is new as far as I know. Here&#8217;s what the file should look like in vim, with the new text highlighted in red:</p>
<p style="text-align: center;"><img src="http://www.helyar.net/wp-content/uploads/2009/02/deb12.png" alt="vim /etc/apt/sources.list" title="deb12" width="666" height="418" class="aligncenter size-full wp-image-86" /></p>
<p>You should then run<br />
<code>#&nbsp;apt-get&nbsp;update</code><br />
to download the latest package lists, followed by<br />
<code>#&nbsp;apt-get&nbsp;dist-upgrade</code><br />
to upgrade all existing packages, such as the kernel to their latest versions. A reboot may be required here, which you can do easily with <code>#&nbsp;reboot</code> (you can shut down from the command line with <code>#&nbsp;halt</code>).</p>
<p style="text-align: center;"><img src="http://www.helyar.net/wp-content/uploads/2009/02/deb13.png" alt="install list" title="deb13" width="666" height="418" class="aligncenter size-full wp-image-87" /></p>
<p>Now we can begin installing the software to transform this command line into a graphical desktop, using <code>#&nbsp;apt-get&nbsp;install&nbsp;<em>&lt;list&nbsp;of&nbsp;packages&gt;</em></code>. We want to install xorg, the graphics backend and frontend; gnome-core, the simple package for GNOME that comes with no large applications; gdm, the desktop manager for GNOME that lets us log in from a graphical interface among other things; alsa and alsa-oss for the sound and iceweasel for a web browser (this is firefox really). Other options are gnome-themes for some pretty window borders and gnome-backgrounds for some nice desktop wallpapers.</p>
<p>This will start to download and then install all of these packages, which may take a while depending on your internet speed but you are downloading them now rather than downloading the massive list of CDs or DVDs that you would have downloaded if you hadn&#8217;t have used the netinst or businesscard CDs, which will usually contain old packages that need updating anyway.</p>
<p style="text-align: center;"><img src="http://www.helyar.net/wp-content/uploads/2009/02/deb14.png" alt="install progress" title="deb14" width="666" height="418" class="aligncenter size-full wp-image-88" /></p>
<p>Once everything has successfully downloaded and installed, you can start gdm for the first time to turn on the graphical interface. This usually happens automatically on startup so you shouldn&#8217;t have to do it again. The command to start the gdm daemon is:<br />
<code>#&nbsp;invoke-rc.d&nbsp;gdm&nbsp;start</code></p>
<p style="text-align: center;"><img src="http://www.helyar.net/wp-content/uploads/2009/02/deb15.png" alt="start gdm" title="deb15" width="666" height="418" class="aligncenter size-full wp-image-89" /></p>
<p>As soon as this starts, you should see a graphical login prompt:</p>
<p style="text-align: center;"><img src="http://www.helyar.net/wp-content/uploads/2009/02/deb16.png" alt="graphical login" title="deb16" width="656" height="532" class="aligncenter size-full wp-image-90" /></p>
<p>From here you can choose alternative languages, switch between GNOME, KDE, Xfce and so on.</p>
<p>After you log in you should see a working graphical desktop and the installation is complete (ignore my broken sound, I forgot to add a sound card in vmware):</p>
<p style="text-align: center;"><img src="http://www.helyar.net/wp-content/uploads/2009/02/deb17.png" alt="graphical desktop" title="deb16" width="656" height="532" class="aligncenter size-full wp-image-91" /></p>
<p>This is what you would expect from a fresh install of ubuntu but you should notice that it is very snappy and probably takes 30 seconds or less between turning your computer on and having a completely loaded working desktop, without even having to wait for a busy cursor before you can start doing things.</p>
<p>You can watch videos with totem-gstreamer, browse the internet with iceweasel, check your emails with icedove (thunderbird), write code or text files with gEdit, view PDF documents with evince, edit Microsoft office documents with OpenOffice.org, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helyar.net/2009/installing-debian/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Debian 5</title>
		<link>http://www.helyar.net/2009/debian-5/</link>
		<comments>http://www.helyar.net/2009/debian-5/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 14:14:23 +0000</pubDate>
		<dc:creator>George Helyar</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.helyar.net/blog/?p=57</guid>
		<description><![CDATA[Well, my favourite Linux distribution, Debian has just released version 5. If you don&#8217;t know what Debian is, think of it as Ubuntu but easier to customise and much faster, with the added bonus that the Linux community doesn&#8217;t laugh at you when they find out you are using it. I generally do a completely [...]]]></description>
			<content:encoded><![CDATA[<p>Well, my favourite Linux distribution, <a href="http://www.debian.org/">Debian</a> has just released version 5. If you don&#8217;t know what Debian is, think of it as Ubuntu but easier to customise and <em>much faster</em>, with the added bonus that the Linux community doesn&#8217;t laugh at you when they find out you are using it.</p>
<p>I generally do a completely minimum 64bit install from the 150 (ish) megabyte netinst CD and remove every option it gives me, even &#8220;standard system&#8221;. Rebooting then takes you to a command line login prompt where you can log in as root and installing a <a href="http://www.gnome.org/">GNOME</a> graphical desktop is as easy as plugging in a network cable and typing &#8220;apt-get update&#8221; (to download the latest package lists) and then &#8220;apt-get install xorg gnome-core gnome-themes gdm&#8221;. You probably also want to install the &#8220;iceweasel&#8221; web browser, which is Debian&#8217;s name for Firefox to avoid copyright infringement. From there, you have all of the basic features that you would expect to find in Ubuntu but it will run at least 2 or 3 times faster and because you have installed everything yourself, you know exactly what is on there.</p>
<p>See the follow up entry in this blog for full details and step by step instructions:<br />
<a href="http://www.helyar.net/blog/2009/installing-debian/">Installing Debian</a></p>
<p>I didn&#8217;t even notice that the <a href="http://www.debian.org/releases/testing/">testing branch</a> had been renamed from Lenny to Squeeze (both characters from Toy Story, if you are wondering) months ago, though I did notice that Lenny was gradually losing essential packages such as Iceweasel and the Adobe Flash Player plugin which was making it rather hard to use. In future I should probably use the &#8220;testing&#8221; synonym for my repositories rather than a specific release name such as &#8220;Lenny&#8221; or &#8220;Squeeze&#8221;, as I now know that they get quite bad towards the end of their life.</p>
<p>Now I have the choice to either switch to Debian 5.0 or Debian Squeeze (testing). I used the testing branch (Lenny) before because the stable branch (Etch) stays so far out of date, which is fine for servers but not so good for desktops and terrible for laptops, as laptops tend to take a while to get decent hardware support for devices such as WiFi adapters and waiting a year before you can use your laptop is just ridiculous.</p>
<p>Aside from a lack of working drivers for my ATI Radeon HD4870 X2 graphics card, forcing me to use 1600&#215;1200 rather than 1920&#215;1200 and making scrolling down in a window impossibly slow (the page down key still works quickly), I have no hardware problems with Lenny at all, which should mean that I will have no hardware problems with Debian 5.0 out of the box either. I don&#8217;t necessarily want the latest software, just software that works. In fact, a lot of changes made to Linux software frustrate me as they can make things worse.</p>
<p>Because Debian&#8217;s website is a nightmare to navigate unless all you want is the &#8220;base model&#8221; (stable, i386, 31 CDs), here are some links:</p>
<p>Debian 5.0.1 AMD64 netinst can be found <a href="http://cdimage.debian.org/cdimage/release/current/amd64/iso-cd/debian-501-amd64-netinst.iso">here</a> (136 MiB)<br />
Debian Squeeze (testing) AMD64 netinst can be found <a href="http://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/amd64/iso-cd/debian-testing-amd64-netinst.iso">here</a> (131 MiB)</p>
<p>When these links break in a few months (and they will) post a comment and I will update them. Alternatively you can browse around on <a href="http://cdimage.debian.org/cdimage/">http://cdimage.debian.org/cdimage/</a>, which is how I find them in the first place and is far easier than using the main Debian website.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.helyar.net/2009/debian-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

