视频&图片 超分与动漫化+补帧


该内容介绍了利用PaddleGAN等工具将视频转为动漫风格的方法。先安装依赖并建立相关目录,配置动漫化和超分辨率模型,再切割视频帧,经排序、逐帧风格转换后合成视频,还可添加音轨和插帧。此方法能处理大视频,但操作复杂,视频合成帧率设置较棘手。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

1.安装依赖

由于视频不便展示,均放到项目根目录下,以便于查看

需要自行建立piece目录和piece_pr目录,分别放置切割的原视频帧,以及原视频帧动漫化后的图片

In [9]
!python3 -m pip install --upgrade ppgan

!git clone https://gitee.com/paddlepaddle/PaddleGAN.git
%cd PaddleGAN/
!pip install -v -e .

!pip install paddlehub==1.8.0 -U -i https://pypi.tuna.tsinghua.edu.cn/simplefrom ppgan.apps import RealSRPredictorimport cv2import paddlehub as hubfrom PIL import Image  
import numpy as np

%env CUDA_VISIBLE_DEVICES=0%matplotlib inline

2.单图片操作

2.1动漫化配置

现在就有可以将现实的照片转化为动漫风格的模型可以一键应用——>{随手拍,生成日系风}。PaddleHub已将定制打造的街景动漫化模型animegan_v1_hayao_60、animegan_v2_shinkai_33、animegan_v2_paprika_74等多个优质模型开源, 并且支持一键街景照片动漫化,适用于美食、风景、人物等场景。

PaddleHub建议采用1.8,因为官方给的运行实例就是1.8,且原项目评论中有因为版本更新后无法运行的

利用AnimeGAN v2来对景物图像进行动漫风格化。

论文是 AnimeGAN: A Novel Lightweight GAN for Photo Animation, 论文链接: https://link.springer.com/chapter/10.1007/978-981-15-5577-0_18.

输出宫崎骏风格动漫照片 model = hub.Module('animegan_v1_hayao_60', use_gpu=True)

输出新海诚风格动漫照片 model = hub.Module('animegan_v2_shinkai_33', use_gpu=True)

输出今敏风格动漫照片 model = hub.Module('animegan_v2_paprika_74', use_gpu=True)

In [10]
sr = RealSRPredictor()
model = hub.Module(name='animegan_v2_shinkai_33', use_gpu=True)
[04/26 22:52:31] ppgan INFO: Found /home/aistudio/.cache/ppgan/DF2K_JPEG.pdparams
[2025-04-26 22:52:31,770] [    INFO] - Installing animegan_v2_shinkai_33 module
[2025-04-26 22:52:31,773] [    INFO] - Module animegan_v2_shinkai_33 already installed in /home/aistudio/.paddlehub/modules/animegan_v2_shinkai_33

2.2超分辨率配置

构建RealSR实例。RealSR: Real-World Super-Resolution via Kernel Estimation and Noise Injection发表于CVPR 2025 Workshops的基于真实世界图像训练的超分辨率模型。此接口对输入图片或视频做4倍的超分辨率。建议视频使用mp4格式。

注意:RealSR的输入图片尺寸需小于1000x1000pix。

其实sr.run是可以直接处理视频的,但是由于对帧数处理的太多,以至于运行速度太慢,无法处理大型的视频

四倍超分效果

当然官方还提供了直接对视频进行超分的方式,本人尝试后发现需要很大的显存,如即使是500*500,1min这种很低的分辨率的视频使用16GB显存都会不足

EDVR模型提出了一个新颖的视频具有增强可变形卷积的还原框架:第一,为了处理大动作而设计的一个金字塔,级联和可变形(PCD)对齐模块,使用可变形卷积以从粗到精的方式在特征级别完成对齐;第二,提出时空注意力机制(TSA)融合模块,在时间和空间上都融合了注意机制,用以增强复原的功能。

ppgan.apps.EDVRPredictor(output='output', weight_path=None) 参数 output_path (str,可选的): 输出的文件夹路径,默认值:output. weight_path (None,可选的): 载入的权重路径,如果没有设置,则从云端下载默认的权重到本地。默认值:None。

In [2]
image_sr=sr.run_image("/home/aistudio/butterfly.png")
image_sr.save('/home/aistudio/butterfly_SR.png')

3.视频处理

3.1动漫化转化函数,支持Batch

