线稿图视频制作--从此短视频平台不缺上传视频了

  🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝 

🥰 博客首页:knighthood2001

😗 欢迎点赞👍评论🗨️

❤️ 热爱python,期待与大家一同进步成长!!❤️

👀给大家推荐一款很火爆的刷题、面试求职网站👀

跟我一起来巩固基础、开启刷题之旅吧

这年头还不来尝试线稿图视频??

        之前笔者也写过将视频转换为线稿图视频的教程,不过将其分成了五部分,也分了五个.py文件,这样虽然讲解很透彻,但是对于想要批量转换的话,每换一个视频,就要去每个.py文件中去修改相应的参数。因此显得非常麻烦。 

        因此本文将上述所有文件整合在一起,通过是需要更改视频文件名,即可输出相应的线稿图视频。这样就变得非常便捷了。

目录

一、目录介绍

二、模块导入

三、文件相关操作

四、获取原视频相应参数、逐帧保存

五、函数讲解

音频提取

原图-线稿图转换

生成无声视频

最终合成有声视频

调用函数

六、总结


一、目录介绍

         

        在线稿图目录下,只需要有py文件和原视频(如dindin.mp4)即可,剩下的只需运行代码,其会自动生成。

        代码最终生成的视频会放在和原视频同一目录下,而data文件夹下的内容,是代码运行过程中的其他文件,如分离出来的音频,转换前后的逐帧图片,无声视频。

        

本次例子以之前很火爆的叮叮当当舞。

二、模块导入

import os
import cv2
from PIL import Image
from PIL import ImageFilter
import moviepy.editor as mp

三、文件相关操作

# TODO 更改文件名称
file = 'dindin.mp4'
filename = file.split(".")[0]
mp3_file = f'{filename}.mp3'if not os.path.exists('data'):os.mkdir('data')
path = os.path.join('data', filename)
new_picture_path = os.path.join('data', filename + "_newpc")
if not os.path.exists(path):os.mkdir(path)
if not os.path.exists(new_picture_path):os.mkdir(new_picture_path)
# 无声视频
file_name = os.path.join('data', 'silence_' + file)
file = 'dindin.mp4'

file为原视频,放在代码相同目录下

注:一定要是英文,否则会因为编码问题出错

filename = file.split(".")[0]
为提取到的文件无后缀名称
mp3_file = f'{filename}.mp3'
为分离出来的mp3
if not os.path.exists('data'):os.mkdir('data')
path = os.path.join('data', filename)
new_picture_path = os.path.join('data', filename + "_newpc")
if not os.path.exists(path):os.mkdir(path)
if not os.path.exists(new_picture_path):os.mkdir(new_picture_path)

这段代码的意思是,首先判断是否有data文件夹,没有则创建。接下来

path = os.path.join('data', filename)
new_picture_path = os.path.join('data', filename + "_newpc")
表示data目录下存放两个文件夹,一个存放的是原视频的逐帧图片,另外一个存放的是新产生的线稿图片。接下来判断两个目录是否存在并创建。
# 无声视频
file_name = os.path.join('data', 'silence_' + file)

 将无声视频也存在data文件夹下面,因为也不是最终版本。

四、获取原视频相应参数、逐帧保存

cap = cv2.VideoCapture(file)
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
print('fps:', fps, '\n', 'width:', width, '\n', 'height:', height, '\n', 'frames:', frames)for i in range(0, frames):flag, frame = cap.read()filename = path + '/{}.jpg'.format(str(i))print(filename)cv2.imwrite(filename, frame)

        首先读取视频,然后获取视频的fps、宽度、高度和总帧数,注意:使用get()函数获取到的数据类型是float类型,需要进行转换才能进行后续的操作,因此这里全部将其转为int类型。

        接下来我们将读取到的每帧图片保存起来    

flag, frame = cap.read()需要在for循环里面,否则每次保存的图片都是视频第一帧的图片。

五、函数讲解

        音频提取

