web-dev-qa-db-ja.com

スクリプトを使用したビデオのシェーキング解除

ビデオのシェイクを解除するにはどうすればよいですか?

私はトランスコードを使用しようとします:

transcode  -J stabilize --mplayer_probe -i "input.MTS"

しかし、それはセグメンテーション違反を引き起こします。

Ffmpegフィルターを使用しよう:

ffmpeg -i "input.MTS" -vf vidstabdetect=shakiness=5:show=1 out.avi
ffmpeg -i "input.MTS" -vf deshake out.avi

ただし、常に「No such filter」というエラーが発生します。

このために単純なnautilusスクリプトを作成したいと思います。

9
Crantisz

現在、リポジトリのffmpegは、より単純な deshake フィルターのみをサポートしていますが、より優れた vidstab フィルターはサポートしていません。

Vidstabサポートを取得するには、PPAをコンパイルするか使用するいくつかのオプションがあります。


コンパイル中

これは、ffmpegをカスタマイズしたり、最新バージョンを使用したりする場合にも最適なオプションです。

まず、libvidstabをコンパイルするか、 libvidstab-dev パッケージを使用する必要があります。現在、このパッケージを提供しているのは、19.04 Disco Dingo以降のみです。または、16.04 Xenial Xerusユーザーは、 mc3man PPA )のlibvidstab-devパッケージを使用できます。

Libvidstabをコンパイルするには:

$ Sudo apt-get install build-essential cmake
$ mkdir ~/ffmpeg_sources ~/ffmpeg_build
$ cd ~/ffmpeg_sources
$ wget -O https://github.com/georgmartius/vid.stab/archive/master.Zip
$ unzip master.Zip
$ cd vid.stab-master
$ cmake -DCMAKE_INSTALL_PREFIX:PATH=~/ffmpeg_build .
$ make
$ make install

buntuでFFmpegをコンパイルする方法 に従ってください。 ffmpegが構成されているステップに到達したら、--enable-libvidstabを構成オプションのリストに追加します。


mc3man PPA

FFmpeg現在のリリース+ git PPA 16.04 Xenial Xerusの場合:

Sudo add-apt-repository ppa:mc3man/ffmpeg-test
Sudo apt-get update
Sudo apt-get install ffmpeg-static

ffmpeg2(「2」に注意)を実行します。


使用法

vid.stabの使用方法 を参照してください。


こちらもご覧ください

18
llogan

他の人が上記で言及したように、DougのPPAはZesty(17.04)をサポートしていません-2017年8月19日現在17.10が10月16.04にリリースされるので、ソリューションはますます時代遅れになります。 Zestyユーザー向けの2つの可能なソリューション:

  1. シンプル:静的ビルドを使用するだけです https://www.johnvansickle.com/ffmpeg/
  2. さらなる作業:githubからvid.stabをインストールし( https://github.com/georgmartius/vid.stab コンパイル手順を読んでください、非常に簡単です)、次にffmpegをコンパイルします https://trac.ffmpeg.org/wiki/CompilationGuide/Ubunt

私はあまり時間がないので、私は最初の解決策が好きで、完璧に働きました。

Vidstabの最初のパスは1コアでのみ動作しますが、GoProの映像は多くのチャンクにあるため、100%のシステム負荷が必要な場合は4つのビデオを同時に処理できます。 2番目のパスでは、4つのコアすべてを使用します。

私のラップトップi7-6820HKですが、両方とも約0.12倍の速度でしか進行しません。かなり遅いですが、結果がいいかどうかは気にしません。


更新:ヘルメットマウントの映像が非常に揺れているため、揺れ10では十分ではありません。私は何をすべきかわかりません、それは最大です...

3
Csaba Toth

多くの人々(私を含む)がこの質問を見つけて、フィルターでffmpegを使用しようとしていると思います。

コンパイルに関するこれらの答えは素晴らしいですが、時間がかかり、一部の人にとっては難しいかもしれません。

現在、多くのフィルター、コーデックなどで既に構築されているDockerイメージを使用する簡単なオプションがあります。

個人的には、この画像を使用しました https://github.com/jrottenberg/ffmpeg

シェークフィルターの使用例は非常に簡単です。

docker run -v $PWD:/temp/ \
    jrottenberg/ffmpeg \
    -i /temp/input.MTS \
    -vf deshake \
    /temp/out.avi

Vidstabフィルターの場合:

# create vectors from input file
docker run -v $PWD:/temp/ jrottenberg/ffmpeg \
    -i /temp/input.MTS \
    -vf vidstabdetect=stepsize=6:shakiness=8:accuracy=9:result=/temp/transform_vectors.trf -f null -

# process file using vectors from step 1
docker run -v $PWD:/temp/ jrottenberg/ffmpeg \
    -i /temp/input.MTS \
    -vf vidstabtransform=input=/temp/transform_vectors.trf:zoom=1:smoothing=30,unsharp=5:5:0.8:3:3:0.4 \
    /temp/out.avi

作成されたファイル「out.avi」の所有者はrootであり、変更する必要があることに注意してください。

1
atay