Yasy

出典: 筑波大学 Linux User Group (つくらぐ)

このページでは、つくらぐで開発されているスクリプトベースの動画編集アプリケーション「yasy」について記述します。

目次

概要

yasy(Yet Another aviSYnth)は、動画編集を自動化するためのプログラムです。FFmpegに準じ、GPLまたはLGPLで公開されています。

つくらぐ勉強会での発表動画の編集作業を簡略化・分業するために開発されており、徐々に一般的な編集にも使えるように改良していく予定です。FFmpegfilterのひとつとして実装されています。

GUIからタイムラインを操作しての編集に比べて、スクリプトベースの編集には以下のような利点があります:

  • 誰が書いても同じように動く - ポインティングデバイスによる操作などのアナログな要素がないので、同じスクリプトを使えば誰が実行しても同じ結果が得られます
  • 動的な表現が簡単にできる - フレームの進行に沿うオブジェクトの回転など、手動での設定が煩雑な表現を計算機まかせにできます
  • 編集の使いまわしができる - 複数の動画に同じスクリプトを適用すれば、同様の編集を繰り返さずに済みます

現在、ソースコードのみが提供されています。以下の環境での動作が確認されています。

  • Fedora 11(x86)

開発はtnzkを中心につくらぐメンバーにより行われています。ご意見などはメール ( "tnzk.marge%cgmail.com", '@')か、twitter(@tnzk)でお願いします。

入手先

GitHubにて入手可能です。

GitHub: tnzk's yasy at master

$ mkdir ~/src
$ cd ~/src
$ git clone git://github.com/tnzk/yasy.git yasy

依存ライブラリ

FFmpegの依存ライブラリに加えて、以下のライブラリが必要です:

  • Lua
  • GD

それぞれ、yumでは次のパッケージからインストールできます:

  • yum
  • yum-devel
  • gd
  • gd-devel

ビルド

configureしてmakeします。

make installはまだ準備してません。 make install すると avfilter が有効化されたFFmpegだけインストールされるなど残念な感じなので、ご了承ください。

$ ./configure --enable-avfilter
$ make

使い方

動作確認はリポジトリ内のサンプルで可能です。

$ ./yasy ~/src/yasy/samples/sample1.avi ~/src/yasy/samples/out.avi ~/src/yasy/samples/sample.lua

スクリプトの書き方はyasy/スクリプトリファレンスをご参照ください。

技術的な情報

  • リポジトリにはavfilter機能を使えるようにパッチを当てたFFmpegが入っています。これはFFmpegのr29885がベースになっています。最新のFFmpegをベースにしたい場合は、Documentationを参考にlibavfilter有効化のためのパッチを当ててconfigureしたあと、yasyリポジトリ内のファイルを参考に以下のファイルを修正して, makeしてみてください
    • config.mak
      • EXTRALIBS に-llua -lpng -ljpeg -lfreetype -lz -lm -lgd を追加
      • CONFIG_UTLUIG_FILTER=yes という行を追加
    • libavfilter/Makefile
      • OBJ~$(CONFIG_UTLUIG_FILTER) += vf_utlug.o という行を追加
    • libavfilter/allfilters.c
      • REGISTER_FILTER(UTLUG,utlug,vf) という行を追加
    • libavfilter/vf_utlug.* をコピー

ToDo

  • stringオブジェクトにリージョンを追加
  • make install できるようにする
  • RPMつくる
  • 最新のFFmpegをベースにして動作検証

つくらぐ動画業務

ついでに運営用の情報をメモしておきます。

  1. yasyでヘッドラインを適用(前述)
  2. その他何らかの編集
  3. 10分ごとに分割(後述)
  4. Youtubeにアップロード(後述)

10分ごとに分割

ffmpegを使って次のようにすると楽?(各回の動画のファイル名がshow-1.aviと仮定:

#!/bin/sh

if [ $# -ne 1 ]; then
  echo "Usage: $0 video-id(number)"
  exit 1
fi

for i in 0 1 2 3 4 5 # 1時間は越えないはず...
do
  ss=`expr $i \* 600`
  ffmpeg -ss $ss -t 600 -i show-$1.avi -vcodec mpeg4 -acodec copy -b 1000k -qmax 16 tube-$1-$i.avi
done

ってな感じのスクリプトを

./video-split 1

tube-1-1~6.aviに分割された動画が保存される。60分未満の動画の場合(であることを仮定してるんだけど)、いくつかはヘッダだけの無駄なファイルなので、それは無視する。

Youtbeにアップロード

Youtubeの一括アップローダを使う(Google Gearsのインストールが必要)。

以下のメタデータを設定: