将视频转为有趣的字符视频,更新 0.3.0 支持多进程速度更快,已支持转换后视频声音
本帖最后由 hrpzcf 于 2021-9-23 09:58 编辑没错,昨天的 图片转字符图 是今天的 视频转字符视频 模块的踏脚石。
顾名思义,就是把视频转为由字符组成的视频。
已更新 0.3.0 版本,增加多进程,视频转换速度更快!
已支持转换后的视频声音,转换后文件体积大幅缩小(这些新特性依赖ffmpeg,没有ffmpeg也可以用此模块但是没有新特性,ffmpeg安装方法见置顶评论)
以上新特性要用新添加的 vTools 类来生成字符视频
效果(层层转录到了这个gif图已经模糊的不行了{:10_266:} ):
用法:
1. 首先通过pip安装:py -m pip install vidtoch -U -i https://mirrors.cloud.tencent.com/pypi/simple
用法 1:使用 vidtoch.makeVideo 函数生成无声的字符视频
# makeVideo 函数参数详解
# 确保你的程序运行入口在 if __name__ == "__main__" 下
# 因为 makeVideo 函数使用了多进程,在 windows 上,如果不做以上要求
# 则可能造成递归调用从而造成灾难性后果
# if __name__ == "__main__":
# makeVideo(
# "源视频路径",
# "生成视频保存路径", # 包括文件名,只能用 .avi 后缀
# acqRate: float = 0.2, # 采集率,0 < acqRate <= 1,值越大越清晰生成越慢
# overwrite: bool = False, # 如果保存目录已有同名文件,此参数控制是否覆盖同名文件
# )
# 使用实例
from vidtoch import makeVideo
# 确保你的程序运行入口在 if __name__ == "__main__" 下
# 因为 makeVideo 函数使用了多进程,在 windows 上,如果不做以上要求
# 则可能造成递归调用从而造成灾难性后果
if __name__ == "__main__":
# 尽量将 acqRate 设置的小些,否则生成视频会非常慢
makeVideo("1.mp4", "new.avi", acqRate=0.1)# 1.mp4 请自己替换成你的源视频完整路径,new.avi请替换为即将生成的文件的完整路径,路径应包括文件名
用法 2:使用 vidtoch.vTools 类生成有声音的字符视频(要求vidtoch 0.3.0版本),依赖FFMPEG
from vidtoch import *
# vTools 类初始化参数详解
# vTools(
# chars: str = None,# 生成的视频要使用的字符,字符串中字符数应大于2个,字符串无需按等效灰度手动排序,可忽略
# ffmpeg: str = None, # ffmpeg可执行文件的路径,为 None 则在当前目录或环境变量中查找,找不到则生成的文件无声音,可忽略
# procNum: int = None # 转换成字符视频时使用的进程数,默认是 cpu数*2,可忽略
# )
# 例:
# if __name__ == "__main__":
# with vTools("@^&*.=+-#`", r"d:\ffmpeg\bin\ffmpeg.exe", 4) as vt:
# with vTools("@^&*.=+-#`") as vt:
# with vTools(ffmpeg=r"d:\ffmpeg\bin\ffmpeg.exe", procNum=4) as vt:
# with vTools("@^&*.=+-#`", procNum=4) as vt:
# vt = vTools(ffmpeg=r"d:\ffmpeg\bin\ffmpeg.exe")
...
# save 方法参数详解
# save(
# savePath: str, # 生成的视频的保存路径,包括文件名,后缀名不限
# acqRate: float = 0.2, # 对原视频的采集率,0 < acqRate <= 1,值越大视频越清晰字体越小,可忽略
# bitRate: int = None,# 生成的视频的码率,默认单位为k,例如值为'1500'则代表生成的视频码率限制在1500k,可忽略
# overwrite: bool = False,# 如果保存目录已有同名文件,此参数控制是否覆盖同名文件,可忽略
# )
def main():
# 写法 1 实例
# 不要忘记将你的程序唯一运行入口置于 if __name__ == "__main__" 分支下
vt = vTools()
vt.open(r"C:\Users\hrpzcf\Desktop\1.mp4") # 路径自行替换,保存路径也一样
if vt.isOpened():
vt.save(r"C:\Users\hrpzcf\Desktop\f.mp4", 0.2, overwrite=1)
vt.close()# 使用完毕不要忘记调用close方法关闭vTools实例
# 写法 2 实例
# 不要忘记将你的程序唯一运行入口置于 if __name__ == "__main__" 分支下
with vTools() as vt:
vt.open(r"C:\Users\hrpzcf\Desktop\1.mp4") # 路径自行替换,保存路径也一样
if vt.isOpened():
vt.save(r"C:\Users\hrpzcf\Desktop\f.mp4", 0.2, overwrite=1)
# with 代码块结束后会自动调用close方法关闭vTools实例
if __name__ == "__main__":
main()
源代码:
**** Hidden Message *****
完整项目结构见:
https://gitee.com/hrpzcf/vidtoch
https://github.com/hrpzcf/vidtoch
本帖最后由 hrpzcf 于 2021-9-23 09:09 编辑
已更新 0.3.0 版本,增加多进程,视频转换速度更快!
已支持转换后的视频声音,转换后文件体积大幅缩小(自测0.3.0版本生成的视频体积只有0.2.0版本生成的27分之1)(这些新特性依赖ffmpeg,没有ffmpeg也可以用但是没有新特性)
以上新特性要用新添加的 vTools 类来生成字符视频
ffmpeg安装方法:
1. 下载完整版:FFMPEG
2. 解压到任意目录,注意路径不要有中文
3. 将bin目录中的ffmpeg.exe放到当前工作目录,或将bin文件夹路径添加到系统环境变量,或放到任意目录,在 vTools 类中指定路径,例如:vt = vTools(ffmpeg=r"d:\ffmpeg\bin\ffmpeg.exe")
4. 新建一个py文件开始写代码吧,示例:
# coding: utf-8
from vidtoch import *
def main():
# 写法 1 实例
# 不要忘记将你的程序唯一运行入口置于 if __name__ == "__main__" 分支下
# vt = vTools()
# vt.open(r"C:\Users\hrpzcf\Desktop\1.mp4") # 路径自行替换,保存路径也一样
# if vt.isOpened():
# vt.save(r"C:\Users\hrpzcf\Desktop\f.mp4", 0.2, overwrite=1)
# vt.close()# 使用完毕不要忘记调用close方法关闭vTools实例
# 写法 2 实例
# 不要忘记将你的程序唯一运行入口置于 if __name__ == "__main__" 分支下
with vTools() as vt:
vt.open(r"C:\Users\hrpzcf\Desktop\1.mp4") # 路径自行替换,保存路径也一样
if vt.isOpened():
vt.save(r"C:\Users\hrpzcf\Desktop\f.mp4", 0.2, overwrite=1)
# with 代码块结束后会自动调用close方法关闭vTools实例
if __name__ == "__main__":
main()
然后就可以运行了
python好好玩 感谢楼主分享! ! 强啊! 厉害啊 收藏了就等于我会了系列 试试~~感谢分享 0.0
牛哇 1 {:9_239:} 大佬nb 马克一下,迟点来看 {:5_108:} 求大佬
学习一下 hrpzcf 发表于 2021-9-22 23:37
你不会是复制我的源代码下去直接运行的吧,这肯定是不行的呀
这个源代码是作为一个模块的, ...
哈哈哈 蛮不好意思的,想的自己娱乐玩一下呢,感谢大佬指点迷津,我自己再玩玩,待会老老实实去继续学元组了{:5_91:} 本帖最后由 hrpzcf 于 2021-9-22 23:41 编辑
plovelove 发表于 2021-9-22 23:14
大佬源码里面修改文件路径的参数是哪个位置,在哪修改,你看我这个是不是文件就没有找到
你不会是复制我的源代码下去直接运行的吧,这肯定是不行的呀{:10_266:}
这个源代码是作为一个模块的,要在你自己写的代码中导入使用的{:10_266:}
首先你要在命令窗口中安装这个模块,要安装到哪个Python环境你自己决定,要求py版本大于等于 3.7
不用从这复制源代码,这里的源代码只是作为参观学习交流用的,模块我已经上传了,可以直接通过pip安装
pip install vidtoch -U -i https://mirrors.cloud.tencent.com/pypi/simple
然后新建一个文件,把里面的路径替换为你自己的路径
from vidtoch import *
def main():
# 一定要将 vidtoch 升级到 0.3.0 版本才能使用此代码
with vTools() as vt:
vt.open(r"C:\Users\hrpzcf\Desktop\1.mp4") # 原视频文件路径
if vt.isOpened(): # 检查源视频文件是否被成功打开
vt.save(
r"C:\Users\hrpzcf\Desktop\f.mp4", # 即将生成的视频文件保存路径
acqRate=0.2, # 对原视频的采集率,0 < acqRate <= 1,值越大视频越清晰字体越小,可忽略
overwrite=1) # 如果保存目录已有同名文件,此参数控制是否覆盖同名文件,值为 True 则覆盖,可忽略
# with 代码块结束后会自动调用close方法关闭vTools实例
if __name__ == "__main__":
main()
然后运行这个文件就成了,更具体的用法可以访问帖子末尾贴的 gitee 网址,有包括 ffmpeg 的安装方法
hrpzcf 发表于 2021-9-22 14:40
那就写文件的全路径,在vscode中,当前文件夹和代码的文件夹可能不是同一个目录,所以没找到文件
大佬源码里面修改文件路径的参数是哪个位置,在哪修改,你看我这个是不是文件就没有找到