【实操】python opencv将图片合成视频,并插入音频

这篇具有很好参考价值的文章主要介绍了【实操】python opencv将图片合成视频,并插入音频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介:将一组图片合成视频,并插入音频。用到opencv,ffmpy,pydub等库。

目录

一、统一图片大小及类型,并按数字排序

二、图片合成视频

三、音频的合并与剪裁

四、音视频融合

opencv基本使用


一、统一图片大小及类型,并按数字排序

python对不同尺寸图像改成同一尺寸图像_自动化所副盐的博客-CSDN博客

import cv2
import os

path = './test'    #源目录
out_path = './image'    #修改之后的目录
dirs = os.listdir(path)
i=1
# 输出所有文件和文件夹
for item in dirs:
    image_path = './test/{}'.format(item)
    #print(image_path)
    image = cv2.imread(image_path)
    image = cv2.resize(image, (480, 320), interpolation=cv2.INTER_CUBIC)
    image_path = './image/{}.jpg'.format(str(i))
    cv2.imwrite(image_path, image)
    print(image_path)
    i+=1
    print(item)
    #打印原始名字
    print(i)
    #打印处理后照片名字
print("##################   Resize done     ########################")  

二、图片合成视频

如何将多张图片合成mp4视频格式,并加入背景音乐..._Python 集中营的博客-CSDN博客

import cv2
import os
import sys
from itertools import cycle
from ffmpy import FFmpeg
 

frame_path = "./image"      #图片目录。    图片像素大小需一致
filenames = os.listdir(frame_path)

# 通过itertools.cycle生成一无限循环的迭代器,每次迭代都输出下一章图像对象
img_iter = cycle([cv2.imread(os.sep.join([frame_path, x])) for x in filenames])

# 定义编码方式并创建VideoWriter对象 
fourcc = cv2.VideoWriter_fourcc(*'MJPG')# *'XVID'           视频编解码器
outfile = cv2.VideoWriter("./output.avi", fourcc, 5, (480, 320))    #大小必须和图片大小一致,且所以图片大小必须一致   -- photo_resize.py      
for i in range(100): 
    outfile.write(next(img_iter)) # 视频文件写入一帧
    #cv2.imshow('frame', next(img_iter)) 
    if cv2.waitKey(1) == 27: # 按下Esc键,程序退出(Esc的ASCII值是27,即0001  1011)
        break 
cv2.destroyAllWindows()
print("##################   Video done     ########################")        

其中包含了幻灯片播放的功能:

# OpenCV窗口循环显示
frame_path = "./test"
filenames = os.listdir(frame_path)
print(filenames)

# 通过itertools.cycle生成一无限循环的迭代器,每次迭代都输出下一章图像对象
img_iter = cycle([cv.imread(os.sep.join([frame_path, x])) for x in filenames])
print(img_iter)

key = 0
# 按ESC键结束循环播放,ESC的ASCII码为27,即0001  1011
while key & 0xFF != 27:
	#cv.namedWindow可以使窗口统一,但是图像会失真,不加则窗口大小不同
    cv.namedWindow('Kawaii Small Animals',cv.WINDOW_NORMAL)
    cv.imshow('Kawaii Small Animals', next(img_iter))
    key = cv.waitKey(500)
# cv.waitKey()参数不为0的时候则可以和循环结合产生动态画面
cv.destroyAllWindows()

三、音频的合并与剪裁

可以根据需要自己修改合成自己需要的音频:拼接,合并,叠加,添加静音,音频切割等。

注:合并需音频的通道数,采样率,音频时长是一致

Python-混音、叠加音频、拼接音频及批处理_zkw_1998的博客-CSDN博客_python 音频拼接

python 语音处理工具包AudioSegment的基本使用_王延凯的博客的博客-CSDN博客_audiosegment python
AudioSegment的方法_casanava18的博客-CSDN博客

from pydub import AudioSegment

#拼接音频
print("-----")
sound1 = AudioSegment.from_wav('a.wav')        #绝对路径
sound2 = AudioSegment.from_wav('b.wav')        #绝对路径
output = sound1 + sound2  # sound1拼接sound2
output.export("c.wav", format="wav")  # 保存文件

#添加静音
silence_ring = AudioSegment.silent(int(3*1000))
output = sound1 + silence_ring + sound2
output.export("d.wav", format="wav")  # 保存文件

#音频切割
sound= AudioSegment.from_wav("c.wav")
duration = sound.duration_seconds  #音频时长s
cut_wav = sound[0:10*1000]   #以毫秒为单位截取[begin, end]区间的音频
#cut_wav.export(filePath+ 'test.wav', format='wav')   #存储新的wav文件
cut_wav.export('f.wav', format='wav')   #存储新的wav文件
print("----contact done----")

