vid.stabは、手ぶれなどの、動画の細かい揺れを補正するフィルタです。
FFmpegに組み込んで使うことができます。
vid.stabをコンパイルするために、CMakeが必要ですので、あらかじめインストールしておいてください。
CMake
http://www.cmake.org/vid.stabは、以下の場所にあります。
http://public.hronopik.de/vid.stab/左メニューのDownloadから、以下のページに進みます。
http://public.hronopik.de/vid.stab/download.php?lang=enOn Github!
Get the source from github
から、以下のページに進みます。
https://github.com/georgmartius/vid.stab「Download ZIP」ボタンをクリックして、
vid.stab-master.zip
を、適当なディレクトリに保存して、解凍します。
または、MSYSからGitを使って、以下のようにダウンロードします。
$ git clone
https://github.com/georgmartius/vid.stab.git以下の説明は、Gitを使った場合のディレクトリ名になっていますので、zipファイルをダウンロードした場合は読み替えてください。
2013/06/16 追記shared library(libvidstab.dll)か、static library(libvidstab.a)のどちらかしかmakeできないようになっていて、デフォルトではshared libraryが作成されます。
2013/09/13 追記2013/09/12の更新で、CMakeLists.txtの場所が変わりました。
CMakeLists.txt
46行目のコメントを解除、47行目をコメントアウトして、static libraryが作成されるように修正します。
add_library (vidstab STATIC ${SOURCES})
#add_library (vidstab SHARED ${SOURCES})2014/08/13 追記2014/08/12の更新で、CMakeLists.txtのshared libraryの切り替えオプションが変わりました。
cmakeのオプションに、「-DBUILD_SHARED_LIBS=OFF」を追加しました。
2016/06/13 追記OpenMPに対応していないコンパイル環境のため、「-DUSE_OMP=OFF」を追加しました。
MSYSで、ソースコードを保存したディレクトリに移動し、
$ cd vid.stab
$ mkdir build
$ cd build
$ cmake -G "MSYS Makefiles" .. -DCMAKE_INSTALL_PREFIX=/mingw -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DUSE_OMP=OFF
$ make
$ make install
以上で終了です。
【更新履歴】を見る
2013/06/16 追記
static libraryは、src/CMakeLists.txt を修正すれば良いことが分かったので、全面修正しました。
shared library(libvidstab.dll)か、static library(libvidstab.a)のどちらかしかmakeできないようになっていて、デフォルトではshared libraryが作成されます。
src/CMakeLists.txt
44行目のコメントを解除、45行目をコメントアウトして、static libraryが作成されるように修正します。
add_library (vidstab STATIC ${SOURCES})
#add_library (vidstab SHARED ${SOURCES})
これだけだとstatic libraryが無いので、dllからstatic libraryを作ってインストールします。
(cmakeのオプションに何かあるのかもしれませんが、見つけられませんでした。)
$ gendef libvidstab.dll
$ dlltool -l libvidstab.a -d libvidstab.def -k -A
$ cp libvidstab.a /mingw/lib
2013/08/31 追記
strndupのエラーは、2013/08/31の更新で修正されました。
$ patch -p1 < vid.stab-strndup.diff
2013/09/13 追記
2013/09/12の更新で、CMakeLists.txtの場所が変わりました。
src/CMakeLists.txt
44行目のコメントを解除、45行目をコメントアウトして、static libraryが作成されるように修正します。
CMakeLists.txt
46行目のコメントを解除、47行目をコメントアウトして、static libraryが作成されるように修正します。
$ cmake -G "MSYS Makefiles" ../src -DCMAKE_INSTALL_PREFIX=/mingw
$ cmake -G "MSYS Makefiles" .. -DCMAKE_INSTALL_PREFIX=/mingw
2013/09/13 追記
githubのボタンが、「ZIP」から「Download ZIP」に変わっています。
2014/02/10 追記
CMakeLists.txt の修正用のsedコマンドを追加しました。
$ sed -i.orig -e "/SHARED/s/^/# /;/STATIC/s/# //" CMakeLists.txt
2014/02/10 追記
cmakeのオプションに、「-DCMAKE_BUILD_TYPE=Release」を追加しました。
$ cmake -G "MSYS Makefiles" .. -DCMAKE_INSTALL_PREFIX=/mingw
$ cmake -G "MSYS Makefiles" .. -DCMAKE_INSTALL_PREFIX=/mingw -DCMAKE_BUILD_TYPE=Release
2014/02/13 追記
説明を修正しました。
MSYSで、ファイルソースコードを保存したディレクトリに移動し、
2014/08/13 追記
2014/08/12の更新で、CMakeLists.txtのshared libraryの切り替えオプションが変わりました。
cmakeのオプションに、「-DBUILD_SHARED_LIBS=OFF」を追加しました。
$ cmake -G "MSYS Makefiles" .. -DCMAKE_INSTALL_PREFIX=/mingw -DCMAKE_BUILD_TYPE=Release
$ cmake -G "MSYS Makefiles" .. -DCMAKE_INSTALL_PREFIX=/mingw -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
2014/08/13 追記
CMakeLists.txt の修正用のsedコマンドを削除しました。
$ sed -i.orig -e "/SHARED/s/^/# /;/STATIC/s/# //" CMakeLists.txt
2016/06/13 追記
OpenMPに対応していないコンパイル環境のため、「-DUSE_OMP=OFF」を追加しました。
$ cmake -G "MSYS Makefiles" .. -DCMAKE_INSTALL_PREFIX=/mingw -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
$ cmake -G "MSYS Makefiles" .. -DCMAKE_INSTALL_PREFIX=/mingw -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DUSE_OMP=OFF
【更新履歴】を閉じる
1) 「cmake -G "..." 〜」の実行後、./src/CMakeLists.txtを開く
2) add_library の2行、STATIC 側を有効にする
3) make 実行
元々のCMakeLists.txtの STATIC 記述は(cmake実行で)上書きされてしまう様なので、make実行前に shared/static を切り替える事で必要なライブラリを得る事ができます。
蛇足になってしまいました、スミマセン。
コメントありがとうございます!
ついさっき気がついて、記事を修正したところでした。
srcディレクトリとbuildディレクトリを分けているので、cmakeを実行する前に修正しても、static libraryをmakeできました。
あぁー、、申し訳ありません。手元のファイルを見直したところ、CMakeLists.txtの元ファイル確認を誤ってRelease-0.96-tarballの方を開いてチェックしていました。
gitの最新版は記事手順の通りに先編集可能でした。
以下、本記事を修正されてる事から既に認識済みの内容(ffmpeg再ビルド中?)かとは思っているのですが、一応。
編集前に「shared libraryからstatic libraryを生成」としてdlltoolを用いた手順が記載されていましたが、正しくはdll用のインポートライブラリ(*.dll.a)を生成する手順でした。その為、(20:30現在)最新のffmpeg/ffplayは libvidstab.dll が必須なバイナリになっています。
ご指摘ありがとうございました。
ffmpeg、ffplay rev.54042をビルドし直して差し替えました。
今度こそ大丈夫だと思います。
定期のMac版ガイド更新で、昨日「vid.stab」のgitを引っ張ったのですが、OpenMPという機能がデフォルトでオンになっていました。
マルチプロセッサでの動作に関するものらしいですが、Macではサポートされていません。
Windowsがどうなっているかは分かりませんが、OFFにするのは「DUSE_OMP=OFF」です。
参考になるか分かりませんが、情報までということで。
それでは。
情報ありがとうございます。
OpenMPが有効になっていたとは、気が付きませんでした。
pkgconfigファイル(vidstab.pc)を確認したところ、libgompがリンクされて、OpenMPが有効になっていました。
libgompはgccに含まれているものなので、もしかしたらMacでも使えるようにしている人がいるかもしれません。
私が確認した限りでは、ffmpegでもvid.stabは問題なく効いていますので、とりあえずOpenMPを有効にしておきます。
はい。OpenMP®/Clangというのを作っている人はいます。 https://clang-omp.github.io/
OS XではClangというのがgccの羊の皮を被っているのですが、OS標準のClangではOpenMPがサポートされていません。
ソースコードがあるので、まぁ対応できなくもないのですが、OpenMP対応のためにコンパイラを入れ替えて…という感じがして手続きを端折りました。(^ ^;
こんなことを書いたのはこのサイトが著名でMacを含めた色んな人が見る可能性があるからです。
https://github.com/georgmartius/vid.stab/archive/release-0.98b.tar.gz
なるほど、OS XではClangが標準なんですね。
たしかに、vid.stabのためだけにコンパイラを入れ替えるよりは、OpenMPを無効にした方が楽ですね。
OpenMPがもっと普及すれば、標準でサポートされるようになるのかも知れません。
リンク先のdrangonさんでしょうか?
最近、自分でgccもビルドして使っているので、他の方がビルドしているgccはよく分からないのですが、OpenMPに対応していない方が多いのでしょうか。
時間があるときに、Komisarさんや、TDMさんのgccが、OpenMPに対応しているか試してみます。