如何消除视频抖动?
我尝试使用转码:
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”)。
用法
另请参阅
答案2
正如其他人上面提到的,Doug 的 PPA 不支持热情 (17.04)- 截至 2017 年 8 月 19 日。由于 17.10 将于 10 月发布,16.04 解决方案将越来越过时。Zesty 用户有两种可能的解决方案:
- 更简单:只需使用静态构建https://www.johnvansickle.com/ffmpeg/
- 更多工作:从 github 安装
vid.stab
(https://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
所有者,并且应该进行更改。