携帯動画変換君+新FFmpegでWebM動画へ変換

携帯動画変換君+新FFmpegでWebM動画へ変換
WebM動画の作成にはコマンドオプションを習得する必要はあるがベスト
(2010.10.23作成, 10.11.07更新)
WebM方式動画は、最近Google がHTML5対応ブラウザ向けに規格したウェブ配信用途
 のオープン動画で、ビデオにVP8、音声に Ogg Vorbisを使い、それらを格納するコンテ
 ナはMatroskaベースのWebMとなっている。

WebM動画の作成(WebM動画へ変換)ツールには、Miro Video Converter, Free WebM
 Encoder, Wildform Fix WebM β, WebM Quicktime ComponentやXMedia Recodeが
 あるが、解像度の変更が出来ない物とか、データレートの調整が困難な物が多く、使
 い辛い(「WebM動画の作成(変換)ツール」を参照)。    
 特にFFmpegベースの動画編集・変換ソフトXMedia Recodeは、高度な設定が GUI
  操作で可能で使い易く期待したのだが、現時点(バージョン2.2.6.8)ではWebM動画
  への変換は残念ながら映像のデータレートを上手く調整出来ないと云うバグがある。
 <追記>XMedia Recode 2.2.9.7ではこの不都合は解消した!
これらツールと比べて使い込むにはコマンドオプションを習得する必要はあるが、WebM
 対応の最新FFmpegを利用した携帯動画変換君を使用すれば、基本的な変換項目の
 自由な設定が可能だ。
 そこで今回はFFmpeg rev.25287を用いてWebM動画を作成し、設定をカスタマイズする
  方法と出力される動画の成績についてメモした。
 マシンは、Intel Core 2 Quad Q6600(2.40GHz)、DDR2(PC2-6400,6GB)、GeForce
  9600GT(VRAM 512MB)の自作PCを使い、
  実行環境は64ビットWindows 7 Professionalで検証した。
 
 1. 携帯動画変換君+新FFmpeg の構築方法
  携帯動画変換君の従来の簡易使用法は  こちらを参照。 
  今回は携帯動画変換君でWebM対応の新しいFFmpegを使用出来るようにする為に、
   携帯動画変換君を改造せずに、最新のFFmepgをビルドし配布している「お気に入り
   の動画を携帯で見よう」さんから入手した
  1) WebM対応の FFmpeg rev.25287(ffmpeg_bin_core2-25287.zip、Core2最適化版)
  2)「携帯動画変換君で、WebM(VP8)動画」のカスタマイズされた Transcoding.ini を模
    倣して作成したプリセット[Item0][Item3]を追加して自作した設定ファイル
   を共存する方式で構築した。
   即ち、携帯動画変換君(3GP_Converter034.zip)を解凍後
   1)「cores」フォルダに、ffmpeg_bin_core2-25287.zip解凍後の ffmpeg.exeを new_ffmpeg
     .exeとリネームしてコピー(元の ffmpeg.exeと共存)。
 
   2)「default_setting」フォルダに、下記の如くメモ帳で編集したWebM変換用の設定ファ
    イルを Transcoding_WebMx4.ini と命名して追加(元の各種Transcoding....iniと共存)。
 
    <%AppPath%> は \cores\new_ffmpeg を指定。
    -s(解像度)、-vbと-ab(データレート)等に目的の値を入力。
    -deinterlaceでインターレース解除の設定も行った。
    筆者の環境Core 2 Quadへの対応を期待して-threads 3から-threads 4へ変更。
    -bt(ビデオのビットレートの誤差の設定: 1-Passでは目標平均ビットレート値から
     どれ位外れることを許すかの指定)は、2倍値とした。
 
 Transcoding_WebMx4.iniの内容 ページ表示
 
 2. WebM方式動画への変換手順
  携帯動画変換君からの書き出しは、通常の方法と同様に実行する。即ち、
   Setup.exeで「変換君」設定ファイルセレクターを起動して、作成しておいた「=WebM
    4コア用。FFmpeg r25287=」を選択し「設定」をクリック。
   起動した「携帯動画変換君」で目的の自作したプリセットを選択し、出力ディレクトリ
    を指定。
   最後に素材を画面にドラッグして登録すれば直ちに変換を開始する。
    複数個を登録すれば順次遂行される(変換中に追加登録も可能)。
   新FFmpegを使用した場合は「処理中のファイルを中断」 ボタンは無効だ。    
   初めに、素材B(リッピング後の無劣化映像1920x1072のIDX+SUBとSSA字幕トラッ
    ク付きH.264_AC3.mkv)を用い、
 
    プリセット [Item2]:最終目標の解像度:640x360(16:9)、ビットレート映像:654Kbps、
     音声: 96Kbpsに設定して出力した。
     下図は素材F:MPEG2-TSを一括変換した時のものを示す。
 
 
 3. 出力したWebM方式動画の情報
   素材と同じ名前で指定したフォルダに出力される。
   Media Info 0.7.34で解析された動画ファイル情報は以下の如し。
 
   映像ビットレートはやや低めに、音声は目標のビットレートで出力された。
    *別の素材G:MPEG2-TS(MPEG2_AC3,1920x1080、29.970fps、35Mbps) 9個を設
      定の [Item3]映像ビットレート654kbps、音声ビットレート96kbpsで変換したところ、
      映像は720x406、23.976fps、605〜620kbps(平均614kbp)とバラツキは少なく低
      めに出力され、音声は 44.1KHz、96Kbpsと目標値で出力した。
     そこで、映像目標値の6.5%増(697kbps)に設定したら645〜660kbps(平均655kbp)
      で出力した。
      調整困難なWildform Fix WebM 0.9βやXMedia Recode 2.2.6.8とは異なり、映像
       ビットレートの微調整が可能だ \(^o^)/
      なお、この解像度では500kbps以下は目標値で設定、600〜1500kbsでは高くな
      るに連れ6.5%よりも増量する必要があった(下記参照)。
 
 4. WebM方式動画への変換に要する時間
     変換に要した時間はこのFull HD素材Bにおいては、
      -threads 3の設定では実収録時間の1.8倍位必要だった。
       -threads 4へ設定を変更したら変換時間は 8〜14(平均11)% 短縮出来た。
     そこで、別の素材C, D, Eを用いて解像度は変更せず、映像ビットレートの目標値
       素材C)は654kbps、素材D)とE)は436Kbpsとして変換時間を検討した。
     携帯動画変換君+新FFmpegでは、使用しているのはCore2Quadなので本当は4
      コアだが・・・スレッド数を増やすとCPU使用率が上がるようなので8コアの設定で
       も検証してみたところ、コア数に応じて変換速度は速くなり、-threads 8の方が
        -threads 4よりも僅かに速いようだ。
 

