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

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

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

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

$ 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.wavA 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)
No comments:
Post a Comment