• Python - GFPGAN + MoviePy 提高人物视频画质


    目录

    一.引言

    二.gif_to_png

    三.gfp_gan

    四.png_to_gif

    五.总结


    一.引言

    前面我们介绍了 GFP-GAN 提高人脸质量 与 OCR 提取视频台词、字幕,前者可以提高图像质量,后者可以从视频中抽帧,于是博主便想到了将二者进行结合并优化人物 GIF 图像质量。其步骤如下:

     MoviePy 截取视频关键帧

     GFP-GAN 提高人脸图像质量

     MoviePy 关键帧合并为 GIF

    Tips:

    后面的执行步骤需要电脑上已经配置好 GFP-GAN 的环境且安装了 moviepy 的依赖。

    二.gif_to_png

    1. def gif_to_png(_file_name, _output):
    2. from moviepy.editor import VideoFileClip
    3. # Load your gif
    4. clip = VideoFileClip(_file_name)
    5. print(f'Duration: {clip.duration} FPS: {clip.fps}')
    6. # Loop over clip frames
    7. for i, frame in enumerate(clip.iter_frames()):
    8. from PIL import Image
    9. img = Image.fromarray(frame)
    10. img.save(f'{_output}/frame_{i}.png')
    11. if __name__ == '__main__':
    12. file_name = "/Users/Desktop/ori.gif"
    13. output = "/Users/Desktop/out"
    14. gif_to_png(file_name, output)

    这一步我们读取 gif 并抽帧保存为多张图片,运行程序后会在 output 文件夹下得到 FPS x Duration = 40 张图片:

    Duration: 4.0 FPS: 10.0

    由于是老版电视剧的原因,gif 中人物的表情比较糊,画质较差:

    三.gfp_gan

    python inference_gfpgan.py -i inputs/gif_imgs -o results -v 1.3 -s 2
    

    将上面的多帧图片存储至 GFP-GAN inputs 文件夹下,执行 inference_gfpgan.py,结果将输出至 results 文件夹内:

    其中 restored_imgs 文件夹内存储了我们修复的多帧图像,看一下修复效果:

    四.png_to_gif

    1. def png_to_gif(_output, gif_name, fps):
    2. file_list = os.listdir(_output)
    3. file_list.sort()
    4. # 构造多个 ImageClip 片段
    5. clips = [ImageClip(_output + img).set_duration(1) for img in file_list if img.endswith(".png")]
    6. concat_clip = concatenate_videoclips(clips, method="compose")
    7. concat_clip.write_gif(gif_name, fps=fps)
    8. if __name__ == '__main__':
    9. file_name = "/Users/Desktop/ori.gif" # 原始 GIF
    10. input = "/Users/Desktop/result/restored_imgs/" # 修复帧
    11. output = "out.gif" # 输出 GIF
    12. # 匹配原 GIF 的 FPS
    13. ori_fps = VideoFileClip(file_name).fps
    14. png_to_gif(input, output, ori_fps)
    MoviePy - Building file out.gif with imageio.

    出现上述命令后代表开始多帧图像的合并,可以看到修复后的 GIF 人物更加的清晰:

    五.总结

    GFP-GAN 整体来说可玩性还是很高,后面博主会继续跟进 wave2lip 的测试,把音频、图像、视频结合到一起。这里我们处理的原始 gif 大小为 10m,处理后大小为 14m;同时如果资源比较充足的话,也可以将 GIF 扩展为视频人物细节处理。

  • 相关阅读:
    7.5 - 防火墙 7.6 - 安全协议
    关于 头歌平台 复制限制解除的方法
    SpringMVC使用(二)
    宇宙最強的IDE - Visual Studio 25岁生日快乐
    采用普罗米修斯(Prometheus )监控各个指标的含义,类型,以及格式
    一、QT概述
    【JavaEE】 多线程-初阶
    Java版本spring cloud + spring boot企业电子招投标系统源代码
    推荐几款简单易用的协作化项目管理工具
    [基因遗传算法]原理思想和python代码的结合理解之(一) :单变量
  • 原文地址:https://blog.csdn.net/BIT_666/article/details/134340239