【bash】ワイルドカードが使えないコマンドでワイルドカードを使う
ワイルドカードとは、複数のファイルを一気に指定するのに使う記号で、たとえば任意の文字列を表す「*」や任意の1文字を表す「?」が代表的だ。たとえばカレントディレクトリのjpgファイルをpictureというディレクトリへ移動するときは、次のようにする。
mv *.jpg picture
しかし一部のコマンドではワイルドカードを使うことができない。たとえばlameやps2pdfではワイルドカードは使えない。「カレントディレクトリのmp3ファイルをすべてデコードする」といった場合は困る。
こういうときは、doループで処理することができる。doループをワンライナーで使う方法は以前紹介した。
これとバッククオート(囲った内部のコマンドの結果を表す)を用いて次のようにすれば、lsとワイルドカードで指定したカレントディレクトリ下のファイルを処理することができる。
for file in `ls *.mp3` ; do lame --decode $file ; done
これを改行してスクリプトとして書くと以下のようになる。
for file in `ls *.mp3`
do
lame --decode $file
done
【cygwinで動画編集】2.ffmpegのインストール
lameをインストールした前回に引き続き、ffmpegをインストールしてみよう。
ffmpegもソースからビルドしなければならず、依存するパッケージもたくさんあるが、よくまとまったサイトがたくさんあるのでそちらを参照していただきたい。
僕がインストールしたときに困ったのは、lameが読み込まれないということだ。最悪オプションから--enable-libmp3lameを外せばインストールできるが、それでは音声が圧縮できないので困る。
これについてはlibmp3lame関係のパッケージを/usr/binに移したところ、うまくmakeできた。
さて、このmakeだが、かなり時間がかかる。はっきり覚えていないが1時間くらいかかったかもしれない。
さて、ビルドが終われば晴れてffmpegが使えるようになる。
【cygwinで動画編集】1.lameとflac
動画や音声ファイルはそのままではとても容量が大きいので、通常は圧縮処理されて容量が抑えられており、その圧縮処理をエンコードという。
有名なエンコーダにはmp3のlame、mp4などのffmpegがある。これらはwindowsのCUIやさまざまな動画編集ソフトにも含まれているが、cygwinでもffmpegが使えるようにしたかった。そこで結構いろいろひっかかったのでまとめて行こうと思う。
まず、音声ファイルを処理するためにlameが必要になる。lameはapt-cygではインストールできず、そういった場合はソースコードをダウンロードしてmakeでコンパイル、ビルドすることになる。cygwinPortsというものを使えばできるらしいが、うまくいかなかった。
一般的に、ソースコードからのビルドは次の手順で行う。
1.wget http://sample.com/source.tar.gzをダウンロードする
2.tar zvcf source.tar.gz
3.cd source
4. ./configure --prefix=/install/path
5.make
6.make install
1はsourceforgeのことが多い。うまくできなかったらブラウザからダウンロードしてもよい。またgitHubなどで配布されているパッケージの場合は
git clone
の場合もある。この場合はtarで解凍する必要はない。
4はインストール先をprefixで選ぶ。"/usr"や"/usr/local"が多い。「configureというスクリプトが用意されており、このスクリプトでmakefileを生成する」というのは慣習になっているようだ。
5,6は重複しているわけでなく、makeしてからmake installを実行する。これも慣習のようだ。
さて、lameの話にもどろう。lame以外で必要なパッケージは参考サイトを参照してもらって、lameのインストールについては以下のようにすればできる。
wget http://sourceforge.net/projects/lame/files/lame/3.99/lame-3.99.5.tar.gz
cd lame-3.99.5
configure
make
make install
lameの場合、makeでエラーが出る。一つ目は
inlining failed in call to always_inline '_mm_sqrt_ps': target specific option mismatch
というものだ。これは参考サイトError building mingw-w64-lame · GitHubの通り
sed -i -e '/xmmintrin\.h/d' configure
で回避する。
次に、_O_BINARYが宣言されていないといった旨のエラーが出る。これは以下のサイトの通り修正する。具体的には、その変数_O_BINARYが使用されている箇所を削除してしまう。
Windows(Cygwin)でも mpd + ncmpcppを使いたい - Qiita
これでビルドが通り、lameが使えるようになった。
ちなみに、lameによるmp3は非可逆圧縮と呼ばれる方式になっている。簡単に言うと、周波数が大きい領域の情報を切り捨てて圧縮しているので、圧縮したmp3から元の音声を100%復元することができない。
音声の圧縮にはflacに代表される可逆圧縮の方式もある。これは圧縮したあとのファイルから元の音声を100%復元することができ、mp3の次に普及するのではと注目されている。
そんなflacのコーデックだが、これはインストールはとても簡単で、apt-cygでインストールすることができる。