# 音频提取
def extract_audio():my_clip = mp.VideoFileClip(file)my_clip.audio.write_audiofile('data/' + mp3_file)

这一部分内容很简单,就不细讲了 

        原图-线稿图转换

# 原图-线稿图转换
def convert():for i in range(0, frames):'''细节'''square = Image.open(path + "/{}.jpg".format(i))square1 = square.filter(ImageFilter.DETAIL)'''轮廓'''square2 = square1.filter(ImageFilter.CONTOUR)# videowrite.write(square2)square2.save(new_picture_path + "/{}.jpg".format(i))print(new_picture_path + "/{}.jpg".format(i))

frames是视频总帧数,该函数通过打开指定路径中的原图像,并通过两轮转换,将其保存到新路径中。 

        生成无声视频

# 生成无声视频
def picture_merge():size = (width, height)videowrite = cv2.VideoWriter(file_name, -1, fps, size)for i in range(0, frames):img = cv2.imread(new_picture_path + "/{}.jpg".format(i))videowrite.write(img)videowrite.release()print('end!')

该函数通过 

videowrite = cv2.VideoWriter(file_name, -1, fps, size)

将视频保存,将刚刚的获得的线稿图合成一个无声视频。

         最终合成有声视频

# 最终合成有声视频
def final_merge():video = mp.VideoFileClip(file_name)audio = mp.AudioFileClip('data/' + mp3_file)video_merge = video.set_audio(audio)video_merge.write_videofile('final_' + filename + '.mp4')

最终将上述的无声视频和分离的音频合成最终的视频。

        调用函数

if __name__ == '__main__':extract_audio()convert()picture_merge()final_merge()

主函数运行一下,大功告成了。

六、总结

        看到这,是不是觉得很棒呀,如果对你有帮助的话,麻烦来个三连吧🎈🎈 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37234.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

短视频APP开发:短视频特效SDK功能火爆来袭!

为什么短视频这么火呢?因为它符合了用户碎片化时间的需求,既娱乐了大众,又不会浪费用户太多时间。 短视频APP开发以互联网技术为核心,在原有的基础上不断进行创新,进而拥有多种强大的拍摄功能,让用户可以快…

都在抢发AI大模型,谁在关注模型安全?

文|光锥智能,作者|周文斌 如果要给4月定一个主题,“大模型”应该当仁不让。 从4月7日阿里突然放出“通义千问”内测开始;8日,华为放出盘古大模型;10日,商汤推出类ChatGPT产品“商量…

csdn提升博客等级

附: 博客等级 图标等级所需积分L10L2100L3400L4800L51600L64500L79000L825000L950000L10100000L11200000L12300000L13500000L14800000L151000000 一:如何查看自己的博客积分? 想要快速提升等级,就需要按照CSDN的积分规则来获取积…

探索马斯克xAI与GPT模型的现状与发展:引领人工智能的未来

尊敬的读者朋友们,大家好!我是CSDN博主,今天很荣幸为大家带来这篇文章,我们将探索由马斯克宣布成立的xAI以及半年来持续升温的“百模大战”,让我们一起深入了解这一切。 北京时间7月13日凌晨,马斯克在Twitt…

JVM(上篇——①)

JVM(上篇——①) 一、JVM和Java体系结构 1、前言 1.1、你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM(Out of Memory)!想解决线上MGC问题,但却无…

流批一体时代加速到来,阿里引领Flink国际社区持续创新升级

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 本月,知名开源大数据引擎Flink社区对外透露,2022年阿里巴巴、腾讯、字节跳动等中国企业贡献了超过一半的代码,其中阿里巴巴对Flink核心代码贡献最大,中国开发者已经成为Flink全…

Flutter热更新技术探索

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 一,需求背景: APP 发布到市场后,难免会遇到严重的 BUG 阻碍用户使用,因此有在不…

Chat-REC、InstructRec(LLM大模型用于推荐系统)

当众多chat-xxx和xxxGPT喷涌而出的时候,博主就在等它被做到推荐系统的这一天。本篇博文将简要看看一些文章的具体做法。 Chat-REC: Towards Interactive and Explainable LLMs-Augmented Recommender System 先上地址, https://arxiv.org/abs/2303.145…

