惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cisco Talos Blog
Cisco Talos Blog
V
V2EX
C
Check Point Blog
GbyAI
GbyAI
D
Docker
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog RSS Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
Netflix TechBlog - Medium
T
Troy Hunt's Blog
博客园 - Franky
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Security Blog
Microsoft Security Blog
P
Privacy & Cybersecurity Law Blog
WordPress大学
WordPress大学
The Cloudflare Blog
S
SegmentFault 最新的问题
Latest news
Latest news
Microsoft Azure Blog
Microsoft Azure Blog
P
Proofpoint News Feed
I
InfoQ
博客园 - 【当耐特】
NISL@THU
NISL@THU
A
About on SuperTechFans
T
Tailwind CSS Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
The Hacker News
The Hacker News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Scott Helme
Scott Helme
雷峰网
雷峰网
C
CXSECURITY Database RSS Feed - CXSecurity.com
Security Latest
Security Latest
V
Vulnerabilities – Threatpost
Security Archives - TechRepublic
Security Archives - TechRepublic
A
Arctic Wolf
Hacker News: Ask HN
Hacker News: Ask HN
N
News and Events Feed by Topic
IT之家
IT之家
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
aimingoo的专栏
aimingoo的专栏
T
Threat Research - Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
SecWiki News
SecWiki News
大猫的无限游戏
大猫的无限游戏
S
Security Affairs
The Register - Security
The Register - Security
www.infosecurity-magazine.com
www.infosecurity-magazine.com
L
LINUX DO - 热门话题
T
Tor Project blog

博客园 - ®Geovin Du Dream Park™

go: Functional Options Pattern go:Timing Functions Pattern python: Timing Functions Pattern go: Steady-State Pattern python: Steady-State Pattern go: Handshaking Pattern python: Handshaking Pattern go: Fail-Fast Pattern python: Fail-Fast Pattern I go: Deadline Pattern python: Deadline Pattern go: Circuit-Breaker Pattern python: Circuit-Breaker Pattern go: Bulkheads Pattern python: Bulkheads Pattern go: Push & Pull Pattern python: Push & Pull Pattern python: Publish/Subscribe Pattern II go: Publish/Subscribe Pattern python: Publish/Subscribe Pattern go: Futures & Promises Pattern python: Futures & Promises Pattern go: Worker Pool Pattern go:Pipeline Pattern python: Worker Pool Pattern python: Pipeline Pattern go: Fan-Out Pattern python: Fan-Out Pattern go: Fan-In Pattern python: Fan-In Pattern Fan-In go: Producer Consumer  Pattern python: Producer Consumer Pattern go: Parallelism Pattern python: Parallelism Pattern go: Reactor Pattern python: Reactor Pattern go: Generators Pattern python: Generators Pattern go: Coroutines Pattern python:Coroutines Pattern go: Broadcast Pattern python: Broadcast Pattern python: Bounded Parallelism Pattern go: Bounded Parallelism Pattern python: N-Barrier Pattern go: N-Barrier Pattern python: Semaphore Pattern go: Semaphore Pattern python: Read-Write Lock Pattern go: Read-Write Lock Pattern python: Monitor Pattern go: Monitor Pattern python: Mutex Pattern go: Lock/Mutex Pattern Python: Condition Variable Pattern go:Condition Variable Pattern python: Registry Pattern python: Interpreter Pattern go: Interpreter Pattern go: Registry Pattern go: Memento Pattern go: Command Pattern go: State Pattern go:Template Method Pattern go: Strategy Pattern go: Visitor Pattern go: Observer Pattern go: Mediator Pattern go: Iterator Pattern go: Chain of Responsibility Pattern go: Proxy Pattern go:Decorator Pattern go: Facade Pattern go: Flyweight Pattern go: Composite Pattern go: Singleton Pattern go: Prototype Pattern go: Bridge Pattern go: Adapter Pattern go: Builder Pattern 密码进行加盐哈希 using CSharp,Python,Go,Java go: Abstract Factory Pattern go: Model,Interface,DAL ,Factory,BLL using mysql go: Simple Factory Pattern go: Factory Method Pattern go: goLang 在Windows环境搭建Go语言开发环境 CSharp: Parallel Extensions cpp: class python: 蝴蝶跟随鼠标 javascript: 中国历史人物热力分布图using echart javascript: 中国历史人物热力图 python: 初养龙虾微信纯文字自动回复using workBuddy python: object 入门 python: Factory Method Pattern python: Simple Factory Pattern python: Abstract Factory Pattern 区域化 代码 python: Null Object Pattern python: Builder Pattern python: Adapter Pattern
python: speech to text offline
®Geovin Du Dream Park™ · 2026-06-14 · via 博客园 - ®Geovin Du Dream Park™
pip install moviepy 
pip install SpeechRecognition
pip install pydub
pip install ffmpeg-downloader
pip install imageio-ffmpeg
pip install openai-whisper

