编译

编译

如何消除视频抖动?

我尝试使用转码:

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

但总是出现错误“没有这样的过滤器”。

我想为此创建一个简单的 nautilus 脚本。

答案1

目前,ffmpeg从存储库仅支持更简单的除抖过滤,但不支持更好的维斯塔布篩選器。

您可以通过几种方式获取 vidstab 支持:编译或使用 PPA。


编译

如果您还想定制ffmpeg或使用最新版本,这是最佳选择。

首先你必须编译 libvidstab 或者使用libvidstab-dev软件包。目前只有 19.04 Disco Dingo 及更新版本提供此软件包。或者,16.04 Xenial Xerus 用户可以使用 libvidstab-dev 软件包mc3man PPA)。

要编译 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

现在关注如何在 Ubuntu 上编译 FFmpegffmpeg。当您到达配置步骤时,将其添加--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 使用说明


另请参阅

答案2

正如其他人上面提到的,Doug 的 PPA 不支持热情 (17.04)- 截至 2017 年 8 月 19 日。由于 17.10 将于 10 月发布,16.04 解决方案将越来越过时。Zesty 用户有两种可能的解决方案:

  1. 更简单:只需使用静态构建https://www.johnvansickle.com/ffmpeg/
  2. 更多工作:从 github 安装vid.stabhttps://github.com/georgmartius/vid.stab阅读编译说明,非常简单),然后编译ffmpeg https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

由于我没有太多时间,所以我喜欢第一个解决方案,它运行得非常完美。

vidstab 第一阶段仅在 1 个核心上运行,但由于我的 GoPro 素材分为多个块,如果我想要 100% 的系统负载,我可以同时处理 4 个视频。第二阶段利用了所有 4 个核心。

我的笔记本电脑是 i7-6820HK,但两次测试都只以大约 0.12 倍的速度进行。所以速度相当慢,但如果结果不错,我不在乎。


更新:我的头盔镜头似乎太抖了,抖动 10 级还不够。我不知道该怎么办,这是最大限度……

答案3

我想很多人(包括我)都发现了这个问题,只是尝试使用带有过滤器的 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所有者,并且应该进行更改。

相关内容