视频提取音频
从视频提取音轨为 MP3/WAV/AAC/OGG · 浏览器版可用 MediaRecorder
视频→音频
从视频提取音轨为 MP3/WAV/AAC/OGG · 浏览器版可用 MediaRecorder
视频处理涉及复杂的解码 / 编码 / 滤镜操作,桌面 FFmpeg(开源 / 免费)是业界事实标准。安装 5 分钟,运行如下命令一次解决:
用 Homebrew,5 秒安装
Debian/Ubuntu/Fedora
无需本地安装
按上方系统对应的命令安装。验证:ffmpeg -version 应输出版本号。
将 input.mp4 改为你的实际视频文件路径。
用终端 (Terminal / cmd / PowerShell) 切到视频所在目录,粘贴命令并回车。
短视频几秒,长视频几分钟。输出文件出现在同目录。
-vn:不处理视频;-c:a copy:直接复制音轨(无损 + 极快)。
了解工具定位 · 使用场景 · 对比优势
将视频文件中的音频轨道提取为 MP3、AAC、WAV 等格式,保留原始音质。适用于剪辑师提取背景音乐、播客制作者复用视频录音、学生转录网课音频。工具基于 FFmpeg 处理,纯浏览器端完成,视频文件不上传服务器。
考研学生录播课刷了 3 遍,眼睛疲劳、倍速看容易跳重点。把课程视频拖入工具,直接抽取出纯音频,通勤、跑步、睡前闭眼听,不费眼还能反复磨耳朵,重点段落用手机录音机标记时间戳即可。
短视频创作者拍了 10 条口播素材,但画面杂音大、需要重新配音。用本工具提取原始音频,导入 Audacity 做降噪、调 EQ,再重新对轨视频,省去现场重录的时间,保留原始语气和节奏。
行政人员每月整理 20+ 场线上会议视频,领导要听某位发言人的完整发言。用本工具批量提取每场视频的音频流,按日期命名导出 MP3,后续交给语音转文字工具,比直接翻视频快 5 倍。
音乐爱好者想翻唱某首歌但找不到纯伴奏版。把官方 MV 拖入工具,提取出完整音频,再用 Audacity 做中置声道提取(人声居中、伴奏分散),虽不能完全去人声,但能获得可用的伴奏底子。
用户想用电影台词片段做手机铃声,但手机自带的视频转音频功能限制时长或格式。把视频上传本工具,截取 30 秒内片段导出为 MP3,再通过数据线拷入手机「铃声」文件夹,全程无广告无付费。
| 维度 | 本工具 | 竞品 A (Online Audio Converter) | 传统方法 (FFmpeg 命令行) |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,文件不上传服务器 | 文件上传至服务器处理 | 文件完全在本地处理,无网络传输 |
| 处理速度 | 1-3 秒(取决于文件大小) | 5-30 秒(含上传+排队+下载) | 即时(取决于命令行执行效率) |
| 离线可用 | 支持(WASM 技术,页面加载后断网可用) | 不支持(必须联网) | 支持(需预先安装 FFmpeg) |
| 操作门槛 | 零门槛,打开网页即用 | 零门槛,上传后点按钮 | 高,需掌握命令行语法和参数 |
| 文件大小限制 | 受浏览器内存限制(通常 2GB 以内) | 有明确上传限制(通常 200MB-1GB) | 无限制(取决于硬盘空间) |
| 输出格式选择 | 固定输出 MP3(320kbps) | 支持 MP3, WAV, FLAC, OGG 等 10+ 种格式 | 支持所有 FFmpeg 支持的音频格式 |
| 批量处理 | 不支持(单次一个文件) | 支持(可同时上传多个文件) | 支持(通过脚本批量处理) |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| https://example.com/video.mp4 | audio.mp3 (192kbps, 44100Hz, stereo) | 典型场景:从 MP4 视频中提取音频为 MP3 格式 |
| C:\Users\test\video.mov | audio.wav (PCM 16-bit, 44100Hz, stereo) | 典型场景:从 MOV 视频中提取无损 WAV 音频 |
| https://example.com/video.avi | audio.aac (128kbps, 44100Hz, stereo) | 典型场景:从 AVI 视频中提取 AAC 音频,兼顾文件大小与音质 |
| https://example.com/video_without_audio.mp4 | 错误:视频流中未检测到音频轨道 | 边界 case:视频文件本身不含音频轨道 |
| https://example.com/video_5.1ch.mkv | audio.ac3 (640kbps, 48000Hz, 5.1 channels) | 边界 case:多声道(5.1)环绕声视频,保留原始声道布局 |
| https://example.com/video_1hour.mp4 | audio.mp3 (192kbps, 44100Hz, stereo, 1h02m30s) | 边界 case:长视频(1小时以上),输出时长与输入一致 |
| https://example.com/video.mp4?token=abc123 | audio.mp3 (192kbps, 44100Hz, stereo) | 易错 case:视频 URL 带查询参数,工具应正确解析文件 |
| https://example.com/video.mp4 (中文文件名).mp4 | audio.mp3 (192kbps, 44100Hz, stereo) | 易错 case:中文或特殊字符文件名,需 URL 编码后传入 |
上传一个 .mp3 文件或 .zip 压缩包上传 .mp4, .mov, .avi, .mkv, .flv 等视频格式文件工具只接受视频文件作为输入,音频文件或压缩包无法被 FFmpeg 解析,会直接报错或返回空结果。
选择 .aac 作为输出格式,但工具只提供 .mp3 / .wav / .ogg从工具提供的下拉列表中选择 .mp3, .wav 或 .oggFFmpeg 后端只配置了这三种常见音频编码器,其他格式(如 .aac, .flac)未启用,选择后会返回格式不支持错误。
上传一个 3 小时 1080p 视频,期望几秒内完成上传 30 分钟以内的短视频,或分段上传浏览器端 WASM 和服务器端 Go 处理均有内存与时间限制,超长视频会导致浏览器崩溃或服务器超时(默认 60s)。
把视频文件拖到页面空白处或标题上拖拽到标注了「拖拽文件到此处」的虚线框内,或点击按钮选择文件浏览器默认拖拽行为是打开文件或下载,只有绑定 drop 事件的元素才能正确触发上传逻辑。
一次选择 5 个视频文件,期望全部转换每次只选择一个视频文件,转换完成后再处理下一个工具设计为单文件处理,多文件选择只会取第一个文件处理,其余被忽略。批量处理需要额外队列逻辑。
点击「开始提取」后立刻关闭页面,回来发现没下载等待进度条走完或出现「下载」按钮后再离开页面WASM 处理在浏览器内存中进行,关闭标签页会终止 Worker 进程,结果不会保存到服务器。
输入视频名为「测试: 视频 #1.mp4」,期望输出文件名正常使用字母、数字、下划线、连字符命名,如「test_video_1.mp4」FFmpeg 在部分浏览器环境下对文件名中的冒号、井号、中文等字符处理异常,可能导致下载失败或文件名乱码。
从 YouTube 下载的演唱会视频提取音频后上传到音乐平台仅用于个人学习、剪辑测试或已获得版权方授权的内容工具不验证输入视频版权。用户需自行确认视频来源合法,提取后音频的版权归属与原视频一致。
公式推导 · 流程图解 · 依据出处
无精确数学公式,核心逻辑为:从视频容器中提取音频流,按指定编码格式(如 MP3 / AAC / WAV)和参数(采样率、比特率)重新封装输出。
采样率 — 每秒音频采样次数,单位 Hz比特率 — 音频数据压缩率,单位 kbps声道数 — 音频通道数量(单声道/立体声)输入一个 1920×1080、时长 3 分 20 秒的 MP4 视频文件。提取音频时选择 MP3 编码,采样率 44100 Hz,比特率 192 kbps,立体声。输出为 3 分 20 秒的 MP3 文件,文件大小约 4.6 MB(计算:192 kbps × 200 秒 ÷ 8 = 4800 KB ≈ 4.69 MB)。
适用于主流视频格式(MP4 / AVI / MOV / MKV / FLV)的音频提取。不适用于加密视频流(如 DRM 保护内容)或纯视频无音轨文件。基于 FFmpeg 开源库实现,支持常见音频编码格式(MP3 / AAC / WAV / FLAC / OGG)。
3 种主流语言 · 复制即用
import subprocess
import os
# 提取音频:从 MP4 视频中提取 AAC 音频
input_video = "input.mp4"
output_audio = "output.aac"
if not os.path.exists(input_video):
print(f"错误:文件 {input_video} 不存在")
exit(1)
# 使用 FFmpeg 提取音频流,不重新编码(-c copy)
cmd = [
"ffmpeg", "-i", input_video,
"-vn", # 丢弃视频流
"-c:a", "copy", # 直接复制音频流,不重新编码
output_audio
]
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode != 0:
print(f"FFmpeg 错误:{result.stderr}")
else:
print(f"音频已提取至 {output_audio}")package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
input := "input.mp4"
output := "output.mp3"
// 检查输入文件是否存在
if _, err := os.Stat(input); os.IsNotExist(err) {
fmt.Printf("错误:文件 %s 不存在\n", input)
return
}
// FFmpeg 命令:将视频音频转为 MP3
cmd := exec.Command("ffmpeg",
"-i", input,
"-vn", // 丢弃视频
"-acodec", "libmp3lame", // MP3 编码器
"-ab", "192k", // 比特率 192kbps
output,
)
if err := cmd.Run(); err != nil {
fmt.Printf("FFmpeg 执行失败:%v\n", err)
return
}
fmt.Printf("音频已提取至 %s\n", output)
}const { exec } = require('child_process');
const path = require('path');
const inputVideo = 'input.mp4';
const outputAudio = 'output.wav';
// 使用 FFmpeg 提取 WAV 格式音频(无损)
exec(
`ffmpeg -i "${inputVideo}" -vn -acodec pcm_s16le -ar 44100 -ac 2 "${outputAudio}"`,
(error, stdout, stderr) => {
if (error) {
console.error(`提取失败:${stderr}`);
return;
}
console.log(`音频已保存至 ${outputAudio}`);
}
);8 个高频疑问