使用python爬取股票信息

基本思路 首先查看robots.txt,文档说明是允许爬虫的 查找接口:第一次对整个页面进行了爬取,发现返回的内容并不包含我们所需要的信息。说明这部分的信息是通过AJAX渲染的,这就需要我们去查找接口。按F12打开开发者模式&#xff0…

Python爬虫实战,requests模块,爬虫采集网易财经股票交易数据

前言 本文给大家分享的是如何通过Python爬虫采集网易财经易数据 开发工具 Python版本: 3.8 相关模块: requests模块 parsel模块 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可。 思路分析 本文以爬虫网易财经数据…

小白学 Python 爬虫(25):爬取股票信息

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3&am…

python3爬虫基本操作——抓取股票信息

目录 1. requests库发送请求,获取响应内容的字符串格式 2.Beautifulsoup解析并获取指定的内容 3.selenium库 没想到我的第一次 — — 写博客就这样毫无预兆地发生了。其实一直对博客非常感兴趣,博客是很好的交流平台,非常 感谢各路博客大神…

用 Python 爬取股票实时数据

今天我们一起来学习一个 Python 爬虫实战案例,我们的目标网站就是东方财富网,废话不多说,开搞 网站分析 东方财富网地址如下 http://quote.eastmoney.com/center/gridlist.html#hs_a_board 我们通过点击该网站的下一页发现,网页内…

爬取股票信息

爬取网站 网易财经 创建的文件 List_url.py from finance.code_list import CodeListdef Shanghai_Stock_Index():"""上证指数"""code int(input("证券代号&#xff1a;"))if code > 201000 and code < 900957:year int(input…

实战干货!用 Python 爬取股票实时数据!

今天我们一起来学习一个 Python 爬虫实战案例&#xff0c;我们的目标网站就是东方财富网&#xff0c;废话不多说&#xff0c;开搞 网站分析 东方财富网地址如下 http://quote.eastmoney.com/center/gridlist.html#hs_a_board 我们通过点击该网站的下一页发现&#xff0c;网页…

基于Python爬虫的股票成交量数据抓取分析系统

目录 数据获取 2 1.1. 实验环境搭建 2 1.2. 抓取数据 2 1.2.1. 新浪财经 3 1.2.2. 网易财经 6 1.2.3. 东方财富 12 1.2.4. TuShare (挖地兔) 19 1.2.5. 其他平台 21 1.3. 数据获取总结 22 1.3.1. 股票代码抓取的总结 22 1.3.2. 日线数据抓取总结 22 1.3.3. 反爬虫策略及解决的总…

朋友股票亏惨了,我一怒用Python爬取了证券最新数据

大家好&#xff0c;我是辣条。 抓取目标: url:http://webapi.cninfo.com.cn/#/marketDataDate 数据目标: 获取 证券代码 证券简称 交易日期 开盘价 最高价 最低价 收盘价 成交数量 难点: 请求头参数mcode 加密生成 使用第三方库: 1. requests 2. execjs 3. js2py 4. math …

Python爬虫实战:爬取股票信息

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者&#xff1a; PS&#xff1a;如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料以及群交流解答点击即可加入…

python爬虫实战-抓取同花顺股票信息

前言&#xff1a; 在之前介绍requests的基础上&#xff0c;现在开始进行实战。 目标网站&#xff1a;http://q.10jqka.com.cn//index/index/board/all/field/zdf/order/desc/page/ 一 涉及到的技术点&#xff1a; &#xff08;1&#xff09;requests: 用于网页请求 &#xff…

微信小程序登录面板切换不了账号,显示网络连接失败?

打开开发工具就会显示这个提示&#xff0c;无论我是点击确定还是取消&#xff0c;切换账号都显示网络连接失败~&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 我看了一些博客&#xff0c;说是选择直连代理。我试了&#xff0c;还是显示 网络连接…