Monday, December 20, 2010

backup data disk

Links: command line howto

It seemed there should be an easy way to back-up copies of data disks. Of course, one can just copy the files to the system, and then create another DVD, but it makes sense there should be a more efficient way to duplicate data disks for back-ups. I found a way that takes only two commands.

terminal commands
It appears difficult to get started without at least copying the DVD data to the drive in the form of an .iso. Still, an .iso is more efficient than copying over all of the files and creating a new iso. Start by putting the data DVD into the drive and unmount it if it auto-mounts. Next,eg:
$ dd if=/dev/hdc of=somename.iso
On some systems, this might be
$ dd if=/dev/sr0 of=somename.iso
Now that we have the .iso, we can just burn as many copies as we'd like.

Sunday, December 19, 2010

ffmpeg update

Links: Ubuntu tutorial

2011-11-21 update: NEVER blow out your old ffmpeg when compiling a new ffmpeg until you first determine if you need to update your x264 to compile the newer ffmpeg version (during ./configure). x264 requires that ffmpeg (eg. your old version) already be installed to provide lavf support during x264 assembly, a mind-bendingly stupid developer Catch-22. Without lavf, ffmpeg is as useful as a text editor when it comes to AV files. After updating the x264 SUCCESSFULLY, then you can blow-out your old ffmpeg version.

2011-09-01 update: mencoder will not open without libdirac present. That's the BBC one I talk about below. A good time to build it is when doing the ffmpeg compile. Then both ffmeg and mencoder can use it. For this, add "--enable-libdirac" to the stuff I have below in the ffmpeg configure line.
I recently upgraded/replaced an installed ffmpeg package. The idea was cell phone interoperability. The previously installed ffmpeg package wasn't apparently compiled with amr, 3gp, or 3gpp file support, so that I couldn't translate these files generated by my cellphone. Upgrading ffmpeg turned-out to be a trip down the rabbit hole, so posting here for posterity.

Note: Zenwalk installs lib modules in /usr/lib. The newly compiled libs installed to the standard /usr/local/lib. Solution: I left the old Zenwalk modules in /usr/lib but removed softlinks in /usr/lib. I then made new softlinks in /usr/lib, but these one point to the new modules in /usr/local/lib. To restore the original Zenwalk installation, just recreate softlinks in /usr/lib that point to the old modules in /usr/lib and delete the ones pointing to /usr/local/lib.

libx264
VideoLan's libx264 is the backbone of ffmpeg. When compiling ffmpeg, if ffmpeg doesn't detect a recent version of libx264, it will exit and request that a more recent version be built. Daily libx264 builds are available for download at the VideoLan site. The difference between libx264 (and libxvidcore below) and most other modules is in being assembled, rather than compiled. Assembly takes advantage of machine-level instruction efficiency when encoding video. Accordingly, I downloaded and installed the yasm assembler before configuring libx264 . My configure line for libx264 then looked something like:

$ ./configure --mandir=/usr/man --enable-yasm --enable-visualize --enable-shared

libxvidcore
Libxvidcore is a codec with similar importance to libx264. The source for it was easily located at xvid.org, and then downloaded. After untarring on my drive, I located Linux source a couple directories from the top, in build -> generic. Googling around, I found conflicting information about whether or not libxvidcore could be assembled or compiled. Running $ ./compile --help also did not provide a solid answer. Eventually, I just compiled it without any selected configuration options, though I would have preferred to assemble it, if it had been clear how to do so.

libschroedinger
This is for the BBC's Dirac encoder. Even though I was using the most recent ffmpeg from an svn repository, I couldn't get ffmpeg to properly recognize libschroedinger. Eventually, I took libschroedinger out of my ffmpeg configure line.

other updates
During configuration of ffmpeg, prior to the make phase, other updates were also requested by ffmpeg. These were the libtheora open-source encoder, swscale, and opencoreamr. Opencore
is a downloadable Sourceforge project, swscale comes inside ffmpeg source, and libtheora source is found in the downloads portion of their site. It appeared that I didn't need to update libspeex during this particular ffmpeg upgrade. Another nice thing is that libfaad and libfaad-bin are nowadays incorporated into ffmpeg and no longer need to be separately compiled.

ffmpeg & configure line
Finally, after completing all updates to supporting modules above, I located the svn URL at the the ffmpeg download page, and retrieved the most recent ffmpeg source code:
$ svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg

The final configure line, the configuration which resulted in a working ffmpeg installation, is below. It's long and will wrap several lines in this blog, but it's actually a single terminal command:
$ ./configure --mandir=/usr/man --enable-shared --disable-static --enable-pthreads --enable-x11grab --enable-swscale --enable-libfaac --enable-libmp3lame --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-gpl --enable-postproc --disable-ssse3 --enable-libopencore-amrwb --enable-libopencore-amrnb --enable-yasm --enable-version3 --enable-nonfree --arch=i686 --cpu=i486

updated library list
I had to manually link these to /usr/local/lib. Ffmpeg sought them in /usr/lib
libpostproc
libavcodec
libavcore
libavdevice
libavfilter
libavformat
libavutil
libpostproc
libspeex
libswscale
libtheoradec
libtheoraenc
libx264
libxvidcore

Edit: this easily could have been avoided by adding a line in /etc/ld.so.config.d and then running ldconfig, or by adding --prefix=/usr to the $ ./configure of ffmpeg

final tally
The entire ffmpeg update process took most of a weekend, but ffmpeg seemed to work without a hitch following completion. In fact, it seemed to run faster, perhaps due to using an assembler for libx264. After the update, I quickly converted a .3gpp cell phone file to a .wav:
$ ffmpeg -i recording36180.3gpp -vn -acodec pcm_s16le -ar 44100 -ac 1 lecture_03.wav
A list of the required actions to update ffmpeg:

  • yasm - download, compile, install

  • libx264 - download, assemble, install

  • libxvidcore - download, compile, install

  • libopencore - download, compile, install

  • libtheora - download, compile, install

  • ffmpeg - svn download, compile, install

  • library linking (likely avoidable for those with "ld" knowledge)