2010年6月18日金曜日

VLC は諦めて HandBreak にします

しばらく前に、VideoLAN、OSX版VLCプロジェクト終了の危機 - 開発者不足が原因と報じられていましたが、いよいよこれが現実のものになったようです。VLC 1.0.6 がリリースされていますが、Mac OS X 版のバイナリは一向に公開されません。

VLC は巨大なソフトウェアで、ソースコードから自分で make するのは途方もなく大変です。正直、そこまでやる元気はないです。

また、私が使用していた VLC 1.0.3 から 1.0.5 までMPEG4-AAC エンコーダのバグ (※) で、音が割れるという障害が発生していましたが、これも一向に修正される気配がありません。

※ 同一の .ts ファイルから MPEG2 Video + MPEG Audio の設定で MPEG2 プログラムストリームを生成したときは、音は割れませんでした。

生 .ts を保存し続けるには HDD の容量が厳しくなってきたので、これからはHandBreak というソフトでエンコードすることにします。日本語版もあります。コマンドライン版も配布されているので、こちらを使えば Automator を使ってエンコードできます。

HandBreadkCLI は /usr/local/bin にインストールされているものと仮定します。以下のようなサービスを Automator で作って、「iPhone 用にエンコード」とでも名前を付けて保存しておきます。

以下はコピペ用のコードです。お好みで、ビットレートをいじるなり、2パス解析をやらせるなりしてください。

HANDBRAKE=/usr/local/bin/HandBrakeCLI
SIZE='--width 480 --height 272'
VIDEO='--format m4v --vb 896'
AUDIO='--ab 128 --arate 48'
FILTER='--deinterlace slow'
ENCODER='--encoder x264 --aencoder faac'
X264_OPTS="--x264opts 'level=30:cabac=0:ref=2:mixed-refs=1:analyse=all:me=umh:no-fast-pskip=1'"

while [ $# -gt 0 ] ;
do
    FN=`basename "$1" .mpg`.m4v
    DIR=`dirname "$1"`
    cd "$DIR"
    $HANDBRAKE $ENCODER $VIDEO $X264_OPTS $SIZE $AUDIO $FILTER -i "$1" -o "$FN" \
        > /dev/null 2> /dev/null
    shift
done

4 件のコメント:

  1. VLC 新しいのでてますね
    V1.1.0

    返信削除
  2. tsからmpg(ps)への変換にはやはりVLCを使っておられるのでしょうか?
    でなければ上のスクリプトはbasename のmpgのところがtsの間違いではないでしょうか??
    VLC1.1.0が出ていることを、報告しましたがVLC1.1.0は64bit化されたアプリのようで、変換作業が5〜10%高速化されました。ただし次のような問題がありました。
    ts->mpg(ps)問題なし。
    mpg->mp4 問題あり。動画はできるが、音声(AAC)がでない(QuickTime Player& iPad)。QuickTime 7ではちゃんと再生される。

    一応そのスクリプトを載せておきます。



    #!/bin/sh
    VLC=/Applications/VLC.app/Contents/MacOS/VLC
    OUTPUT=`basename ${1} .mpg`.mp4
    SIZE="width=480,height=270"
    ASPECT="canvas-aspect=1:1"
    FPS="fps=29.97"
    CROPPADD="cropbottom=2,paddtop=2,paddbottom=2"
    X264_OPTS="profile=baseline,level=30,keyint=30,bframes=0,ref=1,nocabac"
    VIDEO="venc=x264{$X264_OPTS},vcode=h264,vb=1536"
    AUDIO="acodec=mp4a,ab=128"
    OPTS="deinterlace,audio-sync"
    MUX="mux=mp4"

    $VLC --intf=dummy --sout="#transcode{$SIZE,$FPS,$ASPECT,vfilter=croppadd{$CROPPADD},$VIDEO,$AUDIO,$OPTS}:standard{$MUX,dst=$OUTPUT,access=file}" ${1} vlc://quit

    mv ${1} $HOME/.Trash/

    返信削除
  3. massaさん、コメントありがとうございます。
    説明が足りませんでした。私のやり方では、tssplitter_lite で目的のストリームを抽出した後、Windows 用のMPEGエディタで .ts ファイルをカット編集しています。編集後の出力は、.mpg(ps) 形式にしています。

    ご指摘の VLC 1.1.0 で音声が出ないという問題ですが、HandBreak でも同様の障害が発生しています。(まだ試していませんが) これらのソフトは、同じスプリッタやエンコーダを使用しているため、どちらを使用しても状況は変わらないと思います。なお、カット編集後は支障なくエンコードできています。

    返信削除
  4. なるほど。

    僕の場合、生tsをVLCでpsにします。その後VLC(1.0.5)でmp4などにしています。この時、Handbrakeを使っても目的のファイルはできますが、同じ品質の動画ファイルを作るのに、Handbrakeは多少時間がかかるようです。音などはちゃんとでています。

    返信削除