【机器学习】FFmpeg+Whisper:二阶段法视频理解(video-to-text)大模型实战

简介: 【机器学习】FFmpeg+Whisper:二阶段法视频理解(video-to-text)大模型实战

一、引言

上一篇对Whisper原理和实战进行了讲解,第7次拿到了热榜第一🏆。今天,我们在Whisper的基础上,引入ffmpeg工具对视频的音频进行抽取,再使用Whisper将音频转为文本,通过二阶段法实现视频内容的理解。

二、FFmpeg工具介绍

2.1 什么是FFmpeg

FFmpeg是一个开源的跨平台多媒体处理工具,它可以处理音频/视频数据,包括转码、转换格式、分割、合并等操作。

2.2 FFmpeg核心原理

  • 多媒体流的解析:FFmpeg能够解析各种常见的多媒体格式,包括MP4, MKV, AVI, MP3, OGG等,并将其转换为FFmpeg内部的统一表示格式,也就是所谓的复用格式(Container Format)和编码格式(Codec)。
  • 多媒体流的编码和解码:FFmpeg可以使用不同的编解码器来编码和解码音频/视频数据。例如,它可以使用H.264编码来压缩视频数据,使用AAC编码来压缩音频数据。
  • 过滤器(Filters):FFmpeg提供了一个强大的过滤器系统,可以用来处理视频和音频的各种效果,例如裁剪、裁切、旋转、缩放等。
  • 流的复用和解复用:FFmpeg可以将多个音频/视频流合并为一个文件,也可以将一个文件分离成多个音频/视频流。
  • 并行处理:FFmpeg利用多线程技术,可以并行处理多个任务,比如同时进行多个转码操作。

2.3 FFmpeg使用示例

ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 192k -f mp3 output.mp3
  • -i input.mp4 指定输入文件。
  • -vn 表示禁用视频录制。
  • -ar 44100 设置采样率为44.1kHz。
  • -ac 2 设置声道数为2(立体声)。
  • -ab 192k 设置比特率为192k。
  • -f mp3 设置输出格式为MP3。
  • output.mp3 是输出文件的名称。

三、FFmpeg+Whisper二阶段法视频理解实战

3.1 FFmpeg安装

由于FFmpeg不支持pip安装,所以需要使用apt-get

sudo apt-get update && apt-get install ffmpeg

3.2 Whisper模型下载

这里与上一篇一样,还是采用transformers的pipeline,首先创建conda环境以及安装transformers

创建并激活conda环境:

conda create -n video2text python=3.11
conda activate video2text

安装transformers库:

pip install transformers -i https://mirrors.cloud.tencent.com/pypi/simple

基于transformers的pipeline会自动进行模型下载,当然,如果您的网速不行,请替换HF_ENDPOINT为国内镜像。

os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
 
transcriber = pipeline(task="automatic-speech-recognition", model="openai/whisper-medium")

不同尺寸模型参数量、多语言支持情况、需要现存大小以及推理速度如下

3.3 FFmpeg抽取视频的音频

3.3.1 方案一:命令行方式使用ffmpeg

首先将ffmpeg命令放入ffmpeg_command,之后采用subprocess库的run方法执行ffmpeg_command内的命令。

输入的视频文件为input_file,输出的音频文件为output_file。

import subprocess
def extract_audio(input_file, output_file):
    """
    使用FFmpeg从MP4文件中提取音频并保存为MP3格式。
    :param input_file: 输入的MP4文件路径
    :param output_file: 输出的MP3文件路径
    """
    # 构建FFmpeg命令
    ffmpeg_command = [
        'ffmpeg', '-i', input_file, '-vn', '-acodec', 'libmp3lame', output_file
    ]
 
    try:
        # 执行命令
        subprocess.run(ffmpeg_command, check=True)
        print(f"音频已成功从 {input_file} 提取到 {output_file}")
    except subprocess.CalledProcessError as e:
        print(f"处理错误: {e}")

3.3.2 方案二:ffmpeg-python库使用ffmpeg

首先安装ffmpeg-python:

pip install ffmpeg-python -i  https://mirrors.cloud.tencent.com/pypi/simple

引入ffmpeg库,一行代码完成音频转文本

import ffmpeg
def extract_audio(input_file, output_file):
    """
    使用FFmpeg从MP4文件中提取音频并保存为MP3格式。
    :param input_file: 输入的MP4文件路径
    :param output_file: 输出的MP3文件路径
    """
 
    try:
        # 执行命令
        ffmpeg.input(input_file).output(output_file, acodec="libmp3lame", ac=2, ar="44100").run()
        print(f"音频已成功从 {input_file} 提取到 {output_file}")
    except subprocess.CalledProcessError as e:
        print(f"处理错误: {e}")

3.4 Whisper将音频转为文本