素材
 変換ツール
C) MP4:H.264_AAC
(映像720x408,2.0Mbps
 音声48.0KHz,224kbps)

実収録時間: 3分32秒
D) MPEG2
(640x272,8.0Mbps
 48.0KHz,384kbps)

収録時間:1分07秒
E) MP4:H.264_AAC
(520x328,2.0Mbps
 48.0KHz,196kbps)

収録時間:0分30秒
携帯動画変換君
+新FFmpeg
25287
-threads 2
4分13秒
0分49秒
0分32秒
-threads 4
3分12秒
0分38秒
0分25秒
-threads 8
3分06秒
0分36秒
0分22秒
     なお、携帯動画変換君+新FFmpeg(-threads 4で実行)は検討した6種類の
      WebM作成ソフトの中で最速だった(別記を参照)。
 
 5. 出力されたWebM方式動画の再生
  A.ブラウザによるWebM動画の受信
   現在 Opera 10.60以降、Google Chrome 6以降とFirefox4.0Beta以降が HTML5
    WebMに対応している。
    Safari 5.02は未対応だが、IExplorer 9はWebM for IE9の導入で再生可能。
    但し、IExplorer 9+WebMIE9, Opera 10.61とFirefox 4.0b6はサーバが.Mac iDisk
     の場合は再生出来ない。
    IExplorer 6以降+Google Chrome Frame は、サーバ側でmetaタグが記載され
     ていないと視聴出来ないが当サイトでは視聴可能。
    詳細は、「WebM動画のHTML5配信と再利用」を参照。
   1)各種WebM作成ソフトとの画質比較については、別記のこちらを参照。
    同じ最終目標値で出力出来ないソフトが多いため比較は難しいが、携帯動画変
    換君+新FFmpegで変換した場合の映像画質はマズマズだった。
   2)WebM方式動画の帯域比較
    携帯動画変換君+新FFmpegを用いて、Corel Ulead VideoStudio 12 Plusで編集し
    たツアー旅行のオープニング映像AVCHD(1920x1080,H.264:10.9Mbps, 29.970fps、
    AC3:48.0Khz, 384Kbps)を WebM動画(解像度:720x406)に変換した。
    複数の目標データレートを設定して出力されたビットレート映像:306〜986Kbps、
    音声:48〜192Kbpsの動画を比較供覧した。
 
