视频格式转换

MP4/AVI/MOV/MKV/WebM/FLV/3GP 互转

414 次访问
🔁
VIDEO FORMAT CONVERTER · FFMPEG

视频格式转换

MP4 / WebM / MOV / AVI / MKV 等格式互转 · 桌面 FFmpeg 操作指引

FFmpeg 命令行(推荐)

视频处理涉及复杂的解码 / 编码 / 滤镜操作,桌面 FFmpeg(开源 / 免费)是业界事实标准。安装 5 分钟,运行如下命令一次解决:

# 任意格式转 MP4 (H.264) ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4 # 转 WebM (VP9) ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm # 转 MOV (H.265 高效) ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac output.mov

桌面 FFmpeg 安装

macOS

brew install ffmpeg

用 Homebrew,5 秒安装

Linux

sudo apt install ffmpeg # 或 sudo dnf install ffmpeg

Debian/Ubuntu/Fedora

Windows

下载 Gyan FFmpeg builds

解压后将 bin 目录加入 PATH

Docker

docker run --rm -v $PWD:/work \ jrottenberg/ffmpeg -i input.mp4 ...

无需本地安装

操作步骤

步骤 1:安装 FFmpeg

按上方系统对应的命令安装。验证:ffmpeg -version 应输出版本号。

步骤 2:复制本页面提供的命令

input.mp4 改为你的实际视频文件路径。

步骤 3:在视频所在目录运行

用终端 (Terminal / cmd / PowerShell) 切到视频所在目录,粘贴命令并回车。

步骤 4:等待处理完成

短视频几秒,长视频几分钟。输出文件出现在同目录。

提示

参数说明-crf 23 质量等级(0=无损,51=最差,18-28 推荐);-c:v 视频编码器;-c:a 音频编码器。

在线替代:本站 视频压缩工具 支持浏览器内 MP4/WebM 简单转换(重新编码)。

关于本工具

了解工具定位 · 使用场景 · 对比优势

将视频文件在 MP4、AVI、MOV、MKV、WebM、FLV、3GP 格式之间快速互转。剪辑师处理多平台素材、运营人员统一视频格式、普通用户压缩或转换老式录像,无需安装软件。视频在浏览器本地处理,不经过任何服务器,文件不上传。

使用场景

🎬

视频平台上传

短视频创作者需要将剪辑完成的 4K 素材上传到抖音/B站/YouTube,各平台对格式和编码要求不同(抖音推荐 MP4/H.264,B站支持 MOV/ProRes 但限制大小)。本工具一键将原始 MOV 或 AVI 转为平台指定的 MP4 参数,避免因格式不符被二次压缩导致画质损失,同时保持原始帧率和分辨率。

💻

老设备播放兼容

家庭用户下载了 MKV 格式的高清电影,但电视或旧款机顶盒只支持 MP4 或 AVI。本工具将 MKV 转为 MP4(H.264 编码),同时保留多音轨和字幕轨道,确保在客厅电视、卧室投影仪甚至车载播放器上都能直接播放,无需折腾第三方播放器。

📱

手机存储清理

手机相册堆积了大量微信接收的 MOV 和 FLV 视频,单个文件动辄几百 MB,占满 128GB 空间。本工具批量将 MOV/FLV 转为 WebM(VP9 编码)或压缩版 MP4,体积缩小 50%-70%,画质肉眼几乎无差别,释放存储空间的同时保留视频内容。

🎮

游戏录屏分享

游戏主播用 OBS 录制了 4K/60fps 的 FLV 直播回放,但剪辑软件(如 Premiere Pro)对 FLV 支持不佳,需要先转码。本工具将 FLV 转为 MOV(ProRes 编码)或 MP4(DNxHD),保留原始帧率和色彩深度,避免剪辑时卡顿或掉帧,提升后期效率。

🏢

企业培训素材统一