##############   音频合并   音频叠加   ############
#音频合并: 先确认通道数,采样率,音频时长是否一致
sound3 = AudioSegment.from_wav('t.wav')        #绝对路径
sound = sound3
print("")
print("t.wav")
#取得音频的声道数
channel_count = sound.channels
print(channel_count)
#取得音频文件采样频率
frames_per_second = sound.frame_rate
print(frames_per_second)
#取得音频的持续时间,同 len()
print(sound.duration_seconds)
print((len(sound) / 1000.0))
t3=sound.duration_seconds

sound = sound1
silence_ring = AudioSegment.silent(int(sound3.duration_seconds*1000-sound1.duration_seconds*1000))  #ms
output = sound + silence_ring
output.export("a1.wav", format="wav")  # 保存文件
print("")
print("a.wav")
print(sound1.channels)
print(sound1.frame_rate)
print(sound1.duration_seconds)

sound_1 = AudioSegment.from_wav('a1.wav')        #绝对路径
print("")
print("a1.wav")
print(sound_1.channels)     #通道数
sound_1.frame_rate = 8000   #修改采样率
print(sound_1.frame_rate)   #采样率
sound_1 = sound_1[:(t3*1000)]   #截取指定时长音频
print(sound_1.duration_seconds) #音频时长
sound_1.export("a2.wav", format="wav")  # 保存文件

sound_2 = AudioSegment.from_wav('a2.wav')        #绝对路径
print("")
print("a2.wav")
print(sound_2.channels)
print(sound_2.frame_rate)
print(sound_2.duration_seconds)

# 把sound1和sound2合并成两通道音频
output = AudioSegment.from_mono_audiosegments(sound_2, sound3) #1,2的时长,帧率必须相同,且为单通道
output.export("mono.wav", format="wav")  # 保存文件
print("")
print("mono.wav")
print(output.channels)          #合并后变双通道
print(output.frame_rate)
print(output.duration_seconds)


# 叠加: 把sound2叠加到sound1上面
output = sound1.overlay(sound3)  
# output = sound1.overlay(sound2,position=5000)  # 把sound2叠加到sound1上面,从第5秒开始叠加
output.export("overlay.wav", format="wav")  # 保存文件
print("")
print("overlay.wav")
print(output.channels)      #还是sound1的音频信息 channels  frame_rate duration_seconds
print(output.frame_rate)    
print(output.duration_seconds)

output = sound3.overlay(sound1)  
output.export("overlay2.wav", format="wav")  # 保存文件
print("")
print("overlay2.wav")
print(output.channels)      #还是sound3的音频信息 channels  frame_rate duration_seconds
print(output.frame_rate)    
print(output.duration_seconds)

四、音视频融合

测试发现:音频与视频融合时,以时间短的为最终视频长度(len_audio, len_vedio),所以最好两者长度一致。

Python 视频添加音频(附代码) | Python工具_剑客阿良_ALiang的博客-CSDN博客_python 视频音频文章来源地址https://www.toymoban.com/news/detail-792219.html

from ffmpy import FFmpeg

video_path="./output.avi"
audio_path="./f.wav"
_codec = 'aac'
result="va.avi"
ff = FFmpeg(executable='C:\\Users\\***\\Python\\Python39\\Lib\\site-packages\\imageio_ffmpeg\\binaries\\ffmpeg-win64-v4.2.2.exe',inputs={video_path: None, audio_path: None},outputs={result: '-map 0:v -map 1:a -c:v copy -c:a {} -shortest'.format(_codec)})      #若修改环境变量,则不需要指定ffmpeg程序路径
print(ff.cmd)
ff.run()

opencv基本使用

import cv2 

def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

img = cv2.imread('./a.jpeg')    #读BGR彩图       加cv2.IMREAD_GRAYSCALE,读灰度图
print(img.shape)    #三维结构:高度、宽度、颜色通道个数
print(img.size)     #像素点个数

img2 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)     #BGR彩图转换成灰度图        COLOR_BGR2RGB BGR转RGB
print(img2.shape)
print(img2.size)
cv2.imwrite('./gray.jpg',img2)    #保存图片
#cv_show('winName',img)
#cv_show('winName',img2)

pho = img[1000:1200,1000:1920]  # 剪裁 -- 进行切片 高100到800 宽200到800 -- 图像以左上角为起点,纵高右宽
#cv_show('win2',pho)

b,g,r = cv2.split(img)      # b.shape g.shape r.shape 都为 (1080, 1920)
#cv_show('win3',g)          # 或者填 b、r       是灰色亮度

