opencv打开视频文件没有声音
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv打开视频文件没有声音相关的知识,希望对你有一定的参考价值。
1: opencv损坏,建议重置。2:静音了,开启声音。
3:扩音器:不能发声了,建议检查扩音部分是否有杂物。
Opencv相当于一个含有丰富函数的程序库,当要处理图像及视频的处理时VC++将调用Opencv里的库函数直接进行处理。所谓程序库,一般是软件作者为了发布方便、替换方便或二次开发目的,而发布的一组可以单独与应用程序进行compile time或runtime链接的二进制可重定位目标码文件。通俗一点说,所谓一个库,就是一个文件,这个文件可以在编译时由编译器直接链接到可执行程序中,也可以在运行时由操作系统的runtime enviroment根据需要动态加载到内存中。一组库,就形成了一个发布包,当然,具体发布多少个库,完全由库提供商自己决定。Opencv里的程序库包含静态库和动态库两种:所谓静态库,就是在静态编译时由编译器到指定目录寻找并且进行链接,一旦链接完成,最终的可执行程序中就包含了该库文件中的所有有用信息,包括代码段、数据段等。所谓动态库,就是在应用程序运行时,由操作系统根据应用程序的请求,动态到指定目录下寻找并装载入内存中,同时需要进行地址重定向。 参考技术A 确实没有声音啊,本来opencv就是在视频文件中把图像提取出来运算用的,你要是想要声音那就是另一套工具了 参考技术B OPencv主要就是视觉处理为主,你要播放声音最好还是directshow本回答被提问者和网友采纳
方便的Opencv实现播放有声音的视频+附带图片生成gif
前言
因为最近老是用到Opencv这个库来处理视频,过程遇到了非常多的细节问题,最后把成品干脆直接放到博客来,这样以后可以随时过来取用。
Opencv读取视频没有声音的原因是因为:视频是分为图像与音频的,Opencv仅仅只是读取了一帧帧图像,并没有读取到音频,所以我们只需要再读取一次音频,并且两者同时播放就OK啦!
【方便的Opencv】实现播放有声音的视频+附带图片生成gif
实现功能
· ❥ 播放视频
· ❥ 播放音频
· ❥ 播放进度展示
· ❥ 帧数统计
· ❥ 按空格键暂停
代码:
# 使用cv2读取显示视频
# 引入math
import math
# 引入opencv
import cv2
from ffpyplayer.player import MediaPlayer
# opencv获取本地视频
def play_video(video_path, audio_play=True):
cap = cv2.VideoCapture(video_path)
if audio_play:
player = MediaPlayer(video_path)
# 打开文件状态
isopen = cap.isOpened()
if not isopen:
print("Err: Video is failure. Exiting ...")
# 视频时长总帧数
total_frame = cap.get(cv2.CAP_PROP_FRAME_COUNT)
# 获取视频宽度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
# 获取视频高度
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 视频帧率
fps = cap.get(cv2.CAP_PROP_FPS)
# 播放帧间隔毫秒数
wait = int(1000 / fps) if fps else 1
# 帧数计数器
read_frame = 0
# 循环读取视频帧
while (isopen):
# 读取帧图像
ret, frame = cap.read()
# 读取错误处理
if not ret:
if read_frame < total_frame:
# 读取错误
print("Err: Can't receive frame. Exiting ...")
else:
# 正常结束
print("Info: Stream is End")
break
# 帧数计数器+1
read_frame = read_frame + 1
cv2.putText(frame, "[/]".format(str(read_frame), str(int(total_frame))), (20, 50),
cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 9), 2)
dst = cv2.resize(frame, (1920//2, 1080//2), interpolation=cv2.INTER_CUBIC) # 窗口大小
# 计算当前播放时码
timecode_h = int(read_frame / fps / 60 / 60)
timecode_m = int(read_frame / fps / 60)
timecode_s = read_frame / fps % 60
s = math.modf(timecode_s)
timecode_s = int(timecode_s)
timecode_f = int(s[0] * fps)
print(":0>2d::0>2d::0>2d.:0>2d".format(timecode_h, timecode_m, timecode_s, timecode_f))
# 显示帧图像
cv2.imshow('image', dst)
# 播放间隔
wk = cv2.waitKey(wait)
# 按键值 & 0xFF是一个二进制AND操作 返回一个不是单字节的代码
keycode = wk & 0xff
# 空格键暂停
if keycode == ord(" "):
cv2.waitKey(0)
# q键退出
if keycode == ord('q'):
print("Info: By user Cancal ...")
break
# 释放实例
cap.release()
# 销毁窗口
cv2.destroyAllWindows()
if __name__ == "__main__":
play_video('', audio_play=False)
将一个文件夹下的图片生成gif
''' Author: Email: 公众号: ''' import os import imageio def create_gif(img_path, gif_name, duration = 1.0): ''' :param image_list: 这个列表用于存放生成动图的图片 :param gif_name: 字符串,所生成gif文件名,带.gif后缀 :param duration: 图像间隔时间 :return: ''' frames = [] for image_name in os.listdir(img_path): temp = os.path.join(img_path, image_name) print(temp) frames.append(imageio.imread(temp)) imageio.mimsave(gif_name, frames, 'GIF', duration=duration) return def main(): #这里放上自己所需要合成的图片文件夹路径 image_path = r'C:\\Users\\86137\\Desktop\\gaitRecognition_platform\\Package\\Fgmask\\tds_nm_03' gif_name = 'new.gif' duration = 0.08 # 播放速度yuexiaoyuekuai create_gif(image_path, gif_name, duration) if __name__ == '__main__': main()
完毕!
Opencv的学习之路漫漫,希望我们能一起加油,共同进步!最后的最后,如果这篇文章有帮助到大家,麻烦点赞+收藏一下喔!
以上是关于opencv打开视频文件没有声音的主要内容,如果未能解决你的问题,请参考以下文章