python调用ffmpeg运行时闪屏_python+ffmpeg让字符跳动起来

这篇博客介绍了如何使用Python调用FFmpeg将视频转化为一系列图片,再将图片转化为编码存储为txt文件,最后通过控制台播放这些txt文件,实现了类似字符跳动的效果。详细步骤包括视频转图片、图片转txt以及播放txt内容。
摘要由CSDN通过智能技术生成

项目环境

语言:Python3

编辑器:Pycharm

导包:PIL、numpy

安装软件:FFmpeg

安装软件

1.下载ffmpeg,这里只说Windows下的方式,首先去官网,下载Windows版本的安装包

ffmpeg.png

2.下载完成后,解压,然后找到目录下的bin文件夹,将该目录配置到环境变量中

解压目录.png

3.验证是否安装配置成功,打开cmd,输入ffmpeg -version,出现如下界面则配置成功

sucess.png

程序思路

1.把视频转换为图片

2.把图片转为编码,存成txt文件

3.“播放”这些txt文件

视频转图片

get_image(video_path, image_path),两个参数就是你的视频路径和存放图片的路径。然后os.system()那句话就是让你的Windows在cmd里面执行里面那句话,-i 后面需要指定输入的文件名。-f 指定格式(音频或视频格式)。-vframes 设置转换多少桢(frame)的视频。-ss 从指定的时间(s)截图。

def getImage(video_path, image_path):

img_count = 1

crop_time = 0.0

while crop_time <= 15.0:#转化15s的视频

os.system('ffmpeg -i %s -f image2 -ss %s -vframes 1 %s.png'% (video_path, str(crop_time), video_path+ str(img_count)))

img_count += 1

print('Geting Image ' + str(img_count) + '.png' + ' from time ' + str(crop_time))

crop_time += 0.1#每0.1秒截取一张照片

print('视频转化完成!!!')

在cmd命令行中运行此函数,查看对应文件夹是否有图片生成。

图片转txt

def image_to_txt(image_path, txt_path):

# 这里使用到PIL库convert函数,将RGB图片转化为灰度图,参数'L'代表转化为灰度图

im = Image.open(image_path).convert('L')

charWidth = 100

# 这个是设置你后面在cmd里面显示内容的窗口大小,请根据自己的情况,适当调整值

im = im.resize((charWidth, charWidth // 2))

target_width, target_height = im.size

data = numpy.array(im)[:target_height, :target_width]

f = open(txt_path, 'w',encoding='utf-8')

for row in data:

for pixel in row:

if pixel > 127: # 如果灰度值大于127,也就是偏白的,就写一个字符 '1'

f.write('1')

else:

f.write(' ')

f.write('\n')

f.close()

def getTxt(image_path, txt_path):#调用上面的函数image_to_txt

img_count = 1# 一张图对应一个txt文件,所以每遍历一张图,该值加一

while img_count <= len(os.listdir(image_path)):

#os.listdir(image_path)# 返回所有图片名称,是个字符串列表

imageFile = image_path+ str(img_count) + '.png'

txtFile = txt_path+ str(img_count) + '.txt'

image_to_txt.image_to_txt(imageFile, txtFile)

print('舞蹈加载中: ' + str(img_count) + '%')

img_count += 1

播放输出

通过 os.system('cls') 控制屏幕的及时清除,以便及时显示下一帧图片的编码。

if __name__ == '__main__':

video_dir_path = r'D:\dance\dance.mp4' + '\\'#存储视频文件的路径

txt_dir_path = r'D:\dance\txt' + '\\'#存储txt文件的路径

img_dir_path = r'D:\dance\images' + '\\'#存储图片的路径

getImage(video_dir_path, img_dir_path )

getTxt(img_dir_path, txt_dir_path)

run(txt_dir_path)

def run(txtPath):

txt_count = 1

while txt_count <= len(os.listdir(txtPath)):

os.system('type ' + txtPath + str(txt_count) + '.txt')

# 这里type命令是Windows下的命令,type+文件名,就可以在cmd里面显示文件内容

txt_count += 1

os.system('cls')

运行

此程序由三个文件组成,如下图。建立相对应的目录,提前下好视频文件,放到对应的目录,打开cmd窗口,运行run.py,执行时间稍长,等待片刻。

project.png

image.png

txt.png

效果截图.png

更多内容请关注公众号

元大头.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值