识别音频声音 ,转换不是很准

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:pip install moviepy SpeechRecognition  pip install openai-whisper
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/14 17:40 
# User      :  geovindu
# Product   : PyCharm
# Project   : Pysimple
# File      : MP4totextdest.py

import warnings
warnings.filterwarnings("ignore")
warnings.filterwarnings("ignore", category=RuntimeWarning)


from moviepy import VideoFileClip
import speech_recognition as sr
import os
import whisper
import numpy as np
import wave
import audioop
import whisper.audio


VIDEO_FILE = "20260614_102306.mp4"
TEMP_WAV = "temp_audio.wav"
OUTPUT_TXT = "完整演讲文稿_带时间戳.txt"

# 1. 提取视频音频
print("正在提取音频...")
video = VideoFileClip(VIDEO_FILE)
# 导出16位单声道标准wav,适配识别
video.audio.write_audiofile(TEMP_WAV, codec="pcm_s16le", fps=16000)
video.close()


# 2. 原生Python读取wav,彻底绕过ffmpeg
def load_audio_without_ffmpeg(path):
    with wave.open(path, 'rb') as wav_file:
        n_channels = wav_file.getnchannels()
        width = wav_file.getsampwidth()
        frames = wav_file.readframes(wav_file.getnframes())

    # 双声道转单声道
    if n_channels == 2:
        frames = audioop.tomono(frames, width, 0.5, 0.5)
    # 转浮点音频数组
    audio_np = np.frombuffer(frames, dtype=np.int16).flatten().astype(np.float32) / 32768.0
    return audio_np


# 覆盖whisper自带读取函数,不再调用ffmpeg
import whisper.audio

whisper.audio.load_audio = load_audio_without_ffmpeg

# 3. 加载最轻量模型 tiny(速度最快,中文演讲够用)
print("加载离线语音模型 tiny ...")
model = whisper.load_model("tiny")

# 4. 开始识别,开启分段时间戳
print("开始逐段识别演讲内容,请等待...")
result = model.transcribe(
    audio=TEMP_WAV,
    language="zh",
    verbose=False,
    word_timestamps=True
)

