python实现视频音频同步

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

原理

视频信息:  帧率(秒/帧)    视频时长= 总帧数/帧率

音频播放流程:
1.使用opencv来播放视频画面(毫秒/张)
2.使用moviepy来进行视频音频提取
3.使用playsound2来进行播放音频

音频同步过程:
1.利用threading开启视频播放的子线程和音频播放的子线程,利用多任务并发操作实现音画一起播放
2.音画时间同步优化
由于当前程序执行的时间和声音是同步的,但是视频却是不同步的,只需要对视频进行控制即可。

sleepTime = zhen/rate - time.time() + startTime
             当前总帧数/帧率 = 视频播放时间
             视频播放时间-当前程序执行时间 + 程序开始读取的时间 =  视频延迟

一. 使用OpenCV + 视频库 + 音频库 + 多线程

获取帧率

import cv2

cap = cv2.VideoCapture("视频.mp4")
# 获取视频基本信息

fps = int(cap.get(cv2.CAP_PROP_FPS))      # 帧率(秒/帧)
cfps = cap.get(cv2.CAP_PROP_FRAME_COUNT)  # 总帧数
# fps = cap.get(5)
print(f"视频帧率 = {fps},视频总帧数 = {cfps}")

音频提取

from moviepy.editor import VideoFileClip

voide = VideoFileClip("视频.mp4")
voide.audio.write_audiofile("视频.mp3")

多线程实现音频,视频同步播放

import cv2
import threading
import time
from playsound2 import playsound

# 先播放一秒,如果当前时间对不上,视频就等一下,等音频跟上再继续播放
def video():
    cap = cv2.VideoCapture("视频.mp4")
    rate = cap.get(5)  # 读取视频帧率
    startTime = time.time()
    while cap.isOpened():
        ret, frame = cap.read()
        if ret:
            zhen = cap.get(1)   # 获取当前帧数
            frame = cv2.resize(frame, (1080, 640))
            cv2.imshow('frame', frame)
            cv2.waitKey(1)  # 等待1毫秒 (1秒=1000毫秒)
            sleepTime = zhen/rate - time.time() + startTime
            if sleepTime > 0:  # 播放时间快了就等一下
                time.sleep(sleepTime)


def music():
    playsound("视频.mp3")


vd = threading.Thread(target=video)
mc = threading.Thread(target=music)
vd.start()
mc.start()

二. 使用flask实现视频播放

1.使用pycharm创建flask项目

2在static文件夹下存放 视频.mp4 文件

3.templates文件夹下,创建 movie.html 文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>电影</title>
    <style>
        body{
            background-color: black;
        }
        .box{
            margin: auto;
            width: auto;
            height: auto;
            align-content: center;
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%,-50%);
        }

    </style>
</head>
<body>
<div class="box">
    <video src="./static/{{ movie }}" controls="controls" autoplay="autoplay" width="1200px" height="900px" >视频无法播放时显示的内容</video>
    </div>
</body>
</html>

4.app.py文件

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def hello_world():
    return render_template("movie.html", movie="视频.mp4")


if __name__ == '__main__':
    app.run()
    
#   启动该文件即可
将在控制台看见该网址:   http://127.0.0.1:5000  浏览器访问即可

三. 使用Pyside6

1.  使用pyside6创建窗体
2.  使用多媒体组件
3.  利用多媒体组件播放视频和音频即可

核心代码如下文章来源地址https://www.toymoban.com/news/detail-567918.html

#   注意请先去学习pyqt5

player = QMediaPlayer(self)  # 创建多媒体播放对象(窗口为自己)
audioOutput = QAudioOutput()  # 创建音频播放对象

  
# 视频播放部分 --将开启一个进程进行视频播放
player.setSource(r"{}".format(filename))
player.setVideoOutput(self.ui.videowidget)  # 链接窗体对象
# 音频部分播放 --将开启一个进程进行音频播放
setAudioOutput(self.audioOutput)  # 链接窗体对象
setSource(r"{}".format(filename))  
audioOutput.setVolume(10)  # 音量
player.start()

