2017年10月28日土曜日

Debian/GNU Linux 動画の手ブレ補正

ffmpeg で、動画の手ブレ補正ができる。
ミニ トイドローンのカメラブレに使えるかも。

vid.stab と呼ぶライブラリを使うらしいのでffmpegの再コンパイルが必要だが、非公式の deb-multimedialibvidstab1.0 がある。
ただし、deb-multimediaの導入によって他のマルチメディア関係のソフトもバージョンアップされてしまうことがあるので自己責任。

0) 現状のffmpeg でvid.stabが使えるか確認
$ ffmpeg --help | grep vidstab
(使える場合)
...
 ... vidstabdetect     V->V       Extract relative transformations, pass 1 of 2 for stabilization (see vidstabtransform for pass 2).
 ... vidstabtransform  V->V       Transform the frames, pass 2 of 2 for stabilization (see vidstabdetect for pass 1).
のような表示。出ない場合以下の手順。

1) Deb-multimediaをリポジトリに追加

エディタなどで sudoして /etc/apt/sources.listに以下を追加 (synapticなどでも可能)。
# deb-multimedia
deb http://www.deb-multimedia.org stretch main non-free
deb-src http://www.deb-multimedia.org stretch main non-free

$ sudo apt-get update
...
W: GPG エラー: http://www.deb-multimedia.org stretch InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 5C.......
(この段階でエラーは気にしない)

公開鍵を入れて、エラー解決
$ sudo apt-get install deb-multimedia-keyring

2) vidstabインストール

$ sudo apt-get update
$ sudo apt-get install libvidstab1.0


3) 簡単なvid.stabの利用例。

動画ファイルの解析 (transforms.trfを出力) - vidstabdetectと 手ブレ補正ファイルの出力 - vidstabtransformの2度のコマンドが必要 (2pass) - うちのオンボロPCは、ffmpegのマルチコアのフル利用の熱で飛んでしまう・・・

2passを'&&'でつないだ。
$ ffmpeg -i infile.mp4 -vf vidstabdetect=shakiness=10:accuracy=15 -f null - &&
ffmpeg -i infile.mp4 -vf vidstabtransform=smoothing=30:input="transforms.trf" outfile.mp4

2つのinfile.mp4とoutfile.mp4を横に並べた動画の例 (side by side)
$ ffmpeg -i infile.mp4 -i outfile.mp4 -filter_complex "[0:v]setpts=PTS-STARTPTS, pad=iw*2:ih[bg]; [1:v]setpts=PTS-STARTPTS[fg]; [bg][fg]overlay=w" side_by_side.mp4

上では動画ファイル出力だが、チェックだけなら以下でもできる ( transforms.trf 要)。
$ ffplay -i infile.mp4 -vf split[a],vidstabtransform,[a]hstack


-----------

詳しくは
archlinuxより
https://wiki.archlinux.jp/index.php/FFmpeg#x264_.E6.89.8B.E3.83.96.E3.83.AC.E8.A3.9C.E6.AD.A3

他に transcode ってのもあるけど、ffmpegと同じライブラリ使用? ...こんな感じ
$ transcode -J stabilize=shakiness=10:accuracy=15 -i infile.mp4
$ transcode -J transform=smoothing=30 -i infile.mp4 -y xvid -o outfile.mp4

https://linux.die.net/man/1/transcode

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。