企业内部培训部门收集了不同来源的教学视频:供应商提供的 AVI 演示、录屏软件的 WebM 操作指南、手机拍摄的 MOV 素材。本工具将所有格式统一转为 MP4(H.264 + AAC),确保在内部 LMS 系统、钉钉/企业微信上都能流畅播放,避免因格式不兼容导致员工观看失败。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A(HandBrake)传统方法(本地软件)
数据隐私纯浏览器处理,文件不上传服务器需下载安装,处理在本地需下载安装,处理在本地
处理速度1 秒内启动,小文件即时完成启动慢,需加载编码器,数秒至分钟启动慢,需加载编码器,数秒至分钟
离线可用需联网加载 WASM 引擎,完成后可离线完全离线运行完全离线运行
大小限制受浏览器内存限制,建议 500MB 以内无限制(取决于硬盘)无限制(取决于硬盘)
收费免费,无隐藏费用免费开源多数免费,部分高级功能付费
注册无需注册,打开即用无需注册无需注册
平台全平台(任何现代浏览器)Windows / macOS / LinuxWindows / macOS / Linux

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 点击「选择文件」或拖拽视频到上传区,支持 MP4/AVI/MOV/MKV/WebM/FLV/3GP 格式
  2. 在「输出格式」下拉菜单中,选择目标格式(如 MP4、AVI、MOV 等)
  3. 可选:调整视频参数(分辨率、比特率、帧率),非必填项保持默认即可
  4. 点击「开始转换」按钮,等待进度条完成(文件大小和时长影响耗时)
  5. 转换完成后,点击「下载」按钮保存到本地,或点击「重新开始」继续转换

输入输出示例7 个典型场景,覆盖常规、边界与易错

输入输出说明
input.mp4output.avi典型场景:MP4 转 AVI,兼容老设备
input.mkvoutput.mp4常见用法:MKV 转 MP4,适配播放器
input.flvoutput.webm典型场景:FLV 转 WebM,用于网页嵌入
input.3gpoutput.mp4边界 case:3GP 转 MP4,提升画质与兼容性
input.movoutput.mkv边界 case:MOV 转 MKV,保留多音轨
input.avioutput.flv易错 case:AVI 转 FLV,注意码率设置
input.webmoutput.mov易错 case:WebM 转 MOV,需确认编码支持

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 源文件编码格式与容器不匹配

错误
把一个 H.265 编码的 .mp4 文件直接拖入工具,选择“转成 .avi”
修复
先确认源文件编码格式(可用 mediainfo 查看),再选择目标容器。如果目标容器不支持源编码(如 AVI 不支持 H.265),工具会报编码错误或输出黑屏视频。

容器(.mp4/.avi)和编码(H.264/H.265)是两回事。FFmpeg 默认会尝试重新编码,但某些旧容器(如 AVI)不支持新编码,需手动指定编码器(如 -c:v mpeg4)。

2. 输出文件名缺少扩展名

错误
输出文件名填写为“我的视频”,未加 .mp4 后缀
修复
输出文件名填写为“我的视频.mp4”

FFmpeg 通过扩展名推断输出格式。无扩展名时默认输出为 raw 流文件,播放器无法识别,工具也可能报错“无法确定输出格式”。

3. 输入文件路径含空格或特殊字符未转义

错误
输入路径为“C:/My Videos/2024 clip.avi”
修复
输入路径为“C:/My Videos/2024 clip.avi” 或 “C:\My Videos\2024 clip.avi” (工具内部已做路径处理,但用户自行使用命令行时需加引号)

FFmpeg 命令行中空格会被解析为参数分隔符;路径含空格必须用双引号包裹或使用 8.3 短路径。浏览器端工具通常已处理,但若用户自行调用 FFmpeg 则需注意。

4. 错误选择输出容器但未指定编码器

错误
输入 .mkv(H.264 编码),输出选 .gif,未指定编码器
修复
输出选 .gif 时,应同时指定编码器为 -c:v gif,或先转成高质量 MP4 再转 GIF

GIF 只支持 256 色索引色,直接转会丢失大量颜色信息。FFmpeg 默认用 libx264 编码器输出 .gif 会报错“Encoder not found”,需显式指定 -c:v gif 并接受低质量。

5. 忽略音频流导致无声输出

错误
输入 .mp4(含 AAC 音频),输出 .webm,未指定音频编码器
修复
输出 .webm 时,应指定音频编码器 -c:a libopus(推荐)或 -c:a libvorbis,或加 -c copy 保持原音频流

WebM 容器只支持 Vorbis 和 Opus 音频编码。若源音频是 AAC,FFmpeg 默认会尝试复制但失败,导致输出文件无音轨。需显式指定音频编码器或重新编码。

6. 视频尺寸或帧率设置超出源文件能力

错误
源文件是 640x480 @ 30fps,输出设置 1920x1080 @ 60fps
修复
输出尺寸和帧率应不超过源文件实际内容的分辨率和帧率(或使用缩放滤镜 -vf scale=1920:1080 但会模糊)