# 5. 格式化带时间戳文稿,实时打印每一段
full_content = "=== EV录屏 第十八届海峡论坛苏恒演讲 完整转写稿 ===\n\n"
print("\n====================识别结果====================")
for seg in result["segments"]:
    start_min = int(seg["start"] // 60)
    start_sec = int(seg["start"] % 60)
    end_min = int(seg["end"] // 60)
    end_sec = int(seg["end"] % 60)
    seg_text = seg["text"].strip()

    line = f"[{start_min:02d}:{start_sec:02d} - {end_min:02d}:{end_sec:02d}] {seg_text}"
    print(line)  # 实时控制台打印每一段文字
    full_content += line + "\n"

# 6. 保存本地文本
with open(OUTPUT_TXT, "w", encoding="utf-8") as f:
    f.write(full_content)

# 清理临时音频文件
os.remove(TEMP_WAV)
print(f"\n================================================")
print(f"✅ 全部识别完成!文稿已保存至:{OUTPUT_TXT}")

输出:

image

第十八届海峡论坛苏恒演讲 完整修正定稿(AI修正:保留原时间戳、修正同音错字、理顺语义、规范用词)
=== EV 录屏 2026 年 6 月 13 日 第十八届海峡论坛苏恒演讲 完整转写稿 ===
[00:00 - 00:02] 王沪宁主席、李慎明副主席
[00:02 - 00:04] 各位领导,各位嘉宾
[00:04 - 00:07] 各位两岸的朋友们,大家好
[00:08 - 00:11] 最近北京非常热闹
[00:11 - 00:15] 有超过 21 位外国国家领导人到访北京
[00:15 - 00:19] 很多国家今年首个出访目的地
[00:19 - 00:20] 就是北京
[00:20 - 00:23] 美国中断高层往来九年之后
[00:23 - 00:26] 再次踏上中国的土地
[00:26 - 00:29] 法国、英国以及其他国家
[00:29 - 00:31] 联合国安理会五个常任理事国
[00:31 - 00:33] 当中的四个国家
[00:33 - 00:37] 他们的领导人都在极短的时间之内
[00:37 - 00:38] 到访北京
[00:38 - 00:40] 当然,第五个常任理事国
[00:40 - 00:42] 就是我们中国自己
[00:43 - 00:46] 我们看到全世界正在重新认识中国
[00:46 - 00:49] 并以此调整自身定位
[00:49 - 00:51] 调整对华相处的方向
[00:51 - 00:53] 在这些国际变局当中
[00:53 - 00:56] 最引发台湾民众关注的
[00:56 - 00:58] 就是美国态度的转变
[00:58 - 00:59] 各国访华之后
[01:00 - 01:01] 特朗普在空军一号专机上
[01:01 - 01:03] 连续表态四个 “不”
[01:03 - 01:05] 不支持台湾走向 “独立”
[01:05 - 01:08] 不愿跨越 9500 英里为台海战事出兵
[01:08 - 01:12] 不会让岛内势力误以为有美国撑腰而激化对立
[01:12 - 01:15] 不会轻易承诺对台军援
[01:15 - 01:19] 9500 英里是华盛顿到台北的直线距离
[01:19 - 01:22] 这不是刻意创造的说辞
[01:22 - 01:24] 而是客观的地理事实
[01:24 - 01:26] 不会靠政治口号发生改变
[01:26 - 01:31] 美国不会为了 9500 英里之外的冲突承担战争代价
[01:31 - 01:32] 紧随其后
[01:32 - 01:36] 一笔 141 亿美元的对台军售计划被暂停
[01:36 - 01:38] 在今年香格里拉对话会上
[01:38 - 01:42] 美国国防部长整场发言都没有提及台湾议题
[01:42 - 01:44] 这绝非政策态度的微调
[01:44 - 01:46] 而是对华战略巨大转向
[01:46 - 01:49] 越来越多台湾民众看清现实
[01:49 - 01:53] 自身的前途命运不能交由外部势力安排
[01:53 - 01:54] 我为什么会这么说?
[01:54 - 01:57] 因为民调数据已经发生明显变化
[01:57 - 02:00] 近期《联合报》民调显示
[02:00 - 02:02] 支持 “台独” 的比例
[02:02 - 02:04] 创下近年新低
[02:04 - 02:07] 民主文教基金会的民调同样佐证
[02:07 - 02:09] 超过六成岛内民众认为
[02:09 - 02:13] 台湾应当主动与大陆展开谈判协商
[02:13 - 02:14] 台湾民众不是不想沟通
[02:14 - 02:17] 是过去被刻意蒙蔽、不敢想
[02:17 - 02:19] 如今大家愿意主动思考两岸出路
[02:19 - 02:22] 这份转变,源于看清了真相
[02:22 - 02:23] 看清外部势力如何对待台湾
[02:23 - 02:27] 也看清谁才是真正站在台湾民众身边的一方
[02:27 - 02:30] 长期以来,有人不断鼓吹
[02:30 - 02:31] 所谓台湾主流民意
[02:31 - 02:33] 是 “天然独”
[02:33 - 02:35] 我想反问一个问题:
[02:35 - 02:37] 如果 “台独” 真是民众天生的想法
[02:37 - 02:40] 为何要靠教科书洗脑灌输?
[02:40 - 02:42] 如果 “台独” 是天然民意
[02:42 - 02:45] 为何要靠舆论媒体持续宣传洗脑?
[02:45 - 02:49] 为何还要人为阻断两岸正常交流往来?
[02:49 - 02:50] 发自内心的天然认同
[02:50 - 02:51] 不需要刻意管控、灌输
[02:51 - 02:53] 不需要舆论打压、封锁
[02:53 - 02:54] 不需要人为设限、阻隔
[02:55 - 02:57] 前不久发生一件事
[02:57 - 03:00] 把这套逻辑的荒谬展现得淋漓尽致
[03:00 - 03:01] 五月底
[03:01 - 03:04] 日本与菲律宾宣布启动
[03:04 - 03:06] 专属经济区划界谈判
[03:06 - 03:08] 划界争议海域的位置
[03:08 - 03:10] 就在台湾东部海域
[03:10 - 03:12] 这片是台湾渔民世代
[03:12 - 03:14] 赖以生存的传统作业渔场
[03:14 - 03:16] 两个和台湾没有主权关联的国家
[03:16 - 03:19] 私下划分这片属于两岸渔民的海域
[03:19 - 03:21] 这件事本身就十分荒唐
[03:21 - 03:22] 更荒唐的是
[03:22 - 03:24] 台湾地区当局的第一反应
[03:24 - 03:25] 在事件刚爆发时
[03:25 - 03:28] 居然表态认同日菲划界方案
[03:28 - 03:30] 当他国要用一纸协议瓜分
[03:30 - 03:31] 两岸渔民世代用生命
[03:31 - 03:33] 守护的渔区海域时
[03:33 - 03:36] 台当局居然表示认可
[03:36 - 03:39] 消息曝光后引发岛内舆论哗然
[03:39 - 03:41] 网络上不同立场的台湾网友
[03:41 - 03:42] 全部强烈表达愤怒不满
[03:42 - 03:45] 在全民强烈抗议下,台当局才被迫改口
[03:45 - 03:48] 可日方随后直接表态
[03:48 - 03:50] 任何第三方无权介入谈判
[03:50 - 03:53] 直接将台湾排除出海域协商谈判桌
[03:53 - 03:56] 你主动帮他国说话站队
[03:56 - 03:58] 对方转头就告诉你
[03:58 - 04:00] 你根本没有参与资格
[04:00 - 04:02] 反观中国大陆
[04:02 - 04:03] 在短短几天之内
[04:03 - 04:05] 同步完成法理声明与海上行动双重反制
[04:05 - 04:08] 派出多支海上执法编队
[04:08 - 04:10] 前往台湾东部东海
[04:10 - 04:12] 相关海域开展常态化海上执法巡查
[04:12 - 04:14] 在我发起一场
[04:14 - 04:16] 超万人参与的网络民调当中
[04:16 - 04:19] 百分之八十五的台湾网友
[04:19 - 04:21] 明确表态支持大陆维护海域权益的行动
[04:21 - 04:24] 同一片海洋、同一片渔场
[04:24 - 04:25] 台当局认同日菲损害渔民权益的行动
[04:25 - 04:28] 反倒谴责大陆正常海上巡查
[04:28 - 04:30] 但台湾老百姓的眼睛是雪亮的
[04:30 - 04:34] 当自身切身利益受到损害时
[04:34 - 04:36] 民心不会跟着政治口号摇摆
[04:36 - 04:38] 民心会追随什么?
[04:38 - 04:40] 民心只会追随安稳的日子
[04:40 - 04:42] 台湾民众早已厌倦政治挂帅的对立生活
[04:42 - 04:45] 大家只想安安稳稳过好日子
[04:45 - 04:48] 我们不希望每天打开新闻
[04:48 - 04:51] 满眼都是两岸对抗、区域危机
[04:51 - 04:53] 都是各方放出来的强硬表态
[04:53 - 04:56] 农民想要稳定农产品销路
[04:56 - 04:58] 渔民想要安稳出海捕鱼、守住海权
[04:58 - 05:00] 青年想要广阔的发展机遇
[05:00 - 05:02] 为人父母者期盼的是
[05:02 - 05:04] 我们的孩子都能在安稳
[05:04 - 05:07] 和平的环境里长大成人
[05:07 - 05:09] 这些,才是当下每一位台湾民众心中
[05:09 - 05:13] 真正最在乎的切身诉求
[05:13 - 05:15] 而两岸的融合交流
[05:15 - 05:17] 从来都不是从政治议题起步
[05:17 - 05:20] 而是源于普通人的日常生活
[05:20 - 05:22] 现在台湾有五百六十五万抖音用户
[05:22 - 05:26] 将近四分之一的台湾总人口
[05:26 - 05:29] 小红书在台湾拥有三百万使用者
[05:29 - 05:32] 平均每八个台湾人就有一人在用
[05:32 - 05:35] 两岸物流互通使用率六年从百分之十八点七
[05:35 - 05:39] 上涨至四十七点五
[05:39 - 05:41] 台湾地区当局刻意封禁小红书平台
[05:41 - 05:44] 结果反而催生上百万人次FQ访问
[05:44 - 05:45] 越是封锁,民间交流越火热
[05:45 - 05:48] 在这些网络平台之上
[05:48 - 05:50] 如果不查看 IP 属地
[05:50 - 05:53] 你已经很难分辨
[05:53 - 05:55] 屏幕对面是大陆网友
[05:55 - 05:57] 还是台湾网友
[05:57 - 05:58] 因为我们共用一套网络流行语言
[05:58 - 06:01] 追同款影视剧、玩同款游戏
[06:01 - 06:03] 聊同款热门话题
[06:03 - 06:04] 说到影视剧热播
[06:04 - 06:06] 近期大陆男演员成毅在台湾爆红
[06:06 - 06:09] 成毅、罗云熙成为很多台湾女性心中的理想型
[06:09 - 06:13] 有台湾年轻人来到大陆后,在网络上感慨
[06:13 - 06:17] “两岸的大人为什么要把两岸关系搞得这么复杂?”
[06:17 - 06:21] “只要让成毅、罗云熙多去台湾交流就好了。”
[06:21 - 06:24] 话音落下,全场哄堂大笑
[06:24 - 06:25] 但笑过之后我们仔细思考
[06:25 - 06:28] 这句话背后蕴含的底层逻辑
[06:28 - 06:30] 其实比许多专业政治分析
[06:30 - 06:32] 都更加深刻直白
[06:32 - 06:33] 民心的自然流向
[06:33 - 06:35] 从来不是任何行政政策能够强行扭转
[06:35 - 06:38] 再看两岸往返航班数据:
[06:38 - 06:40] 去年台湾同胞赴大陆人次
[06:40 - 06:41] 接近五百万
[06:41 - 06:43] 两岸航线平均上座率超过百分之八十
[06:43 - 06:47] 这还是在两岸航班、航点尚未完全恢复的前提下
[06:47 - 06:48] 几乎每一班从台湾飞往大陆的客机
[06:48 - 06:52] 都是满座状态
[06:52 - 06:56] 今年首次赴大陆的台湾青年、普通民众
[06:56 - 06:57] 出行人数增长三成以上
[06:57 - 06:59] 越来越多从未踏足大陆的台湾民众
[06:59 - 07:02] 勇敢迈出交流的第一步
[07:02 - 07:04] 透过民间交流不断深化、生根
[07:04 - 07:07] 海峡论坛已经连续举办十八届
[07:07 - 07:10] 民进党上台执政之后
[07:10 - 07:13] 针对海峡论坛设置的条条框框、限制越来越多
[07:13 - 07:15] 但无论如何设限阻隔
[07:15 - 07:17] 依旧有大量台湾民众主动前来参与
[07:17 - 07:19] 农民来寻找农产品外销销路
[07:19 - 07:20] 渔民前来洽谈渔业合作
[07:20 - 07:22] 青年前来寻找就业、创业机遇
[07:22 - 07:24] 大家奔赴这里,不为空洞政治口号
[07:24 - 07:25] 只为实实在在的民生与未来
[07:25 - 07:27] 就拿今年来说,台当局
[07:27 - 07:29] 明令禁止各县市政府公务人员参与论坛
[07:29 - 07:31] 台东县长为当地农民
[07:31 - 07:34] 争取外销渠道的参会申请都遭到驳回
[07:34 - 07:35] 一份超过三万三千人
[07:35 - 07:37] 参与的岛内网络民调显示
[07:37 - 07:39] 超八成二民众
[07:39 - 07:41] 反对当局限制海峡论坛交流的政策
[07:41 - 07:44] 越是设限打压,民众交流的意愿越强烈
[07:44 - 07:46] 两岸民众想要走近彼此的心愿
[07:46 - 07:48] 不需要任何行政机关批准许可
[07:48 - 07:50] 这不是刻意编造的故事
[07:50 - 07:53] 这是根植人心的本能期盼
[07:53 - 07:54] 政治可以人为设置隔阂阻碍
[07:54 - 07:56] 但普通人安稳过日子的生活诉求不会等人
[07:56 - 07:58] 我认为我们这一代人都十分幸运
[07:58 - 08:01] 当下这个时代
[08:01 - 08:03] 赋予了每一个普通人独立思考、自主选择的权利
[08:03 - 08:05] 我们不再需要
[08:05 - 08:07] 被单一话术灌输思想
[08:07 - 08:09] 被舆论裹挟立场
[08:09 - 08:10] 两岸交往的核心是人
[08:10 - 08:12] 民间融合才是大势所趋
[08:12 - 08:13] 即便靠教科书扭曲认知、靠舆论媒体刻意操控、靠行政手段阻断往来,人为制造对立隔绝,
[08:13 - 08:18] 依旧挡不住两岸民众透过网络相互沟通期盼,
[08:18 - 08:22] 挡不住两岸经贸、科技产业携手合作的脚步,
[08:22 - 08:23] 更挡不住全体中华儿女
[08:23 - 08:26] 对两岸和平发展、繁荣安定的共同向往。
[08:26 - 08:27] 追求安稳好日子,
[08:27 - 08:30] 本就是两岸民众与生俱来的天然心愿,
[08:30 - 08:31] 两岸所有人都一样:
[08:31 - 08:34] 期盼和平、期盼发展、期盼繁荣安定。
[08:34 - 08:35] 这份发自内心的共同期盼,
[08:35 - 08:36] 从来没有任何人能够阻隔、阻挡。
[08:36 - 08:38] 谢谢大家。
[08:53 - 08:55] 感谢苏恒女士的发言
[08:57 - 08:59] 谢谢苏恒女士   

以原视频或原稿为准。只是用技术处理的测试的。

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:pip install moviepy SpeechRecognition  pip install openai-whisper
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/14 17:40 
# User      :  geovindu
# Product   : PyCharm
# Project   : Pysimple
# File      : MP4totextdest.py

import warnings
warnings.filterwarnings("ignore")
warnings.filterwarnings("ignore", category=RuntimeWarning)


from moviepy import VideoFileClip
import speech_recognition as sr
import os
import whisper
import numpy as np
import wave
import audioop
import whisper.audio


VIDEO_FILE = "20260614_102306.mp4"
TEMP_WAV = "temp_audio.wav"
OUTPUT_TXT = "完整演讲文稿_带时间戳medium.txt"

# 1. 提取视频音频
print("正在提取音频...")
video = VideoFileClip(VIDEO_FILE)
# 导出16位单声道标准wav,适配识别
video.audio.write_audiofile(TEMP_WAV, codec="pcm_s16le", fps=16000)
video.close()


# 2. 原生Python读取wav,彻底绕过ffmpeg
def load_audio_without_ffmpeg(path):
    with wave.open(path, 'rb') as wav_file:
        n_channels = wav_file.getnchannels()
        width = wav_file.getsampwidth()
        frames = wav_file.readframes(wav_file.getnframes())

    # 双声道转单声道
    if n_channels == 2:
        frames = audioop.tomono(frames, width, 0.5, 0.5)
    # 转浮点音频数组
    audio_np = np.frombuffer(frames, dtype=np.int16).flatten().astype(np.float32) / 32768.0
    return audio_np


# 覆盖whisper自带读取函数,不再调用ffmpeg
import whisper.audio

whisper.audio.load_audio = load_audio_without_ffmpeg

# 3. 加载最轻量模型 tiny(速度最快,中文演讲够用)
print("加载离线语音模型 medium ...")
model = whisper.load_model("medium")

# 4. 开始识别,开启分段时间戳
print("开始逐段识别演讲内容,请等待...")
result = model.transcribe(
    audio=TEMP_WAV,
    language="zh",
    verbose=False,
    word_timestamps=True
)

# 5. 格式化带时间戳文稿,实时打印每一段
full_content = "=== EV录屏 2026年6月13日 第十八届海峡论坛苏恒演讲 完整转写稿 ===\n\n"
print("\n====================识别结果====================")
for seg in result["segments"]:
    start_min = int(seg["start"] // 60)
    start_sec = int(seg["start"] % 60)
    end_min = int(seg["end"] // 60)
    end_sec = int(seg["end"] % 60)
    seg_text = seg["text"].strip()

    line = f"[{start_min:02d}:{start_sec:02d} - {end_min:02d}:{end_sec:02d}] {seg_text}"
    print(line)  # 实时控制台打印每一段文字
    full_content += line + "\n"

# 6. 保存本地文本
with open(OUTPUT_TXT, "w", encoding="utf-8") as f:
    f.write(full_content)

# 清理临时音频文件
os.remove(TEMP_WAV)
print(f"\n================================================")
print(f"✅ 全部识别完成!文稿已保存至:{OUTPUT_TXT}")

输出:

afc15912-89ca-4743-bdea-0920d28c9778

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)