Transcoding_WebMx4_Bandwidth.iniの内容 ページ表示
 
携帯動画変換君
+新FFmpegで変換
WebM動画の帯域比較
Xserverは ここから入場

自宅ミラーサイトは こちら
    画質は、映像ビットレート450Kbxs迄は動きの激しいシーンでのノイズやボケが気
     になるが、649Kbps以上は上昇するにつれてマズマズ〜良好となる。
  3)ブラウザの差異による縦横比表示の正当性
 
ハイビジョン(16:9=1.77)からの
非規格サイズ(520x328=1.59)
WebM動画の配信試験
Xserver こちら
     Full HDのMPEG2から変換した非規格ビスタサイズ(520x328)では何らかの方策
     (-fixaspectはエラーとなる。下記 [Item1] の -aspect指定)を講じないと、
     Opera 10.61とFirefox 4.0b6で再生すると横長に表示(→584x329)され正当に
      表示出来ない。
      ・・・videoタグにサイズを指定しても元サイズで表示出来ない Y (>_<、)Y
     一方、Google Chrome 6.0.472.55は非規格の元サイズでも表示が可能。
  追記(2010.11.07):諦めかけていたクロッピング方法が見つかったので解決!
    新FFmpegのクロッピング(libavfilterによるクロップ)方法
     新FFmpegのクロッピングオプションが、従来の -croptop等は使用出来なくなり
     変更となったので、こちらの記事を参考に新しい書式で出力した。
 
Transcoding_WebM _Crop.iniの内容 ページ表示
     <説明>
      [Item2]:スケールのみ指定してアスペクト比を指定しないで出力。
       Opera 10.61とFirefox 4.0b6では横長に表示(→584x329)され正当に表
       示出来ない(と云うか、規格アスペクト比16:9相当で表示されてしまう)。
      [Item1]:スケール+アスペクト比も指定(
-aspect 520:328)して出力。
       非規格のサイズへ変換する場合は、アスペクト比を 指定した方が良いが、
       -aspect 1.585:1の書式にすると変換エラーとなってしまう。
      [Item0]:左右端をクロップしスケール指定して出力。
       
-vf "crop=1712:1080:104:0, scale=520:328" 構文の意味は、
        1920x1080を左右104ずつ削除して1712x1080(1.585:1)にクロップし、
        同じアスペクト比の 520x328に縮小して出力。
        -vf "scale=..." と -aspectとの関係は複雑なので -aspect指定はヤメ
        たが、Opera 10.61とFirefox 4.0b6でも問題なく元サイズで表示可能。
       Q:従来の -cropleft X, -cropright Yの如く、個々に出来ないのだろうか?
       A:従来の切り取りオプションは全て削除されました。
        代わりに -vf crop=width:height:x:yを使ってください。
        詳細は、「FFmpeg Documentation」の13.2 cropを参照・・・難解だ!
     <成績>
      下図は、[Item2]〜[Item0]の設定で出力したWebM動画を、Firefox 4.0b6で
      再生した際のスナップ映像を 各々 31%に縮小して比較表示した。    
 
 
