You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用FFmpeg将MOV转MP4并兼顾画质与文件大小?

嘿,我来帮你搞定这个MOV转MP4时「画质与文件大小平衡」的问题!先拆解下你之前两个命令的问题所在,再给你几个实用的解决方案:

为什么你之前的命令会出现极端情况?

  • 第一个命令用了-vcodec mpeg2video,MPEG-2是比较老旧的编码,压缩效率极低,而且你没指定画质/码率参数,FFmpeg默认用了极低的码率,直接导致画质崩盘、文件暴小;再加上转MP3音频,双重压缩雪上加霜。
  • 第二个命令的-vcodec copy是直接复制原视频流,相当于只换了个容器,完全没压缩视频,所以文件大小和原MOV一致,这适合追求零损失但不介意文件大小的场景,但显然不是你想要的。

推荐解决方案:平衡画质与大小的最优选项

1. 恒定画质模式(最推荐,简单易控)

用H.264或H.265编码的CRF(Constant Rate Factor)模式,这是FFmpeg里控制画质最直观的方式——固定画质,让文件大小自适应

如果你追求兼容性(比如要在老设备播放):用H.264编码
ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4

参数解释:

  • -crf 23:CRF值范围0-51,0是无损,23是默认值。数值越小画质越好、文件越大,一般18-28是合理区间:
    • 18:画质几乎和原文件无差,文件比原文件小一点
    • 23:画质肉眼难辨差异,文件大概是原文件的30%-50%(依原视频编码而定)
    • 28:文件明显缩小,画质略有下降但大部分场景可接受
  • -c:a aac -b:a 128k:用MP4标准的AAC音频编码,128k码率足够日常使用,追求音质可升到192k/256k
如果你想极致压缩(相同画质下文件比H.264小30%-50%):用H.265编码
ffmpeg -i input.mov -c:v libx265 -crf 28 -c:a aac -b:a 128k output.mp4

注意:H.265的CRF值和H.264不是一一对应,28大概相当于H.264的23,同样可以调整数值来平衡需求。

2. 指定目标文件大小(精准控制)

如果你有明确的文件大小要求(比如要压到10MB),可以用2-pass编码,分两步完成:

  1. 先计算总码率:总码率 = (目标大小MB × 8192) / 视频时长秒
    举个例子:原文件50MB,想压到10MB,视频时长300秒(5分钟),总码率就是(10×8192)/300 ≈ 273kbps,减去音频码率128kbps,视频码率就是145kbps。
  2. 执行2-pass命令:
# 第一遍:分析视频生成统计文件(忽略音频)
ffmpeg -i input.mov -c:v libx264 -b:v 145k -pass 1 -an -f mp4 /dev/null
# 第二遍:根据统计文件精准压缩,加入音频编码
ffmpeg -i input.mov -c:v libx264 -b:v 145k -pass 2 -c:a aac -b:a 128k output.mp4

3. 快速转容器(几乎零耗时,仅优化兼容性)

如果原MOV的视频流已经是MP4支持的编码(比如H.264/H.265),直接复制所有流即可,速度极快且无损失:

ffmpeg -i input.mov -c copy output.mp4

如果原音频是PCM这类占空间的格式,可单独转音频流,既节省空间又保证兼容性:

ffmpeg -i input.mov -c:v copy -c:a aac -b:a 128k output.mp4

内容的提问来源于stack exchange,提问作者Calamity Jane

火山引擎 最新活动