from transformers import pipeline
def speech2text(speech_file):
    transcriber = pipeline(task="automatic-speech-recognition", model="openai/whisper-medium")
    text_dict = transcriber(speech_file)
    return text_dict

这里采用pipeline完成openai/whisper-medium的模型下载以及实例化,将音频文件输入实例化的transcriber对象即刻得到文本。

3.5 视频理解完整代码

import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["CUDA_VISIBLE_DEVICES"] = "2"
os.environ["TF_ENABLE_ONEDNN_OPTS"] = "0"
 
from transformers import pipeline
import subprocess
 
def speech2text(speech_file):
    transcriber = pipeline(task="automatic-speech-recognition", model="openai/whisper-medium")
    text_dict = transcriber(speech_file)
    return text_dict
def extract_audio(input_file, output_file):
    """
    使用FFmpeg从MP4文件中提取音频并保存为MP3格式。
    :param input_file: 输入的MP4文件路径
    :param output_file: 输出的MP3文件路径
    """
    # 构建FFmpeg命令
    ffmpeg_command = [
        'ffmpeg', '-i', input_file, '-vn', '-acodec', 'libmp3lame', output_file
    ]
 
    try:
        # 执行命令
        subprocess.run(ffmpeg_command, check=True)
        print(f"音频已成功从 {input_file} 提取到 {output_file}")
    except subprocess.CalledProcessError as e:
        print(f"处理错误: {e}")
 
 
 
import argparse
import json
def main():
    parser = argparse.ArgumentParser(description="视频转文本")
    parser.add_argument("--video","-v", type=str, help="输入视频文件路径")
    parser.add_argument("--audio","-a", type=str, help="输出音频文件路径")
 
    args = parser.parse_args()
    print(args) 
 
    extract_audio(args.video, args.audio)
    text_dict = speech2text(args.audio)
    print("视频内的文本是:\n" +  text_dict["text"])
    #print("视频内的文本是:\n"+ json.dumps(text_dict,indent=4))
 
if __name__=="__main__":
    main()

输出为:

3.6 视频理解模型部署

如果想将该服务部署成语音识别API服务,可以参考之前的FastAPI相关文章

四、总结

本文在上一篇音频转文本的基础上,引入了视频转音频,这样可以采用二阶段法:先提取音频,再音频转文字的方法完成视频内容理解。之后可以配上LLM对视频内提取的文本进行一系列应用。

希望可以帮到您,如果觉得有帮助的话,期待您的三连+投票!

目录
相关文章
|
2天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
4天前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
6天前
|
数据可视化 API 开发者
R1类模型推理能力评测手把手实战
R1类模型推理能力评测手把手实战
|
15天前
|
人工智能 自然语言处理 网络安全
基于阿里云 Milvus + DeepSeek + PAI LangStudio 的低成本高精度 RAG 实战
阿里云向量检索服务Milvus版是一款全托管向量检索引擎,并确保与开源Milvus的完全兼容性,支持无缝迁移。它在开源版本的基础上增强了可扩展性,能提供大规模AI向量数据的相似性检索服务。凭借其开箱即用的特性、灵活的扩展能力和全链路监控告警,Milvus云服务成为多样化AI应用场景的理想选择,包括多模态搜索、检索增强生成(RAG)、搜索推荐、内容风险识别等。您还可以利用开源的Attu工具进行可视化操作,进一步促进应用的快速开发和部署。
|
17天前
|
数据可视化 API 开发者
R1类模型推理能力评测手把手实战
随着DeepSeek-R1模型的广泛应用,越来越多的开发者开始尝试复现类似的模型,以提升其推理能力。
|
24天前
|
机器学习/深度学习 人工智能 开发者
DeepSeek服务器繁忙?拒绝稍后再试!基于阿里云PAI实现0代码一键部署DeepSeek-V3和DeepSeek-R1大模型
阿里云PAI平台支持零代码一键部署DeepSeek-V3和DeepSeek-R1大模型,用户可轻松实现从训练到部署再到推理的全流程。通过PAI Model Gallery,开发者只需简单几步即可完成模型部署,享受高效便捷的AI开发体验。具体步骤包括开通PAI服务、进入控制台选择模型、一键部署并获取调用信息。整个过程无需编写代码,极大简化了模型应用的门槛。
213 7
|
21天前
|
数据可视化 API 开发者
R1类模型推理能力评测手把手实战
随着DeepSeek-R1模型的广泛应用,越来越多的开发者开始尝试复现类似的模型,以提升其推理能力。
|
4月前
|
机器学习/深度学习 人工智能 TensorFlow
基于TensorFlow的深度学习模型训练与优化实战
基于TensorFlow的深度学习模型训练与优化实战
176 3
|
4月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
216 6
|
10天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。

热门文章

最新文章