↑Google Chrome再生時は 520:328で表示される([Item1]出力と同じ表示)。
 
  B.プレイヤーによるローカル再生
   VLC MediaPlayer(1.1.2)、SPlayer(3.5)は自前でWebM動画の再生が可能。
   DirectShow Filter経由で再生可能なWindows Media Player x32(12.0) 等では、
    WebMVP8 DirectShow Filters 0.9.10.0(ここから入手)+ffdshow(Vorbis有効)
    の導入で再生が可能となる。
    *VP8のデコーダに、新ffdshow rev3562のVP8(libavcodec)を利用した方がよい。
   携帯動画変換君+新FFmpegで出力されたWebM動画は、DirectShow Filter経由
    のプレイヤーによるローカル再生では、シークバー操作が上手く出来ない問題が
    ある。
    しかし、WebMVP8 DirectShow Filtersの代わりにHaali Media Splitter 1.10.262.12
    を導入すれば、シークバー問題は解消した(別記の追記Bを参照)!
 
 <参考1>携帯動画変換君のFFmpegコマンドオプション
    「ぼくんちのTV別館」のこちらの記事に分かり易く紹介されている。
     最新のFFmpegとは若干違うようなので、更に「MobileHackerz」さんのこの記事
     にある最新FFmpegを使用する際のTIPSを参照。
 
 <参考2>使用したFFmpeg rev.25287の対応フォーマット/オプション
    今回使用したコンパイル済みリビジョンFFmpeg rev.25287は AAC エンコーダを
     使用出来なかったので、
     「コマンドラインからffmpegを使ってみる」を参考に、FFmpegの対応フォーマット/
    コーデック/オプション(ヘルプ)を確認する方法とその内容を示した。
    なお、難解なFFmpegコマンドオプションは、「FFmpeg Documentation」を参照。
    コマンドプロンプトを起動
    cd C:\Stand Program Files\3GP_Converter034\cores\ (new_ffmpegをドラッグ
    してから不要部分を削除)を入力して「Enter」して階層を coresに移動。
    1)new_ffmpeg -formatsを入力して「Enter」。
    テキストに書き出すなら new_ffmpeg -formats > format.txtと入力して「Enter」。
 
 FFmpeg rev.25287の対応フォーマット ページ表示
     D :デコード可能(変換元として入力対応)
     E :エンコード可能(変換先として出力可能)
     V :ビデオ(映像)
     A :オーディオ(音声)
    2)new_ffmpeg -codecs (又はnew_ffmpeg -codecs > codec.txt)を入力して
      「Enter」。
 
 FFmpeg rev.25287の対応コーデック ページ表示
 
    3)new_ffmpeg -h(又はnew_ffmpeg -h > option.txt)を入力して「Enter」。
 
 FFmpeg rev.25287の対応オプション ページ表示
    詳細は「最新ffmpegの高度なオプション」を参照。
    *インターレース解除の補間方法は -ildctcmpで行うのだが難解だ。指定しな
      ければ sum of absolute differences, fast (default)で行われるようだ。
 
 結果と考察
  携帯動画変換君は、新FFmpegの厄介なコマンドオプションをメモ帳で設定可能
   なので便利だが使い込むには勉強が必要な為、「お気に入りの動画を携帯で見
   よう」からコンパイル済みFFmpegを借用し、その設定ファイルを模倣した。
      解像度の変更が自由に出来、映像のデータレートも微調整が可能だった。
     インターレース解除の追加で、素材がNTSC 向けの場合に起こる動きの速い
       シーンでのちらつきや横縞模様は解消された \(^o^)/
     -threads 3から-threads 4へ変更したら変換速度は高速化した。
     libavfilterによるクロッピングも一応可能だった。   
      字幕トラックの読み込みは筆者の手に負えない為パスした Y (>_<、)Y
  <備考1>
    携帯動画変換君支援ツール(仮称)「携帯
      動画変換君用 簡易設定ファイル変換ツ
      ール」が使用出来れば少しは便利なの
     だが、残念ながら肝心な映像ビットレー
     トのパラメータはグレーアウトして入力
      出来ない(右図)。
    なお、新FFmpegでもMP4への変換では各
    パラメーターのカスタマイズが可能(下図)
 
<備考2>コマンドラインツールでWebM動画へ変換
makewebm.exeでWebMへエンコード 「さまよう金の髭」さんの記事を参照
    WebMVP8 DirectShow Filters同梱の makewebm.exeは、DirectShowを利用した
    WebMエンコード用のコマンドラインプログラム。
    対応ファイルに制限が多いようだが、VP8の細かいエンコード設定が可能となって
    いるとの事だ・・・筆者は未経験。
 