到了这里,关于python实现视频音频同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Python实现本地视频/音频播放器

    在Python中,有几个库可以用于视频播放,但是没有一个库是完美的,因为它们可能依赖于外部软件或有一些限制。 先看介绍用Python实现本地视频播放器,再介绍用Python实现本地音乐播放器。 Python 实现本地视频播放器 与HTML5+JavaScript实现本地视频播放器相比,使用Python实现比

    2024年04月26日
    浏览(38)
  • 音频视频自动播放解决方案

    1.1、使用背景 公司项目需要用到音频自动播放的功能,首先想到的就是autoplay属性。 想让内容自动播放的最简单方法是将autoplay属性添加到元素,并将autoplay属性设置为 true ,当 autoplay 的属性为 true 时,媒体元素将在发生以下情况后尽快自动开始播放: 页面允许使用自动播放

    2023年04月14日
    浏览(50)
  • Python音频和视频格式转换

    1.音频转换 使用Python中的一些库来进行音频格式转换。其中一个常用的库是pydub。首先,你需要安装pydub库。你可以使用以下命令来安装它: 安装完成后,你可以使用以下代码来进行音频格式转换: 2.视频格式转换 使用FFmpeg库。FFmpeg是一个开源的跨平台多媒体处理工具,可以

    2024年02月15日
    浏览(43)
  • python怎么提取视频中的音频

    目录 操作步骤 1. 安装MoviePy库: 2. 导入MoviePy库和所需的模块: 3. 提取音频: 可能遇到的问题 1. 编解码器支持: 2. 依赖项安装: 3. 文件路径问题: 4. 内存消耗: 5. 输出文件大小: 注意事项 1. 文件格式支持: 2. 安装依赖项: 3. 内存消耗: 4. 文件路径准确性: 5. 音频质量

    2024年02月10日
    浏览(40)
  • FFmpeg代码实现抽取音频、视频数据

    今天开始撸代码,首先使用FFmpeg的API抽取一个MP4文件的音频数据。 应该是第一次在Mac上做C/C++开发,纠结过后选择使用CLion 开发。CLion是 JetBrains下专门用来开发C/C++的IDE,已经用习惯了Android studio和IntelliJ IDEA ,所以CLion用起来还是很顺手的。 在新建一个C项目后,需要把FFmpe

    2024年02月08日
    浏览(40)
  • 提取视频中的音频 Python只需要三行代码!

    身处数据爆炸增长的信息时代,各种各样的数据都飞速增长,视频数据也不例外。我们可以使用 python 来提取视频中的音频,而这 仅仅需要安装一个体量很小的 python 库,然后执行三行代码! 语音数据在数据分析领域极为重要。比如可以分析语义、口音、根据人的情绪等等。

    2023年04月09日
    浏览(40)
  • 使用ffmpeg实现给音频,视频添加水印的操作

    本文主要针对ffmpeg进行整理,从而解决在现实中可能存在的问题。 这里参考的是 Java后台用ffmpeg命令给视频添加水印 - ^身后有尾巴^ - 博客园 (cnblogs.com) 1:先去ffmpeg官网下载其压缩包  Download FFmpeg 下载,解压到指定位置  2.将压缩包拷贝到你想的任意位置并解压,正常解压出

    2023年04月08日
    浏览(42)
  • 在手机或电脑上用Python爬取B站视频和音频

    手机请看:隐形的抖音 - 抖音 (douyin.com) 使用方法: 一、新建一个目录,创建python文件main.py(代码在下面) 二、打开B站,点击要下载视频的网页,在分享中点击 “获取视频分享链接”,一段带网址的字符串已经复制了。稍后运行python后 右键就会粘贴上命令行。 三、右键粘贴

    2024年03月12日
    浏览(43)
  • OpenAI Whisper + FFmpeg + TTS:动态实现跨语言视频音频翻译

    本文作者系360奇舞团前端开发工程师 本文介绍了如何结合 OpenAI Whisper、FFmpeg 和 TTS(Text-to-Speech)技术,以实现将视频翻译为其他语言并更换声音的过程。我们将探讨如何使用 OpenAI Whisper 进行语音识别和翻译,然后使用 FFmpeg 提取视频音轨和处理视频,最后使用 TTS 技术生成新

    2024年02月09日
    浏览(52)
  • qt+ffmpeg 实现音视频播放(二)之音频播放

    通过  avformat_open_input () 打开媒体文件并分配和初始化  AVFormatContext   结构体。 函数原型如下: int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options); 参数说明: - `ps`:指向 `AVFormatContext` 结构体指针的指针,用于存储打开的媒体文件的信息。

    2024年04月22日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包