广告

重编码 vs 流复制:为什么转换有时会变慢变糊

2026-08-20

在 tools.beer 上,我们见过太多这样的反馈:有人把一个 .mp4 拖进去,想换成 .mkv 或者只是想抽个音频,结果等了好几分钟,再一看——画质好像还差了一点。

多数人的直觉是:"转格式嘛,本来就慢,本来就糊。"其实完全不是。

问题不在"转",而在你怎么转:你是把内容重新做了一遍(重编码),还是只是换了包装(流复制)?这两个动作天差地别,搞错一个,就是白白浪费时间还丢画质。

1. 一个类比:重新做饭 vs 换个盘子

把音视频文件想成一盘菜

  • 重编码(Re-encode / Transcode)=把菜倒出来、重新炒一遍。你需要先把做好的菜拆回食材(解码),再用新的做法(编码器)炒成另一盘。能改口味、改分量,但费时、且每次重炒都会损失一点原味(有损)。
  • 流复制(Stream copy / Remux)=原菜原样,只换个盘子。菜本身一动没动,只是从旧盘挪到新盘(换容器)。快到几乎瞬间,且味道完全不变。

记住这句话:流复制改的是"容器",重编码改的是"内容"。

重编码像"重新做饭",流复制像"换个盘子"重编码 Re-encode源文件容器+编码解码重新编码目标文件新编码慢 · 有损(除非无损设置)· CPU 密集能改:编码 / 分辨率 / 码率 / 加滤镜例:mp4→mp3、H.264→H.265、4K→1080p流复制 Stream copy源文件容器+编码目标文件编码不变直接搬运不经过解码/编码快 · 零质量损失 · CPU 几乎不参与只能:换容器 / 提取流 / 无损剪切例:mp4→mkv(换盒)、抽音频、快剪

2. 流复制:只换盒子,不动内容

流复制在 FFmpeg 里对应的是 -c copy(copy 所有流)或 -c:v copy -c:a copy(只复制视频/音频)。它做的事非常简单:

  1. 读取原容器里已经压缩好的音视频数据包;
  2. 原封不动地塞进新容器;
  3. 写文件。

整个过程不经过解码,也不经过编码,所以:

  • 速度极快:瓶颈只是硬盘读写,几 GB 的文件也能秒级完成;
  • 零质量损失:数据一个字节都没动过,画质音质与源完全一致;
  • 文件大小几乎不变:只是换了包装。

它能做的:换容器(mp4→mkv)、提取某一条流(从视频里只抽音频)、不重编码的剪切(快剪)。

不能做的:改分辨率、改码率、改编码格式、加滤镜、去水印——因为那些都需要先"拆回食材"再"重炒"。

3. 重编码:拆了重做,能改一切但更贵

重编码(也叫转码 Transcode)才是大多数转换器默认做的事:

  1. 解码:把压缩数据还原成原始音视频;
  2. 处理(可选):改分辨率、降码率、加滤镜;
  3. 重新编码:用目标编码器(如 H.265、MP3)重新压成新数据;
  4. 封装:写进目标容器。

代价很明显:

  • :编码是 CPU/GPU 密集型,往往比流复制慢几十倍;
  • 有损:只要用了有损编码(H.264/H.265/AAC/MP3),每次重压都会丢一点信息,画质/音质不可逆下降(除非你显式用无损设置且源目标编码一致,这很少见);
  • 文件大小可变:可以通过降码率压小,也可能因为参数没调好反而变大。

它适合的场景:mp4→mp3(必须重编码,因为视频流被丢弃、音频从 AAC 变成 MP3)、H.264→H.265 压体积、4K→1080p 降分辨率、给老设备转成兼容的编码。

4. 一张表看清差别

维度重编码 Re-encode流复制 Stream copy
速度慢(CPU 密集)极快(只搬数据)
画质/音质有损,可能下降零损失,与源一致
文件大小可变(能压小)几乎不变
能改编码✅ 能❌ 不能
能改分辨率/码率✅ 能❌ 不能
能换容器✅ 能(顺带)✅ 能(主要用途)
典型命令-c:v libx264 -c:a aac-c copy

5. 我们踩过的真实坑

这些不是教科书例子,是 tools.beer 在浏览器和桌面端转码里真真切切踩出来的。

坑 1:流复制抽出的音频,容器选错照样翻车。 从 mp4 里用 -c:a copy 把 AAC 抽出来,如果存成裸 .aac,又踩回我们容器与编码那篇讲过的老问题:裸 AAC 没有时长元数据,部分播放器读错采样率,变成"半速播放、时长翻倍"(FFmpeg trac #5448)。所以即便是流复制,也得把音频正确封装进 M4A 容器——动作是"流复制",容器不能省。

坑 2:流复制剪出来开头不干净。 -c copy -ss 00:01:30 -to 00:02:00 看着能剪,但它只能按关键帧(I 帧)对齐断开。指定的起点若不在关键帧上,要么被跳到下一个关键帧(开头缺一段),要么补一段重复帧。要逐帧精确剪切,只能老老实实重编码。

坑 3:为什么 tools.beer 有的转换快、有的慢。 我们桌面端(Tauri 原生 ffmpeg)的"转成 mp4"走的是 libx264 重编码,所以耗时是真刀真枪的重压;而浏览器端纯换容器的场景,本质是流复制思路,自然飞快。理解这个区别,你就不会误以为"转换器偷懒"或"转换器太慢"。

坑 4:很多在线转换器默认一律重编码。 不管你只是想换容器还是抽音频,它们往往直接重编码——慢、还丢画质,顺便用"排队加速""会员提速"赚钱。你本可以用流复制瞬间无损搞定。

6. 什么时候用哪个(决策清单)

  • 只想换容器(mp4→mkv、mov→mp4)→ 流复制
  • 只想从视频里抽音频、且目标编码和源兼容 → 流复制
  • 想快速剪一段、对切点精度要求不高 → 流复制
  • 要改编码(H.264→H.265)、压体积、改分辨率、加滤镜、转成不兼容的格式 → 重编码
  • 视频转纯音频(mp4→mp3)→ 必须重编码(视频流被丢弃,音频编码也变了)。

理解了这对概念,再去看 FFmpeg 到底怎么干活,你会瞬间明白那条流水线里"解码—编码"为什么是重编码的命门;想系统入门,从音视频转换完全指南开始。

小结

  • 重编码 = 拆了重做,能改一切但慢、有损、吃 CPU;
  • 流复制 = 只换容器,快、无损、但改不了内容本身;
  • 多数"换格式"其实用流复制就够了,别白白重编码;
  • 流复制也有边界:不能改编码/分辨率,且剪切按关键帧对齐。

延伸阅读

想立刻动手,可以直接在浏览器里把 MP4 转成 MP3

参考资料(权威来源)

Wikipedia: Transcoding
Wikipedia: Video compression picture types(I 帧 / 关键帧)
FFmpeg 官网

本文由 tools.beer 团队撰写,基于我们在浏览器端与桌面端 FFmpeg 转码中的真实踩坑经验整理。最后更新于 2026-08-20。

广告

阿里云 AI Agent 零代码部署 · 68 元起

轻量服务器 + Token Plan 组合购,分钟级部署 OpenClaw/Hermes AI 助手,7×24 小时在线、不限流量、数据自主可控,支持 11 款主流大模型

立即查看