In [3]
def style_transfer(ori_image_path,target_image_path,w,h):
    
    images_ori_batch=[]    for p in ori_image_path:
        ima=cv2.imread(p)
        images_ori_batch.append(ima)

    np_array=model.style_transfer(images=images_ori_batch)    for i in range(len(np_array)):
        t_image = cv2.cvtColor(np_array[i], cv2.COLOR_BGR2RGB)
        pil_image=Image.fromarray(t_image)
        pil_image.save(target_image_path[i])

3.2切割视频帧

In [12]
timeF = 1  #视频帧计数间隔次数videoFile = '/home/aistudio/test_short.mp4'outputFile = '/home/aistudio/piece/'vc = cv2.VideoCapture(videoFile)
c = 1fps = vc.get(cv2.CAP_PROP_FPS)print(f'fps={fps}')if vc.isOpened():
    rval, frame = vc.read()else:    print('openerror!')
    rval = Falsewhile rval:
    rval, frame = vc.read()    if c==1:        print(frame.shape)        # shape[0]是宽度
        # shape[1]是高度
        w=frame.shape[0]
        h=frame.shape[1]    if c % timeF == 0:        print(f'\r{c}',end="")        # 垂直翻转
        # frame = cv2.flip(frame, 0)

        cv2.imwrite(outputFile + str(int(c // timeF)).zfill(7) + '.jpg', frame)
        
    c += 1
    cv2.waitKey(1)

vc.release()print()print(h,w)
fps=25.135135135135137
(960, 720, 3)
341
720 960

3.3排序整理图片并测试图片是否完整

这里如果不排序结果会是混乱的,因为默认不是从1,2,3,4,5的顺序排列的

In [11]
import os

ori_image_path=[]
images_files = os.listdir("/home/aistudio/piece")for file in images_files:    if file.endswith('.jpg'):
        t=cv2.imread("/home/aistudio/piece/"+file)        if t is not None:
            ori_image_path.append(file)
ori_image_path.sort()
n=len(ori_image_path)print(n)print(ori_image_path)

3.4逐帧风格转换

In [13]
import timefrom time import strftimefrom time import gmtime

batch_size=1batch_ori=[]
batch_tar=[]

time_start = time.time()for i,name in enumerate(ori_image_path):
    ori_p="/home/aistudio/piece/"+name
    tar_p="/home/aistudio/piece_pr/"+name
    batch_ori.append(ori_p)
    batch_tar.append(tar_p)    if i%batch_size==0 or i+1==n:        # print(batch_ori)
        # print(batch_tar)
        style_transfer(batch_ori,batch_tar,w,h)
        batch_ori=[]
        batch_tar=[]
        epoch_used_time=(time.time()-time_start)        # 加了个比较简陋的计时方式,显示训练剩余时间,以便估计摸鱼时间
        used_t=strftime("%H:%M:%S", gmtime(epoch_used_time))
        total_t=strftime("%H:%M:%S", gmtime((epoch_used_time/(i+1))*n))        print(f'\r{i+1}/{n} {used_t}/{total_t}',end="")
340/340 00:00:45/00:00:45

3.5把图片合成视频,注意保持前后fps一致

存在偶尔下载后无法播放的情况,需要手工调一下fps的大小,这个感觉有点玄学的意思在

In [15]
# encoding: UTF-8import glob as gbimport cv2

img_path=[]for i in range(len(ori_image_path)):
    img_path.append("/home/aistudio/piece_pr/"+ori_image_path[i])# print(img_path)# 如果下载后无法播放,调一下那个帧率,这个感觉有点玄学的意思在,我没明白啥原理videoWriter = cv2.VideoWriter('/home/aistudio/test_result.mp4', cv2.VideoWriter_fourcc(*'mp4v'), round(fps,3), (h,w))for path in img_path:
    img  = cv2.imread(path) 
    # 这东西第一维是高度
    img = cv2.resize(img,(h,w))
    videoWriter.write(img)

3.*成视频音轨

根据图片合成的视频是没有声音的,需要从原视频移动来

In [16]
!pip install moviepy
In [17]
import osimport moviepy.video.io.ImageSequenceClipfrom moviepy.editor import VideoFileClipdef add_mp3(video_src1, video_src2, video_dst):
    ' 将video_src1的音频嵌入video_src2视频中'
    video_src1 = VideoFileClip(video_src1)
    video_src2 = VideoFileClip(video_src2)
    audio = video_src1.audio
    videoclip2 = video_src2.set_audio(audio)
    videoclip2.write_videofile(video_dst, codec='libx264')

video_src1 = '/home/aistudio/test_short.mp4'video_src2 = '/home/aistudio/test_result.mp4'video_dst = '/home/aistudio/test_result_yinpin.mp4'add_mp3(video_src1, video_src2, video_dst)
Moviepy - Building video /home/aistudio/test_result_yinpin.mp4.
MoviePy - Writing audio in test_result_yinpinTEMP_MPY_wvf_snd.mp3

MoviePy - Done.
Moviepy - Writing video /home/aistudio/test_result_yinpin.mp4

Moviepy - Done !
Moviepy - video ready /home/aistudio/test_result_yinpin.mp4

3.7视频插帧

这个耗时较长,可以选用,大约10s视频需要10min用时

注意结果在output中

DAIN 模型通过探索深度的信息来显式检测遮挡。并且开发了一个深度感知的流投影层来合成中间流。在视频补帧方面有较好的效果。

ppgan.apps.DAINPredictor(                        output_path='output',                        weight_path=None,                        time_step=None,                        use_gpu=True,                        remove_duplicates=False)

参数 output_path (str,可选的): 输出的文件夹路径,默认值:output.

weight_path (None,可选的): 载入的权重路径,如果没有设置,则从云端下载默认的权重到本地。默认值:None。

time_step (int): 补帧的时间系数,如果设置为0.5,则原先为每秒30帧的视频,补帧后变为每秒60帧。

remove_duplicates (bool,可选的): 是否删除重复帧,默认值:False.

在本程序中需要需要修改默认配置,可以修改tools/video-enhance.py文件

In [18]
from ppgan.apps import DAINPredictorimport paddle# 使用插帧(DAIN)# input参数表示输入的视频路径# output表示处理后的视频的存放文件夹# proccess_order 表示使用的模型和顺序(目前支持)%cd /home/aistudio/PaddleGAN/applications/
!python tools/video-enhance.py --input /home/aistudio/test_result_yinpin.mp4 \
                               --process_order DAIN \
                               --output /home/aistudio/output
/home/aistudio/PaddleGAN/applications
/home/aistudio/PaddleGAN/PaddleGAN/ppgan/modules/init.py:58: DeprecationWarning: invalid escape sequence \s
  """
/home/aistudio/PaddleGAN/PaddleGAN/ppgan/modules/init.py:122: DeprecationWarning: invalid escape sequence \m
  """
/home/aistudio/PaddleGAN/PaddleGAN/ppgan/modules/init.py:147: DeprecationWarning: invalid escape sequence \m
  """
/home/aistudio/PaddleGAN/PaddleGAN/ppgan/modules/init.py:178: DeprecationWarning: invalid escape sequence \m
  """
/home/aistudio/PaddleGAN/PaddleGAN/ppgan/modules/init.py:215: DeprecationWarning: invalid escape sequence \m
  """
/home/aistudio/PaddleGAN/PaddleGAN/ppgan/modules/dense_motion.py:156: DeprecationWarning: invalid escape sequence \h
  """
Model DAIN process start..
[04/26 22:58:44] ppgan INFO: Downloading DAIN_weight.tar from https://paddlegan.bj.bcebos.com/applications/DAIN_weight.tar to /home/aistudio/.cache/ppgan/DAIN_weight.tar
100%|██████████████████████████████████| 78680/78680 [00:01<00:00, 47540.63it/s]
[04/26 22:58:46] ppgan INFO: Decompressing /home/aistudio/.cache/ppgan/DAIN_weight.tar...
Tue Apr 26 22:58:46-WARNING: The old way to load inference model is deprecated. model path: /home/aistudio/.cache/ppgan/DAIN_weight/model, params path: /home/aistudio/.cache/ppgan/DAIN_weight/params
W0426 22:58:46.768800  1381 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W0426 22:58:46.773906  1381 device_context.cc:465] device: 0, cuDNN Version: 7.6.
Old fps (frame rate):  25.14
New fps (frame rate):  50
100%|█████████████████████████████████████████| 341/341 [12:47<00:00,  2.25s/it]
Model DAIN output frames path: /home/aistudio/output/DAIN/frames-combined/test_result_yinpin/%08d.png
Model DAIN output video path: /home/aistudio/output/DAIN/videos-output/test_result_yinpin.mp4
Model DAIN process done!

4.总结与优缺点

优势

  1. 我之前是想做一个视频的超分的,打算直接调用官方的库,但是显存爆掉了,那个视频也不太大,大约500*500然后2分钟吧,可以直接处理视频是很吃显存的,我这样拆分成图片处理后,甚至可以用16G显存处理2K以至4K视频
  2. 拆分成图片后可以进行更多丰富的操作,如动漫化

缺点

  1. 操作比较复杂,不如直接调用视频处理接口来的快
  2. 对于图片合成为视频那块帧率一直感觉比较玄学,现在还没想太明白
In [ ]


# https  # 直接调用  # 视频处理  # 无法播放  # 音轨  # 一键  # 可以直接  # 如果没有  # 默认值  # 显存  # 可选  # python  # animation  # 接口  # int  # bool  # for  # red  # 排列  # ai  # 工具  # git 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化91478 】 【 技术知识72672 】 【 云计算0 】 【 GEO优化84317 】 【 优选文章0 】 【 营销推广36048 】 【 网络运营41350 】 【 案例网站102563 】 【 AI智能45237


相关推荐: MetaGPT:AI驱动的软件开发团队,颠覆传统编码模式  智谱清言分析数据怎么用_智谱清言分析数据使用方法详细指南【教程】  百度输入法总是弹出ai 百度输入法ai自动弹出关闭  feelin聊天官方网站入口 feelinAl官方网站  千问怎么用提示词生成演讲稿_千问演讲稿提示词框架与开场【教程】  AI赋能抵押贷款:Total Expert AI 销售助理深度解析  趣味 Phonics:轻松掌握 CVC 单词拼读技巧  人工智能时代:你需要知道的真相和未来趋势  AI内容审查:谷歌搜索结果是否受到人为干预?  豆包AI帮你写代码注释 豆包AI编程辅助教程  打造迷人外表:AI技术揭秘面部美学比例与颜值提升  ROBLOX Brookhaven:惊悚友谊与校园秘密(2025版)  AI在建筑行业的革命:提升效率与优化流程  面试必胜:五大面试技巧助你斩获Offer  eBookWriter AI:无需写作也能创作专业电子书  扣子AI如何绑定自有域名_扣子AI域名绑定与SSL配置【步骤】  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  DeepSeek解释机器学习模型 DeepSeek数据科学学习指南  利用AI快速生成数组和枚举:详细指南与实用技巧  解读诗歌中的女性视角:Shelley Puhak 的作品解析  豆包Ai官网在线入口_豆包Ai网页版访问方式  AI如何革新心理健康诊断:从症状检查到大脑分析  深度解析Coldplay酷玩乐队《Viva la Vida》的音乐内涵  探索孟加拉音乐魅力:高尔德普林特莎丽,节日欢歌  稿定AI智能设计怎样自动生成电商Banner_稿定AI智能设计Banner生成流程【步骤】  Amazon Rekognition: 图像与视频分析的强大AI工具  怎么用ai写产品说明书 AI功能介绍与使用步骤详解【实操】  服务合同模板:起草、签署和管理指南,提升业务效率  豆包 AI 在英语单词高效背诵中的趣味应用  AI辅助儿童圣经课程创作:轻松制作教育视频  百度ai助手工具栏怎么关 百度ai助手状态栏隐藏  Power BI: 如何在 Power Query 中更改数据类型  DeepSeek编程怎么用_DeepSeek编程使用方法详细指南【教程】  AISIA O1皮肤检测仪操作指南:安装、使用、疑难解答  AMD Ryzen 5 2600: 游戏玩家高性价比之选  Vizeo AI视频生成器:无需技术,轻松打造营销利器  AI人像摄影新纪元:Gemini AI助力照片编辑  PixianAI抠图怎么修复瑕疵_PixianAI瑕疵修复与手动涂抹工具【步骤】  AI图像生成偏见:克服与优化,打造更真实的数字形象  Speerise亮面体操服测评:舒适与时尚的完美结合  AI简历优化指南:如何让你的简历轻松通过ATS筛选系统  夸克AI能否查快递物流_夸克AI快递查询入口与单号输入【步骤】  雷小兔ai智能写作怎么设置写作风格_雷小兔ai智能写作风格选择方法【指南】  批改网AI检测工具怎样开启实时检测_批改网AI检测工具实时检测开启与延迟设置【指南】  如何在 Google Sheets 中利用 Gemini 自动填充数据  通义千问网页版怎么用模板_通义千问模板使用方法【方法】  ChatGPT官方网页端入口 ChatGPT官网快速登录方法  AI数字人教程:轻松打造专属YouTube虚拟形象  Kling AI 2.5 Turbo:视频生成领域的颠覆者,深度评测与对比  AI网页生成工具有哪些_一键生成企业官网的AI工具推荐 

 2025-07-22

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

南京市珐之弘网络技术有限公司


南京市珐之弘网络技术有限公司

南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 87067657

 13565296790

 87067657@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.