当前位置: 首页 > news >正文

SadTalker数字人增加视频输出mp4质量精度

最近在用数字人简易方案,看到了sadtalker虽然效果差,但是可以作为一个快速方案,没有安装sd的版本,随便找了个一键安装包

设置如上

 使用倒是非常简单,但是出现一个问题,就是输出的mp4都出马赛克了

界面上却没有一个可以调节mp4生成质量的地方(并非换脸效果),

先说结论

进入SadTalker\src\utils修改videoio.py

cmd = r'ffmpeg -y -hide_banner -loglevel error -i "%s" -i "%s" -vcodec mpeg4 -crf 24 -b:v 400M "%s"' % (video, audio, temp_file)

添加的就是-crf 24 -b:v 400M 用来提高输出质量

另外一个可有可无的修改地方就是(我也忘记有没有用了)SadTalker\src\facerender里的animate.py

imageio.mimsave(path, result,  fps=float(25),codec='libx264', quality=10)

imageio是借助FFmpeg快速读写视频图片

大致就是这两个位置

搜索过程

如果语音时间长了视频效果就更差了,于是进入代码搜索

gen_video = gr.Video(label="视频输出", format="mov").style(width=256)

 里面就gr就是gradio是一个界面库,没有什么可改的,改进去就变成改别人的库了

进入src看看gradio_demo.py这个最大的文件

里面看到cmd = r"ffmpeg -y -hide_banner -loglevel error -i %s %s"表示有视频处理的东西

随后进入src.facerender.animate找到imageio.mimsave处理过程,但是光是改这个并没有用,测试了很多次

突然发现关键一句

save_video_with_watermark(path, new_audio_path, av_path, watermark= False)

这个注释掉了就报错了,然后发现save_video_with_watermark这个方法会在视频生成后,继续对生成的视频处理,然后生成一个低质量的覆盖原始文件,虽然报错,但是能输出一个未压缩的正常mp4文件,但是也没有音频合进去

然后通过from src.utils.videoio import save_video_with_watermark找到了videoio文件,主要是用来合成水印和音频的,水印是默认不开的,但是这个转换过程会降低视频质量

原句r'ffmpeg -y -hide_banner -loglevel error -i "%s" -i "%s" -vcodec mpeg4 "%s"'作用

问了gpt以后

这个命令是一个使用 ffmpeg (一种广泛使用的多媒体处理工具)的命令行字符串,用于将两个输入文件转换并编码为一个输出文件。让我们逐部分来解释这个命令:ffmpeg:这是命令的开始,调用 ffmpeg 程序。
-y:这个选项表示自动覆盖输出文件。如果没有这个选项,当输出文件已经存在时,ffmpeg 会询问是否覆盖。
-hide_banner:这个选项用来隐藏启动时的版权和版本信息等输出。这使得输出更加清晰,只显示重要的信息。
-loglevel error:这个选项设置日志的级别。error 表示只有错误信息会被打印出来,这有助于减少不必要的日志输出。
-i "%s":-i 代表输入文件。"%s" 是一个占位符,将在命令执行时被具体的文件路径替换。由于这个占位符出现了两次,这意味着命令将接收两个输入文件。
-vcodec mpeg4:-vcodec 指定了视频编解码器。在这里,它设置为使用 mpeg4 编解码器进行视频编码。
"%s":这是第三个占位符,代表输出文件。当命令执行时,它会被输出文件的路径替换。

相关文章:

  • C#/WPF JSON序列化和反序列化
  • C单片机关键字extern、static 和 const
  • WPF Border
  • labelme目标检测数据类型转换
  • 重组蛋白表达系统的比较-卡梅德生物
  • Unity 渲染顺序受哪些影响(相机depth、SortingLayer、Render Queue、透明)
  • mysql的统计数据count
  • AI大模型引领未来智慧科研暨ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用
  • 【即插即用篇】YOLOv8改进实战 | 引入 Involution(内卷),用于视觉识别的新一代神经网络!涨点神器!
  • 云渲染UE4像素流送搭建(winows、ubuntu单实例与多实例像素流送)
  • SQL进阶:子查询
  • 轻量Http客户端工具VSCode和IDEA
  • AutoSAR(基础入门篇)2.2-AutoSAR架构中的Ports类型与Runnables可运行实体
  • 智能优化算法应用:基于厨师算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • VideoPoet: Google的一种用于零样本视频生成的大型语言模型
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • Android单元测试 - 几个重要问题
  • Babel配置的不完全指南
  • es6
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Protobuf3语言指南
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Spark学习笔记之相关记录
  • 构建二叉树进行数值数组的去重及优化
  • 关于springcloud Gateway中的限流
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 爬虫模拟登陆 SegmentFault
  • 前端学习笔记之观察者模式
  • 数据结构java版之冒泡排序及优化
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • Prometheus VS InfluxDB
  • 第二十章:异步和文件I/O.(二十三)
  • ​人工智能书单(数学基础篇)
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (12)Linux 常见的三种进程状态
  • (4)logging(日志模块)
  • (vue)页面文件上传获取:action地址
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转) 深度模型优化性能 调参
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)创业家杂志:UCWEB天使第一步
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .Net 高效开发之不可错过的实用工具
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net6Api后台+uniapp导出Excel
  • .net打印*三角形
  • .NET开发者必备的11款免费工具
  • @Autowired @Resource @Qualifier的区别
  • @基于大模型的旅游路线推荐方案
  • @我的前任是个极品 微博分析