Ubuntu 8.10でflv,mp4,swfから音楽を抽出

swfからmp3の抽出ができるとうれしいのですが、Ubuntu 8.10のffmpegでは、swfファイルの処理ができない模様。
Ubuntu 8.04 Hardy 対応のmedibuntuのレポジトリからffmpegをインストールすればできるらしいですが、8.10ではインストールそのものがうまくいきませんでした。
うーん、やるなら自前でコンパイルするしかないか…
できればパッケージ管理から離れたくないけど、今度トライしてみます。

Ubuntu 8.10でflv,mp4から音楽を抽出 | 君のてのひらから

いろいろトライしてみた結果をまとめます。

ffmpegをいろいろなコーデックに対応した版にする

iPod用の動画変換などを見据え、ffmpegをmp3,mp4に対応したものにすることにします。 手順はUbuntuのフォーラムにありました。 HOWTO: Install and use the latest FFmpeg and x264 - Ubuntu Forums

日本語訳がてら手順を示します。


現在のffmpegをアンインストール

sudo apt-get purge ffmpeg x264 libx264-dev

x264, ffmpegをmakeするために必要なものをインストール

sudo apt-get update
sudo apt-get install build-essential subversion git-core checkinstall yasm texi2html libfaac-dev libfaad-dev libmp3lame-dev libtheora-dev libxvidcore4-dev

x264: gitでソースをダウンロード→makeして、パッケージ管理に取り込みつつインストール

cd
git clone git://git.videolan.org/x264.git
cd x264
./configure
make
sudo checkinstall --fstrans=no --install=yes --pkgname=x264 --pkgversion "1:0.svn`date +%Y%m%d`-0.0ubuntu1" --default

ffmpeg: subversionでソースをダウンロード→makeして、パッケージ管理に取り込みつつインストール

cd
svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-postproc --enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-libxvid
make
sudo checkinstall --fstrans=no --install=yes --pkgname=ffmpeg --pkgversion "3:0.svn`date +%Y%m%d`-12ubuntu3" --default

swf用のツールをインストール

swfからmp3を抽出するためのswfextractをインストール

sudo apt-get install swftools

音楽抽出用のシェルを更新

前回作成したmusic_split.shを更新しました。 ご利用は自己責任で。

music_split.sh

#!/bin/sh
# music_split.sh
# -----------------------------
#                 by Takuya Y.
# http://yourpalm.jubenoum.com/
# -----------------------------
# flv -> mp3, mp4 -> m4a, swf -> mp3
# depends on "ffmpeg" and "swfextract" 
 
MUSICDIR=$HOME/Music

for FLV in `ls *.flv`
do
    BASE=`basename $FLV .flv`
    echo "======================================="
    echo "$FLVからmp3を抽出..."
    echo "======================================="
    ffmpeg -i $FLV -acodec copy $BASE.mp3
    echo "======================================="
    echo "完了"
    echo "======================================="
done

for MP4 in `ls *.mp4`
do
    BASE=`basename $MP4 .mp4`
    echo "======================================="
    echo "$MP4からaacを抽出..."
    echo "======================================="
    ffmpeg -i $MP4 -acodec copy -vn $BASE.m4a
    echo "======================================="
    echo "完了"
    echo "======================================="
done

for SWF in `ls *.swf`
do
    BASE=`basename $SWF .swf`
    echo "======================================="
    echo "$SWFからmp3を抽出..."
    echo "======================================="
    swfextract -m $SWF -o $BASE.mp3
    echo "======================================="
    echo "完了"
    echo "======================================="
done

echo "======================================="
echo "音楽フォルダにmp3ファイルを移動..."
echo "======================================="

mv *.mp3 $MUSICDIR

echo "======================================="
echo "完了"
echo "======================================="

echo "======================================="
echo "音楽フォルダにm4aファイルを移動..."
echo "======================================="

mv *.m4a $MUSICDIR

echo "======================================="
echo "完了"
echo "======================================="

exit 0

シェル実行

初めて作成したら、実行権限をつけておきましょう。

chmod 755 music_split.sh

そして、$HOME/nico配下にflv/mp4/swfがある状態でシェルを実行します。

./music_split.sh

すると、$HOME/Music配下にmp3/m4aファイルができあがっているはずです。