FFmpeg 不会自动插值补帧或超分辨率。强行放大只会得到模糊/马赛克画面,且帧率翻倍会生成重复帧,文件体积暴增但画质无提升。

7. 使用过高的 CRF 值导致画质极差

错误
H.264 编码时设置 -crf 51(最高压缩/最差画质)
修复
H.264 编码时 -crf 18-28 是合理范围(18 视觉无损,28 可接受压缩);H.265 对应 -crf 24-34

CRF 值范围 0-51(H.264),值越大画质越差。51 会产生严重块状噪声和色块,几乎不可用。用户常误以为“压缩率高=好”,实际是画质崩坏。

8. 输出文件覆盖了输入文件

错误
输入文件为“video.mp4”,输出文件名也设为“video.mp4”
修复
输出文件名使用不同名称,如“video_converted.mp4”

FFmpeg 默认会覆盖同名文件。若输入输出路径相同,工具会在读取完成前开始写入,导致源文件被截断损坏。浏览器端工具通常有保护机制,但本地 FFmpeg 需注意。

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

B = f(F, C, R, P)

变量说明

  • B — 输出视频比特率(kbps)
  • F — 输出视频帧率(fps)
  • C — 色彩深度与色度采样因子
  • R — 输出视频分辨率(像素总数)
  • P — 压缩编码预设(如 H.264/H.265)

示例

将 1080p 30fps 的 MP4 转为 720p 24fps 的 WebM。源文件 1920×1080@30fps,目标 1280×720@24fps,采用 VP9 编码(中等质量预设)。FFmpeg 命令行:-c:v libvpx-vp9 -b:v 1500k -crf 30。输出文件大小约为 1500kbps × 120 秒 / 8 ≈ 22.5 MB。

适用范围

适用于 FFmpeg 后端编码流程,比特率由编码器根据分辨率、帧率、预设自动计算。不适用于无损压缩或恒定质量(CRF)模式,此时比特率不固定。基于 FFmpeg 官方文档 libavcodec 编码器行为。

原理图

上传源文件FFmpeg 核心转码解码 → 滤镜 → 编码下载新格式支持的容器格式MP4 / AVI / MOV / MKVWebM / FLV / 3GP隐私保障文件仅存于浏览器不发送至服务器
用户输入 本地处理 输出结果 辅助信息

开发者集成

3 种主流语言 · 复制即用

import subprocess
import os

# 使用 FFmpeg 将 AVI 转换为 MP4
input_file = "input.avi"
output_file = "output.mp4"

# 确保输入文件存在
if not os.path.exists(input_file):
    print(f"错误:输入文件 {input_file} 不存在")
    exit(1)

# 执行转换命令
try:
    result = subprocess.run(
        ["ffmpeg", "-i", input_file, "-c:v", "libx264", "-c:a", "aac", output_file],
        capture_output=True,
        text=True,
        check=True
    )
    print(f"转换成功:{output_file}")
except subprocess.CalledProcessError as e:
    print(f"转换失败:{e.stderr}")

# 示例输出:
# 转换成功:output.mp4
package main

import (
	"fmt"
	"os"
	"os/exec"
)

func main() {
	inputFile := "input.mkv"
	outputFile := "output.mp4"

	// 检查输入文件是否存在
	if _, err := os.Stat(inputFile); os.IsNotExist(err) {
		fmt.Printf("错误:输入文件 %s 不存在\n", inputFile)
		return
	}

	// 构建 FFmpeg 命令:MKV 转 MP4,保留视频和音频流
	cmd := exec.Command("ffmpeg", "-i", inputFile, "-c", "copy", outputFile)
	cmd.Stderr = os.Stderr

	if err := cmd.Run(); err != nil {
		fmt.Printf("转换失败:%v\n", err)
		return
	}
	fmt.Printf("转换成功:%s\n", outputFile)
}

// 示例输出:
// 转换成功:output.mp4
const { execSync } = require('child_process');
const fs = require('fs');

const inputFile = 'input.flv';
const outputFile = 'output.mp4';

// 检查输入文件是否存在
if (!fs.existsSync(inputFile)) {
  console.error(`错误:输入文件 ${inputFile} 不存在`);
  process.exit(1);
}