FFmpegでWebMへエンコード 「さまよう金の髭」さんの記事を参照
    FFmpegは、DOS窓でFFmpeg.exeにオプションをつけて実行するコマンドラインのマ
     ルチメディアコンバーター。
     コマンドプロンプトを起動して(バッチファイルを作成して)、FFmpeg.exeが存在す
     る階層に移動(配置)し、
      ffmpeg -i <入力ファイル(%1)> <オプション> <出力ファイル(%1.拡張子)>
     の書式で変換(バッチではドラッグ&ドロップ)する。
    WebMの公式サイトでFFmpegのWebM対応パッチが公開され、それをビルドしてく
     れたもの(ここから入手)を使用するのが得策だが・・・直接は未経験。
追記(2010.11.07)
<補足>携帯動画変換君+新FFmpegでMPEG-4 AVC/H.264へ変換
    rev.18715以降コンパイルされ Web 上で再配布されている FFmpegのバイナリ
     ではFFmpeg の配布条件による制限のためFAAC は利用できません(-acodec
     libfaacの指定はエラーになります)と云う。
    rev.18607 をダウンロードして使用。但し、WebMには未対応。
    rev.25566への更新で、「内蔵AACエンコーダでもノイズが少なくなって、かな
     りイイ感じになってきました」と云う事なので(こちらを参照)、下記のウエブ配
     信用に設定してH.264_AAC.mp4へ変換してみた(WebMの取り込みにも対応)。
 
 Transcoding_MP4.iniの内容 ページ表示
   <構文上の留意点>
    1)AAC音声圧縮は、-acodec aac -strict experimentalで指定。
    2)x264のエンコードエラーには、-g 150 -qcomp 0.7 -qmin 10 -qmax 51
       -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286
のオプション追加で
      対処(こちらを参照)。
    3)H.264/AVC High Profileへの変換は簡単には出来ないようで(こちらを参照)、
      -flags2 <flags>のdct8x8を使用する・・・難解だ!
      CABAC(Context-based Adaptive Binary Arithmetic Coding)による圧縮性
      能の改善として-coder 1を指定するとMainとなる。-coder 0ではBaseLine。 
    4)levels 4.1は、 -level 41で指定。 
    5)4 Ref Framesは、 -refs 4で指定。
    6)非規格のシネスコサイズ(640x272)やビスタサイズ(520x328)へ変換する
     場合は、アスペクト比を -aspect 640:272等で指定( 2.352:1等ではエラー)
     しないで出力すると、WMPlayerで再生した場合に元素材のアスペクト比で
     表示されてしまう。
   <成績>
    1)今回の設定では、解像度が同じ素材の場合はほぼ目標の映像データレート
      で出力される。しかし、Full HDから640x360や720x406へ圧縮する場合は
     標値の13%減で指定すると
ほぼ目標の映像データレートで出力可能。
    2)ウェブ配信上QuickTimeで再生させる場合は、残念ながら FastStartストリ
     ーミング方式で再生出来ない(何か方策が有るのであろうが・・・不明)。
     一方、HTML5<video>タグで配信すれば、FastStart再生は可能だ。
      しかし、現状ではIExplorer8
は未対応。IExplorer 9, Chrome 4とSafari 4以
      降
iCab 4以降...)でのみ再生可能。 但し、携帯動画変換君で作成した
       修正のMP4は、Windows版Safari 5.0.2ではダウンロード完了後でないと
      
再生出来ない。

       Opera 10.6、Mozilla Firefox 4Betaは再生不可。
 
QuickTimeのEmbedded方式で再生未修正StandAlone
こちらから 
QuickTimeのEmbedded方式で再生YAMBで修正
こちらから 
HTML5 H.264対応ブラウザで再生未修正       
こちらから
HTML5 H.264対応ブラウザで再生YAMBで修正  
こちらから
    3)対策として、Yamb 2.0.0.8 ないし MP4Exporter 1.97で無劣化出力すれば、
      FastStartストリーミング配信が可能となる(詳細は こちら を参照)。



| Kenのムービー計画へ >動画狂コーナーへ |