Dan*_*Ruf 19 ffmpeg image-processing video-processing filter chromakey
我需要一个视频来使用色度键滤镜/绿屏滤镜并将其覆盖在另一个视频上并将其作为新视频输出.
是否有用于此目的的现有库,脚本,过滤器或解决方案?
jla*_*dan 35
我意识到这是一个老问题,但当我搜索ffmpeg chromakey时,它仍然会出现在顶部附近.
答案(现在)是肯定的,有一个过滤器用于生成色度键并覆盖它们.过滤器名称是" 颜色键 ".网站上有一些例子,这是命令:
ffmpeg -i <base-video> -i <overlay-video> -filter_complex '[1:v]colorkey=0x<color>:<similarity>:<blend>[ckout];[0:v][ckout]overlay[out]' -map '[out]' <output-file>
其中<color>rgb颜色以十六进制匹配(例如:黑色为0x000000),<similarity>是颜色匹配的容差(例如:0.3),而<blend>(例如:0.2)控制不透明度是开关还是逐渐增加.(有关详细信息,请参阅文档).
带有测试数据的最小可运行示例
/sf/answers/2260428971/ 上的答案是正确的,这里只是一个最小的具体例子。
下载输入媒体:
wget https://github.com/cirosantilli/media/raw/master/Ciro_Santilli_with_a_stone_carved_Budai_in_the_Feilai_Feng_caves_near_the_Lingyin_Temple_in_Hangzhou_in_2012.jpg
wget https://github.com/cirosantilli/media/raw/master/opengl-rotating-triangle.mp4
Run Code Online (Sandbox Code Playgroud)
使图像大小与 1024x1024 的视频大小匹配。可以使用 ffprobe 确定视频大小:
convert Ciro_Santilli_with_a_stone_carved_Budai_in_the_Feilai_Feng_caves_near_the_Lingyin_Temple_in_Hangzhou_in_2012.jpg -resize 1024x1024! background.jpg
Run Code Online (Sandbox Code Playgroud)
进行实际转换:
ffmpeg -i background.jpg -i opengl-rotating-triangle.mp4 \
-filter_complex '[1:v]colorkey=0x000000:0.1:[ckout];[0:v][ckout]overlay[out]' \
-map '[out]' out.mp4
Run Code Online (Sandbox Code Playgroud)
转换为 gif 只是为了预览这个答案:
ffmpeg -i out.mp4 -r 5 -vf "scale=300:-1,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" out.gif
Run Code Online (Sandbox Code Playgroud)
所以在我的例子中,我有一个黑色背景,它被转换成一个固定的图像。
结果预览(可怕的 FPS,适合 2MB 大小的 GIF 以供在此处上传):
实际视频输出:https : //www.youtube.com/watch?v=3aY6x7u86QQ
原始输入文件供参考:
opengl-旋转三角形.mp4
Ciro_Santilli_with_a_stone_carved_Budai_in_the_Feilai_Feng_caves_near_the_Lingyin_Temple_in_Hangzhou_in_2012.jpg
它也只适用于视频背景。
wget https://upload.wikimedia.org/wikipedia/commons/f/f9/STS-132_Liftoff_Space_Shuttle_Atlantis.ogv
ffmpeg -i STS-132_Liftoff_Space_Shuttle_Atlantis.ogv -i opengl-rotating-triangle.mp4 -filter_complex '[1:v]colorkey=0x000000:0.1:[ckout];[0:v]trim=start=0:end=8[cut0];[cut0][ckout]overlay[out]' -map '[out]' out.mp4
Run Code Online (Sandbox Code Playgroud)
在这里,我shortest=1向overlay过滤器添加了另一个参数:
overlay=shortest=1
Run Code Online (Sandbox Code Playgroud)
使覆盖在三角形视频停止后立即停止,否则默认为在更长的亚特兰蒂斯视频结束时停止。
您可能还想使用trim过滤器来选择任意段。
Atlantis 视频为 1920x1080,最终输出也具有该尺寸。预览:
实际视频:https : //www.youtube.com/watch?v=HI8XniA2Bk8
在 Ubuntu 20.10、FFmpeg 4.3.1 上测试。
| 归档时间: |
|
| 查看次数: |
17064 次 |
| 最近记录: |