try {
  // 使用 FFmpeg 转换 FLV 到 MP4
  execSync(`ffmpeg -i "${inputFile}" -c:v libx264 -c:a aac "${outputFile}"`, {
    stdio: 'inherit'
  });
  console.log(`转换成功:${outputFile}`);
} catch (error) {
  console.error(`转换失败:${error.message}`);
}

// 示例输出:
// 转换成功:output.mp4

常见问题

9 个高频疑问

这个工具支持最大多大的视频文件?
取决于浏览器内存上限。纯前端 WASM 模式下,文件先加载到内存再处理,通常 2GB 以内较稳妥,超过 4GB 可能导致浏览器崩溃。如果文件太大,建议先用本地工具(如 HandBrake)压小再转换,或改用后端版(部分部署支持分片上传)。上传后页面会显示文件大小,若卡住可尝试刷新后换小文件测试。
转换后的视频画质会变差吗?
会,取决于输出格式和参数。本工具使用 FFmpeg 默认的 libx264 编码,码率由源文件自动推算,通常保持相近水平。但 MKV 转 MP4 时如果源文件用了高码率(如 50Mbps),默认参数可能降码率导致画质损失。想保留原画质,建议先用本地 FFmpeg 加 -crf 18 参数再上传。纯浏览器版无法调节码率,后端版可指定比特率。
转换到一半卡住了怎么办?
常见原因:文件太大、浏览器标签页被挂起、或源文件编码不标准。先检查页面是否显示进度条,如果完全不动超过 30 秒,刷新页面重新上传。注意:Chrome 在后台标签页会节流 JS 执行,转换过程中不要切到其他标签页太久。如果反复卡住,换 Firefox 或 Edge 试试,或用本地 FFmpeg 命令行转换。
为什么转换后的文件比源文件还大?
不同编码器效率不同。例如从高压缩的 H.265(HEVC)转成 H.264,后者码率通常高 30-50%,文件自然变大。另外 FLV 转 MP4 时如果源文件是低码率流媒体,转成标准 MP4 后 FFmpeg 会补全帧数据,体积也可能增加。想控制文件大小,可以先用本地工具查看源文件码率,再决定是否值得转。
这个工具和格式工厂比哪个好用?
侧重点不同。格式工厂是本地软件,支持批量、调参数、加字幕,适合重度用户。本工具是纯在线,优势在于不用下载安装、用完即走,适合临时转一个文件。劣势是:一次只能转一个、不能调视频比特率/帧率、依赖网络和浏览器性能。如果只是 MP4 转 AVI 给老电视机用,这个工具够用;如果要做视频剪辑预处理,建议用格式工厂或 FFmpeg 命令行。
转换后视频没有声音了,怎么回事?
检查源文件音频编码格式。本工具默认复制音频流(-c:a copy),但如果源文件音频是 AAC、MP3 以外的格式(如 AC3、DTS、Opus),某些输出容器(如 AVI)不支持,FFmpeg 会静默丢弃音频流。解决办法:先确认源文件音频编码(可用 MediaInfo 查看),如果是不常见格式,建议先转成 MP3 音频再封装。后端版支持 -c:a aac 重新编码,可保留声音。
支持把视频转换成 GIF 动图吗?
不支持。本工具仅处理视频容器格式(MP4/AVI/MOV/MKV/WebM/FLV/3GP)之间的相互转换,不包含 GIF 输出。GIF 属于图像序列格式,需要单独提取帧并调色板优化,不在当前功能范围内。如果确实需要视频转 GIF,可以用 ezgif.com 或本地 FFmpeg 命令:ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,palettegen" palette.png 再合成。
在手机上打开这个页面能转视频吗?
可以,但有限制。iOS Safari 和 Android Chrome 都支持 WASM,核心转换功能可用。但手机浏览器对单个标签页的内存限制更严(通常 1-2GB),超过 500MB 的文件容易闪退。另外 iOS 上无法直接选取相册外的文件,需先导入“文件” App。建议只转 200MB 以内的小视频,大文件用电脑操作。
转换后的视频在电视上播放不了,是工具的问题吗?
可能性:输出格式电视不支持,或编码参数不兼容。很多老电视只认 MP4 封装 + H.264 编码 + AAC 音频,如果选了 MKV 转 MP4 但视频编码是 H.265,电视就播不了。本工具默认用 H.264,但源文件如果是 H.265 则保持原编码。建议先查电视说明书支持的格式列表,再选对应输出。如果电视支持 USB 播放,转成 MP4 通常最保险。
选择 打开 +新窗口 esc关闭