【方便的Opencv】实现播放有声音的视频+附带图片生成gif

这篇具有很好参考价值的文章主要介绍了【方便的Opencv】实现播放有声音的视频+附带图片生成gif。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

吃瓜🍉

        因为最近老是用到Opencv这个库来处理视频,过程遇到了非常多的细节问题,最后把成品干脆直接放到博客来,这样以后可以随时过来取用。

        Opencv读取视频没有声音的原因是因为:视频是分为图像与音频的,Opencv仅仅只是读取了一帧帧图像,并没有读取到音频,所以我们只需要再读取一次音频,并且两者同时播放就OK啦!


 【方便的Opencv】实现播放有声音的视频+附带图片生成gif

前言

实现功能

代码:

 将一个文件夹下的图片生成gif


实现功能

  1.  · ❥  播放视频 ❤
  2.  · ❥  播放音频 ❤
  3.  · ❥  播放进度展示 ❤
  4.  · ❥  帧数统计 ❤
  5.  · ❥  按空格键可暂停。 ❤

代码—Code show time!👑

# 使用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) #audio_play=True就是播放音频,默认为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】实现播放有声音的视频+附带图片生成gif文章来源地址https://www.toymoban.com/news/detail-406482.html

到了这里,关于【方便的Opencv】实现播放有声音的视频+附带图片生成gif的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Flutter的AspectRatio控件实现视频播放、图片播放按照长宽比缩放

    AspectRatio小部件用于调整其子级小部件的宽高比。它将其子级小部件的宽度调整为给定的宽度,并根据宽度计算出相应的高度,以保持指定的宽高比。 调整容器的宽高比: 当您希望在布局中使用容器或小部件时,以特定的宽高比显示内容时,可以使用AspectRatio。 例如,您可能

    2024年02月13日
    浏览(45)
  • vue+萤石云ezuikit.js播放直播流视频(声音自动关闭,添加控件,多个视频播放)

    vue+萤石云ezuikit.js播放直播流视频(声音自动关闭,添加控件,多个视频播放) 实例使用 引入最新的ezuikit.js 看过官网的文档都知道萤石云的文档是多么的‘善解人意’哈,懂得都懂,很多东西没有说清楚的,只能靠自己去摸索或者看他们的demo来一点点测试实现 官网地址:

    2024年02月04日
    浏览(96)
  • QT实现OpenCV播放rtsp视频流

    使用OpenCV(图像处理)、FastDeploy(飞桨部署)库; 监控相机传输数据用的是码流,高清网络摄像机产品编码器都会产生两个编码格式,称为 主码流 和 子码流 。这就叫双码流技术。 目的是用于解决监控录像的本地存储和网络传输的图像的质量问题。双码流能实现本地和远程

    2024年02月03日
    浏览(38)
  • Unity3d C#利用本地网页快速打开萤石云监控视频流(ezopen)实现云台,声音等控制,支持WebGL平台,替代UMP播放(含源码)

    之前我介绍了替代Universal?Media?PlayerUMP播放石云监控视频流(ezopen)的功能,效果还是很明显的,笔者的测试是差不多3-5秒就能打开监控画面,不过稍微遗憾的是,之前的功能是iframe打开石云提供的播放网页的形式,功能基本只有画质切换,声音开关等;具体可以移步查看(https

    2024年02月13日
    浏览(37)
  • Qt6 QMediaPlayer播放视频没有声音或者无法播放声音报错handleSourceError: 0x8007007B解决方法(无需下载解码器)

    Qt5到Qt6时变动了许多类QMediaPlayer也在其中。曾经只需要这样即可播放视频。 而如今需要这样 这样写完后运行,发现视频可以播放了,但是发现了个问题,播放的视频没有声音。打开浏览器搜索,发现好像没有类似问题的文章。至少笔者没找到太多类似的。有也是大部分都是

    2024年02月13日
    浏览(53)
  • 【unity安卓】Unity2021导出安卓项目视频无法播放(黑屏、只有声音)

    感谢陈老师解决这个问题! 使用videoplay播放视频导出安卓项目后视频无法播放 1.加入这几个shader 整体所需shader 2.改视频设置 codec 改vp8 transcode勾选 3.修改项目申请读取手机读写权限(非必须)

    2024年02月12日
    浏览(32)
  • 【OpenCV+Qt】实现简易视频播放器——支持进度条拖动

    OpenCV实现视频播放器,其思路大致就是在线程中使用OpenCV中的VideoCapture循环读取本地视频的每一帧Mat,然后发送到界面转换成QImage进行显示,而进度条拖动则用到了VideoCapture中的set函数,进度条则是使用Qslider;并且通过自定义新的进度条类实现点击跳转功能; 效果: 1.进行

    2023年04月08日
    浏览(42)
  • 【双核浏览器ChromeCore播放视频出错,重影、有声音但黑屏、缺角······】

        目录 一、【问题】 二、【解决方法】   1、找客服【首选】  2、去官网下载新版本 安装 (或者找客服要安装包)           这两天用 双核浏览器 打开哔哩哔哩播放视频时,却发现 页面很卡、视频播放不正常 (黑屏,或者加载半天也没反应,切换页面后,视频上面还

    2023年04月09日
    浏览(27)
  • 使用vant+video.js实现轮播图图片和视频轮播播放

    先上效果图 1. 安装 2. 在需要用到的页面引入 3. 具体页面使用 假设传给子组件的数组结构 按照步骤来使用,其他地方视频播放情况都还好,至少安卓是好的,只是点击播放和暂停时候,ios需要点击多下才能触发点击事件; 然后以为是video.js插件可能没更新,ios版本迭代超过

    2023年04月08日
    浏览(29)
  • 用python实现文本/图片生成视频

    使用Python来生成视频通常涉及到使用一些专门的库,比如 OpenCV 或者 moviepy。下面是一个简单的例子,使用OpenCV和PIL(Python Imaging Library)来创建一个视频。 python复制代码 import cv2 import numpy as np from PIL import Image import os # 图片路径列表 image_list = [\\\'img1.jpg\\\', \\\'img2.jpg\\\', \\\'img3.jpg\\\'] # 视频

    2024年01月17日
    浏览(73)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包