#显示单一颜色
cur_img = img.copy()
cur_img[:,:,0] = 0 # B不要了 设置为0
cur_img[:,:,1] = 0 # G不要了 设置为0
#cur_img[:,:,2] = 0 # R不要了 设置为0
#cv_show('winR',cur_img)

到了这里,关于【实操】python opencv将图片合成视频,并插入音频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 视频图像处理基础操作 之 视频捕获/存储/提取/合成/合并

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 视频图像处理基础操作 之 视频捕获/存储/提取/合成/合并 一、简单介绍 二、视频处理流程和原理 三、视频的捕获和存储 四、提取视频中的某些帧 五、将图片合成为视频 六、多个视频合并 Python是一种跨平台的计算机程序设计

    2024年04月10日
    浏览(123)
  • [AD-NeRF]由音频和人脸图像合成人脸视频并表现出自然的说话风格------30系显卡实现

    写的有点乱,后面有时间再整理吧。 在做开始,参考了官网和博客的过程,但是过程略微坎坷,问题主要可以总结为: 其代码使用了Tensorflow和Pytorch两个框架 ,我对Tensorflow不是很熟悉,所以直接按照官网的environments.yml安装了,其中的Tensorflow版本使用的Cuda版本为10(我过程中使用的是

    2024年02月03日
    浏览(43)
  • opencv视频截取每一帧并保存为图片python代码CV2实现练习

    当涉及到视频处理时,Python中的OpenCV库提供了强大的功能,可以方便地从视频中截取每一帧并将其保存为图片。这是一个很有趣的练习,可以让你更深入地了解图像处理和多媒体操作。 使用OpenCV库,你可以轻松地读取视频文件,并在循环中逐帧读取视频的每一帧。随后,你可

    2024年02月12日
    浏览(55)
  • 【虚幻引擎UE】UE5 实现相机录制视频并导出(C++基于OpenCV生成视频合成exe)

    说明: 该功能暂不支持导出声音。 由于OpenCV3和UE5不太兼容,因此考虑制作外部exe实现视频合成。 1、实现 SavePicToFile 导出图片蓝图函数 .cpp文件

    2024年02月15日
    浏览(108)
  • 利用Python轻松实现视频合成!

    你是否曾经尝试过在一个视频中添加另一个小视频的场景呢?如果是,你一定会知道这是一项令人头疼的任务。但是,有了Python的 moviepy 库,这个任务将变得非常简单!在本文中,我将向您展示如何使用 moviepy 库合成视频。 首先,我们需要载入需要合成的视频文件。假设我们

    2024年02月02日
    浏览(31)
  • Mindar.JS——实现AR图像追踪插入图片或视频

    注意:此篇文章需要启动https才可调用相机权限 图像追踪示例 需要用到两个js库 下面看一下标签结构 这里是默认配置 上面图片提到需要一个Mind文件,这个文件就是图像识别的图片,工具在这里图像目标编辑器 如果是图片识别显示图片的话就很简单了 如果我想扫描图片展示

    2024年02月14日
    浏览(36)
  • AI歌姬,C位出道,基于PaddleHub/Diffsinger实现音频歌声合成操作(Python3.10)

    懂乐理的音乐专业人士可以通过写乐谱并通过乐器演奏来展示他们的音乐创意和构思,但不识谱的素人如果也想跨界玩儿音乐,那么门槛儿就有点高了。但随着人工智能技术的快速迭代,现在任何一个人都可以成为“创作型歌手”,即自主创作并且让AI进行演唱,极大地降低

    2024年02月05日
    浏览(39)
  • 使用Python采集某网站视频,实现音视频自动合成!

      开发环境 模块的使用 采集下破站视频数据 通过开发者工具进行抓包分析,分析破站视频数据的来源。 开发者工具的使用 打开方式: 鼠标右键点击检查选择Network F12 ctrl + shift + i 想要开发者工具中有数据加载, 需要 刷新网页。 通过元素(Element)面板,我们能查看到想抓取

    2024年02月06日
    浏览(63)
  • HTML插入视频和音频(详解)

      HTML5未出来之前,在线的音频和视频都是借助Flash或者第三方工具实现的,现在HTML5也支持了这方面的功能。在一个支持HTML5的浏览器中,不需要安装任何插件就能播放音频和视频。原生的支持音频和视频,为HTML5注入了巨大的发展潜力。   html实现音频嵌入(传统方式):

    2024年02月04日
    浏览(37)
  • python 用OpenCV 将图片转视频

     我们无法打开output3.mp4。这可能是因为文件类型不受支 持、文件扩展名不正确或文件已损坏,0xC00D36C4 如果生成的视频报这个错,一般是视频的分辨率 设置的不匹配

    2024年01月17日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包