在视频制作领域中,绿幕技术是一种常见的方法,用于将视频中的主体与背景分离。然后,通过将主体与另一背景图片或视频合成,可以创造出各种视觉效果。在这篇文章中,我将介绍如何使用FFmpeg将背景图片与绿幕视频合并,从而生成一个数字人视频。
1. 准备工作
首先,资源准备:
- 一段拍摄的绿幕视频,视频中的主体应清晰可见,背景颜色均匀
- 一张用作背景的图片。
- 机器安装好的FFmpeg工具,确保在命令行下,可以调用此命令
2. 代码演示
import subprocess
def image_to_video(input_file, output_path, second):
"""
图片转视频背景
:param input_file:
:param output_path:
:param second:
:return:
"""
ffmpeg_command = [
'ffmpeg',
'-f', 'image2',
'-framerate', f'1/{second}',
'-i', input_file,
'-r', '25',
'-y',
output_path
]
return ffmpeg_command
def concat_video_green_digital(first_video, second_video, output_video_path):
"""
合成绿幕数字人
:param first_video:
:param second_video:
:param output_video_path:
:return:
"""
ffmpeg_command = [
'ffmpeg',
'-i', first_video,
'-i', second_video,
'-filter_complex',
"[1:v]chromakey=Green:0.1:0.1[ckout];[0:v][ckout]overlay[out]",
'-map', '[out]',
'-y',
output_video_path
]
return ffmpeg_command
if __name__ == '__main__':
try:
# 图片转视频
background_image = 'room.jpeg'
background_image_video = 'room.mp4'
image_command = image_to_video(background_image, background_image_video, 30)
subprocess.run(image_command, check=True, timeout=60)
# 视频合并绿幕数字人
digital = 'digital_1.mp4'
final_digital = 'digital-final.mp4'
concat_command = concat_video_green_digital(background_image_video, digital, final_digital)
subprocess.run(concat_command, check=True, timeout=60)
except Exception as e:
print(format(e))
3. 生成效果