試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Eawplusインストーラのデモ動画を作成したときの覚え書き

Eawplus音色セットのインストーラを作成」でデモ動画を作成したときの作業メモ。動画編集には不慣れなため、やや細かいところまで書いている。

流れ

今回は「recordMyDesktopで保存した音声入り動画をステレオ音声でYouTubeにアップロードする覚え書き(後半)」のときと違って動画に手を加えたため、処理の流れは、下のようになった。

  1. VirtualBox(VBoxSDL)でゲストOSを起動し、キャプチャする操作の準備をする
  2. recordMyDesktopで操作をキャプチャ
  3. 保存された動画ファイル(Theora)をlibdv形式に変換
  4. Kinoで動画を分割し、速度調整やエフェクトなどの処理をする
  5. エクスポート

しかし、実際には、形式の問題などで余計にエンコードをすることになっている。

キャプチャ領域の切り取りと形式変換を兼ねてエンコード

gtk-recordMyDesktopVBoxSDLのウィンドウを選択したので、キャプチャ領域はこれにぴったりと合っているはずだったのだが、生成された(Theora)動画ファイルは、ゲストOS上の解像度800x600ではなく、800x608となっていて、上下にはウィンドウマネージャの装飾が一部残ってしまった。
また、今回使用した動画編集アプリケーションKino(http://www.kinodv.org/)はlibdv(http://libdv.sourceforge.net/)のQuasar DV(Didital Video) codecという方式の動画でないと編集できないため、領域切り取りと形式変換を兼ねてエンコードを行うことにした。
出力ファイルの拡張子は「.avi」にする。

$ mencoder [recordMyDesktopの動画ファイル] -nosound -ovc libdv -vf crop=800:600:0:4,scale=720:480 -o [中間ファイル].avi

縦横サイズ「720x480」の指定はDVコーデックでは必須なのだが、このせいで多少の劣化が起きる。
crop=800:600:0:4は、今回の動画サイズを適切に800x600に切り取るための指定で

$ mplayer -vf crop=800:600:0:4 [recordMyDesktopの動画ファイル]

のようにして試行錯誤したオプションをそのままmencoderで使用している。
出力ファイルは、非常に大きいものになった(元サイズ:29MiB エンコード後:1023MiB)。
なお、Gentoo Linuxでは、MPlayerを「USE=dv」でビルドする必要がある。

Kino上の作業

流れ
  1. mencoderで切り取り/変換した動画ファイルを取り込む
  2. 早送りの開始/終了や最後のフェードアウトの開始など、区切りの時間のところで「<=|=> 」のアイコンの機能で動画をシーン分割(Sroryboard上で項目が分かれる)
  3. 早送り処理の作成
    1. 早送りしたい区切りをStoryboardで選択後、「FX」タブ左上の「Overwrite」タブにある高度なオプションの「Speed」にチェックを入れて値(今回は全て15.00)を調整し、更に、同時に右下の「Video Filter」で「Soft Focus」を指定して値(今回は既定*1にした)を入れ、右下の「Render」を押すと加工処理が行われる
    2. 今度はスピードのチェックを外し、右下のフィルタから「Superimpose」を選び、あらかじめ用意した「早送り中...」と書かれた画像ファイルを指定、更に、位置は既定でフェードイン/アウトのフレーム数を両方「20」にして「Render」を再実行
  4. 上記処理を他の早送り部分にも同じ要領で繰り返す
  5. 最後のフェードアウト部分の区切りは、「Video Filter」の横の「Video Transition」から「Dissolve」を選択肢、ラジオボタンを色セレクタの付いているほうに切り替え、色は黒にする。その後「Render」を実行
  6. 「Export」タブに切り替え、「frame of」の後ろが「All」になっていることを確認し、「DV File」で「Raw DV」形式でエクスポート


シーン分割ボタン(Editタブ)

早送り指定(FXタブ)

画像合成(FXタブ)

最後のフェードアウト(FXタブ)

エクスポートと縦横比

Kinoからのエクスポートで直接Xvid/MP4/FLVなど、色々な形式にエンコードできるようにはなっている*2ものの、一度800x600から720x480にしている関係なのか、640x480や320x240の動画にエンコードすると映像が激しく劣化した。
縦横サイズをいじらない出力(720x480)も可能だが、YouTubeにこのままアップロードすると横長になってしまった。
試行錯誤の末、KinoではRaw DV形式でエクスポートし、それをmencoderエンコードすることになった。アップロードしたものもこの方法で作成している。

オリジナル(recordMyDesktopが書き出すTheoraファイル)

DV経由でエクスポート後mencoderで640x480なXvidファイルにエンコード

Kinoから直接640x480でXvidファイルにエンコード・横の線が非常に汚い

最後のエンコード

$ rm divx2pass.log -f
$ mencoder [エクスポートしたファイル] -nosound -ovc xvid -xvidencopts pass=1 -vf scale=640:480 -aspect 4:3 -o /dev/null
$ mencoder [エクスポートしたファイル] -nosound -ovc xvid -xvidencopts pass=2:bitrate=-99999999 -vf scale=640:480 -aspect 4:3 -o [出力ファイル]
$ rm divx2pass.log -f

bitrate=-99999999は、mencoderに自動でビットレートを決めさせる指定(KiB単位)で、絶対値をファイルサイズとする自動ビットレート決定になる。十分に大きい値であれば、幾つに指定しても、出力される動画ファイルのファイルサイズは同じになる。正の値でも、十分大きいビットレート(kbps単位)を与えると、大きさは変わらなくなる。縮めたいときにはきちんと値を指定し、調整することになるが、今回はおさえずにエンコードした。
なお、今回は音声なしのため、FLVファイルは作成せず、このままアップロードした。

問題点

  • エンコード回数が多い
  • 中間ファイルのディスク使用量が多い
  • 最も問題なのが、720x480というサイズに一度変換しなくてはならないこと

今後、Theoraのままで色々な処理ができるようになると、手間も時間もかからなくなり、画質も落ちずに済みそうなのだが...

使用したバージョン:

*1:Softness=15 Amount=50

*2:バックエンドとしてffmpegが使用されている