视频提取音频

把视频里的音轨分离出来导出 WAV,拖一下波形就能只留需要的一段。解码和导出都在浏览器本机完成。

视频和音频都只在这台浏览器里解码,不会上传。能读什么格式取决于浏览器自带的解码器,mp4、mov、m4a、mp3、wav、ogg 一般都能读,冷门编码除外。

选择一个视频或音频文件开始

为什么导出的只能是 WAV

浏览器里的 Web Audio API 自带解码器,mp4、mov 里的 AAC 音轨,以及 m4a、mp3、wav、ogg 都能读进来;但它没有编码器,没有任何标准接口能把音频重新压成 mp3 或 m4a。MediaRecorder 虽然能录音,输出的却是 webm、ogg 这类容器,码率也不可控。所以这一页老实写 16 位 PCM WAV:无损、任何软件都能打开,代价就是体积大。想压小可以导出后用 ffmpeg 过一道,192kbps 的 mp3 对大多数人声和音乐都够用。

体积差多少可以直接算出来。WAV 每个采样点都原样写下,1 分钟 44.1kHz 立体声是 60 乘 44100 乘 2 声道乘 2 字节,约 10.6MB;同样的音频用视频里常见的 128kbps AAC 压缩只要 1MB 出头。换句话说,从一段 100MB 的视频里把音轨抽出来,可能得到 60MB 的 WAV——这不是工具没压缩,而是无损和有损的分界。

采样率选「跟随源」时不做任何重采样,导出的是和原音轨完全一致的一份副本,这也是默认值。要减体积再考虑降采样:语音内容降到 16000 Hz 甚至 8000 Hz 依然听得清楚,依据是采样定理——8000 Hz 采样能表示的频率上限是 4000 Hz,恰好覆盖人声的主要能量范围;但音乐降到这个程度,镲片、齿音这些高频就没了,听起来发闷。重采样用的是线性插值,够用但不是发烧级的做法。

声道选择比采样率更影响体积。单声道把左右两路平均成一路,文件直接减半,会议录音、网课、语音笔记选它没有任何损失;音乐和影视片段才需要立体声,因为左右声道的差异就是声场。源音轨本来就是单声道时,选立体声只会把同一路复制两份,体积翻倍而听感不变,页面会针对这种情况给出提醒。

解不开的音轨通常是三种原因:视频压根没有音轨、音轨编码浏览器不支持(AC-3、DTS、部分 opus/webm 组合),或者文件带 DRM 保护。前两种都能用 ffmpeg 解决,转成标准 WAV 再拿进来。这一页只负责分离音轨,不做识别;要生成字幕得先拿到音频再走语音转写,然后用字幕格式转换整理时间轴。只想剪一段音频、不需要从视频里分离,用音频剪切;要的是画面而不是声音,用视频截图取帧或者视频转 GIF。

常见问题

为什么提取出来的是 WAV,不能直接存成 MP3?

因为浏览器只有解码器,没有编码器。Web Audio 能读 mp3、m4a 这些格式,却没有任何标准接口能把音频重新压成 mp3;MediaRecorder 输出的又是 webm、ogg 这类容器。所以这里写最稳的 16 位 PCM WAV:无损、任何软件都能打开,代价是体积大。要 mp3 就导出后再压一道:ffmpeg -i 提取.wav -b:a 192k 输出.mp3。

导出的 WAV 怎么比原来整个视频还大?

因为 WAV 存的是最原始的采样点,一个不丢。1 分钟 44.1kHz 立体声是 60 乘 44100 乘 2 声道乘 2 字节,约 10.6MB;同样的音频用视频里常见的 128kbps AAC 压缩,只要 1MB 出头。差出十倍属于正常,把采样率降到 16000 Hz 或改成单声道能让它缩到四分之一以内。

能只提取视频里的一小段吗?

能。在波形上拖一下就框出一段,也可以用两个滑块精确调整起止秒数,导出时只写这一段,不会把整段音轨写进文件。选区长度没有实际下限,但不到 0.05 秒的片段没有意义,工具会自动把它撑到 0.05 秒。

为什么有些视频提示解不出音频?

三种常见情况:视频本身就没有音轨(屏幕录制、静音素材很常见);音轨编码浏览器不支持,例如 AC-3、DTS 或部分 opus/webm 组合;文件带 DRM 保护。前两种先用 ffmpeg 转一道再试:ffmpeg -i 输入.mp4 -vn -acodec pcm_s16le 输出.wav,转出来的 WAV 任何浏览器都能读。

采样率该选多少?

不确定就跟着源走,导出的是一份和原音轨一致的副本。要减体积可以降到 16000 Hz 或 8000 Hz:语音在 8kHz 下依然听得清楚,体积只有 44.1kHz 的六分之一左右。但音乐降太多会明显发闷,因为 8000 Hz 采样按采样定理只能表示到 4000 Hz 以下的频率,镲片和齿音全没了。

单声道还是立体声?

人声、会议录音、语音笔记选单声道,左右两路合并成一路,体积直接减半,听感几乎没有区别。音乐和影视片段保留立体声,两只耳朵听到的差异就是声场。源文件本来就是单声道时选立体声只会把同一路复制两份,文件大一倍而听感不变。

提取出来的音频能直接转成字幕吗?

这一页只做音轨分离,不做语音识别,所以不会自动出字幕。要字幕得再走一步:把导出的 WAV 丢给能离线跑的语音转写工具(whisper.cpp、剪映的识别功能等),拿到 SRT 之后再用字幕格式转换调整样式和时间轴。

相关:音频剪切字幕格式转换

视频有几个小时长,能处理吗?

能不能撑住取决于内存,而不是时长上限。decodeAudioData 必须把整段音频一次性解成 32 位浮点放进内存,一小时立体声 44.1kHz 大约 1.2GB,很多标签页在这一步就崩了。处理长视频建议先用 ffmpeg 截出需要的几分钟,再拿进来提取。