読者です 読者をやめる 読者になる 読者になる

なんとな~くしあわせ?の日記

ClojureとかAWSの設定とかをメモする技術ブログ

wine + Murdoc Cutter + avconvでCMカット



さて、環境がLinuxに変わりTSファイルのエンコードが少し難しくなった。
Avidemuxは未だにAACの音源をTSファイルと同期させて編集することができないくさいので、よいTSファイル編集ツールがないのだ。

WindowsではMurdoc CutterかHDTVtoMPEG2が最良の選択に思える。これらは当然wineで動作する。誰かHDTVtoMPEG2を元にしてLinux用のアプリ作ってくれないかなあと思っている。HDTVtoMPEG2のソースコードは以下にある。作者さんは趣味でこれを作ったみたいだ。
Index of /~balazer/HDTVtoMPEG2

Murdoc Cutterのソースコードは公開されていないが、多分HDTVtoMPEG2を元にしているんじゃないかと私は邪推する。そしてHDTVtoMPEG2はまったくライセンスのことが書かれていない。こういうのはダメだなあと思う。

OpenJane*1しかり、2000年代のフリーウェアはライセンスに対する意識が希薄だったように思う。そのせいで、せっかく作ったソースが簡単に流用されてしまったりするわけである。

wine環境の準備

私はDebian wheezyを使用しているが、パッケージのwineは結構古い。有志が以下の場所でパッケージを準備しているので、それを使うのが一番良いと思う。
Directory listing | Wine (wine-unstable) packages

一応以前ビルドもしているので興味がある方はどうぞ
Debianでwineの最新版をビルド - なんとな~くしあわせ?の日記

Murdoc Cutter

公式サイトからzipをダウンロードし、wineのdrive_c以下に入れておけば動く。
It's a Direct

avconv

どうもffmpegは非推奨パッケージになるらしく、avconvを使わなければいけないらしい。
しかし試しにTSファイルを食わせてみたところ「could not find codec parameters」というメッセージが出てavconvが終了してしまう。う〜ん、この。

追記1:

libavはバギーだから最新版使えばいいよみたいな書き込みがあったので、とりあえずビルドしてみる

1.リポジトリを追加する

 # vim /etc/apt/sources.list
 // この行を追加
 + deb http://www.deb-multimedia.org wheezy main non-free

2.足りない材料をリポジトリから取得する

 # apt-get install libx264-dev libmp3lame-dev libfaac-dev

3.libavをリポジトリからクローンする

libavのリポジトリ一覧はここにあります:Get Libav

前回Fedoraでビルドしたコンフィグを参考にしつつ
ffmpegをまたコンパイル - fedora15で - なんとな~くしあわせ?の日記

また、CPUごとの最適化をここを参考に行います
[Phoronix] AMD Piledriver/Trinity A10-5800K Compiler Tuning

 $ git clone git://github.com/libav/libav.git
 $ cd libav
 $ ./configure --enable-libmp3lame --enable-nonfree --enable-gpl \
   --enable-libx264 --enable-libfaac                             \
   --extra-cflags="-march=k8, -march=k8-sse3, -march=barcelona,  \
   -march=bdver1 -fno-strict-aliasing"                           \
   --arch=x86_64 --enable-small --enable-memalign-hack
 $ make
 $ make install
    • prefixを設定せず、デフォルトでmake install すると、libavは /usr/local 以下に格納される。まあこれはAutotools知ってれば当たり前のことですが。後述のプリセットもそこ以下に入れる必要がある。

案外サクッとビルド出来て終了。「could not find codec parameters」のエラーも出なくなって大満足ですね。

いつものプリセット

いつものプリセットを使いたいのだけれど、また少し変更しなければいけなかった
もうffmpegではないので、プリセットの名前自体違う。

参考:ffmpeg で TS をできるだけ高画質な mp4 へ変換してみた - I’m just another TeXnician.

# libx264-hq-ts.avpreset
level=41
coder=1
flags=+loop
cmp=chroma
me_method=umh
subq=7
me_range=16
g=250
keyint_min=25
sc_threshold=40
i_qfactor=0.71
b_strategy=1
qmin=10
rc_eq='blurCplx^(1-qComp)'
bf=16
bidir_refine=1
refs=6
ec=deblock

上のプリセットのファイルを /usr/local/share/avconv/libx264-hq-ts.avpreset として保存。

エンコード実行!

 $ ~/git/libav/avconv -y -i Namiuchigiwa_no_Muromi_san_#01.ts -f mp4      \ 
   -c:v libx264 -pre libx264-hq-ts -r 30000/1001 -aspect 16:9 -s 1280x720 \
   -bufsize 20000k -maxrate 25000k -c:a libfaac -ac 2 -ar 48000 -b:a 128k \
   -crf 25 -threads 4 -partitions parti8x8+parti4x4+partp8x8+partb8x8     \
   Namiuchigiwa_no_Muromi_san_#01.mp4

これで環境構築からエンコード実行までバッチリですね。はい。

エンコードの成績

元ファイルサイズ    :1.5GB
エンコ済みファイルサイズ:109MB
圧縮率         :7%
圧縮時間(秒)      :734.29

*1:Delphi言語で作成された2ちゃんねるブラウザ。JaneStyleの元になった。あのライセンス文はさすがに適当すぎると思う。