我用 Python 做了个小仙女代码蹦迪视频
我用 Python 做了个小仙女代码蹦迪视频
gh_1d7504e4dee1
回复:python,领取Python面试题。分享Python教程,Python架构师教程,Python爬虫,Python编程视频,Python脚本,Pycharm教程,Python微服务架构,Python分布式架构,Pycharm注册码。
首先我们需要准备工作,安装you-get用来下载视频。
pip
install
you-
get
you-
get
-o 本地保存路径 视频链接
资源分享
老规矩,最开始我们把后面要用到的库全部导入。
import
os
import
re
import
shutil
import
cv2
from
PIL
import
Image
import
moviepy.editor as mpy
我们先从temp文件夹中读取,筛选出所有后缀名是 .gif 的,然后根据命名规则,将这些gif重命名,方便后面排序。
def
rename_gif
()
:
file_list = os.listdir(
"./temp"
)
# 读取当前文件夹所有文件
# print(file_list)
print(
"检测到文件夹下图片:"
)
n = len(file_list)
num_list = []
num1 = num2 =
0
for
i
in
range(n):
s = str(file_list[i])
if
s[
-4
:] ==
".gif"
:
# 检查后缀
res = re.findall(
r"d+"
, s)
if
res[
0
] ==
’1’
:
num1 +=
1
if
res[
0
] ==
’2’
:
num2 +=
1
src = os.path.join(os.path.abspath(
’./temp/’
), s)
# 原先的图片名字
dst = os.path.join(os.path.abspath(
’./temp/’
), res[
0
] +
’-’
+ res[
1
]+
’.gif’
)
# 根据自己的需要重新命名
os.rename(src, dst)
# 重命名,覆盖原先的名字
num_list.append(num1)
num_list.append(num2)
file_list = os.listdir(
"./temp"
)
# 读取当前文件夹所有文件
for
i
in
range(n):
s = str(file_list[i])
if
s[
-4
:] ==
".gif"
:
# 检查后缀
res = re.findall(
r"d+"
, s)
src = os.path.join(os.path.abspath(
’./temp/’
), s)
# 原先的图片名字
a = int(res[
0
])
-1
index = a*num_list[a
-1
]
dst = os.path.join(os.path.abspath(
’./temp/’
), str(index + int(res[
1
])) +
’.gif’
)
# 根据自己的需要重新命名
os.rename(src, dst)
# 重命名,覆盖原先的名字
接下来,我们要把按帧顺序排列的gif转换成jpg图片。
def
gif2img
(gif_path)
:
gifs = os.listdir(gif_path)
gifs.sort(key=lambda
x:
int(x[
:-
4
]))
# 以名称字符串的数字从小到大排序
for
gif
in
gifs:
im = Image.open(gif_path+gif)
# 打开gif格式的图片
im = im.convert(
’RGB’
)
if
not
os.path.exists(
’./img’
):
os.makedirs(
’./img’
)
for
i, frame
in
enumerate(iter_frames(im)):
frame.save(
’./img/’
+ gif[
0
:-
4
] +
’.jpg’
, **frame.info)
# 保存成jpg格式
图片合成视频,这里我们使用python-openvc模块实现,同样如果之前没有安装的小伙伴,需要先安装下。
pip
install opencv-python
我们可以将图片文件夹的路径传入参数,还可以通过fps设置每秒多少张图片。
def
charts2video
(img_path, video_path)
:
"""将给定目录下的图片转成视频
Args:
img_path: 图片路径
video_path: 输出视频的路径和名称
Returns: 图片转成的视频
"""
images = os.listdir(img_path)
images.sort(key=
lambda
x: int(x[:
-4
]))
# 以名称字符串的数字从小到大排序
fps =
12
# 帧数
fourcc = cv2.VideoWriter_fourcc(
’M’
,
’P’
,
’4’
,
’V’
)
im = Image.open(img_path + images[
0
])
video_writer = cv2.VideoWriter(video_path, fourcc, fps, im.size)
for
img_i
in
images:
frame = cv2.imread(img_path + img_i)
print(
’开始将 ’
+ img_i +
’ 加入视频
’
)
video_writer.write(frame)
# 注意:图片尺寸必须和视频尺寸一样,不然不会被加入视频中!!!
video_writer.release()
def
add_music
()
:
# 读取代码视频
my_clip = mpy.VideoFileClip(
’asc.mp4’
)
# 截取背景音乐
audio_background = mpy.AudioFileClip(
’dance.mp4’
).subclip(
0
,
60
)
audio_background.write_audiofile(
’bk.mp3’
)
# 视频中插入音频
final_clip = my_clip.set_audio(audio_background)
# 保存最终视频
final_clip.write_videofile(
’char_video.mp4’
)
<iframe allowfullscreen="" class="video_iframe rich_pages" data-cover="http%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FutD23ZXCiaX15x8KXanX13qIgIrRI1VZpBVjrJNNvqwDEibp4KsIQ4PnTor35wiclE6egWLuLGe50g7G9WZqN3JFQ%2F0%3Fwx_fmt%3Djpeg" data-mpvid="wxv_1947454292185939968" data-ratio="2.025925925925926" src="http://www.cnmhg.com/e/admin126459646/showimg.php?url=https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_1947454292185939968" data-vidtype="2" data-w="2188" frameborder="0" style="border-radius: 4px;"></iframe>
-
用 Python 写了一个「表情包」,赚了250万 -
Pandas 教程-Pandas DataFrame.astype() -
程序员缺乏经验的 7 种表现!
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26