ffmpeg 怎么能无损伤的转码视频

我现在有一个 mkv格式,编码为acv1的文件,
怎么无损伤的转成如 mp4格式,编码也为avc1的文件 ?

上面的编码格式是一样,可能答案比较简单
但当我想无损伤转成 mp4格式 编码为 av1h.265 的文件呢?

阅读 4.2k
1 个回答

你首先需要理解什么叫无损转换。
mkv是一种包装格式,可能本身就包装的mp4文件,所以mkv转mp4可能只需要重新包装一下,这在ffmpeg中被称为解离(remux)混合(mix),或者叫重新封装,因为这种处理实际上不是转码,所以对前后两种格式来说,处理比较快,而且不存在任何数据损失(包括音频也可以类似处理),所以可以称为视音频的无损转格式,但这种处理因为受限与格式自身能力限制,有时也不一定是无损的,比如mkv是可以封装多种字幕的,而mp4则没有这样的能力,所以这种转格式有时还是会有信息损失。此外如果mkv封装的视(音)频和转出的mp4存在任何编码特性上的不同(这不仅为编码格式,也包括编码率、视频分辨率、颜色深度、音频采样率等等任何一种的不同),都会导致重新编码,这时才是真正的转码,这时转码前后的两种格式文件光就视(音)频数据来说也肯定是存在不同的啦。

接下来又谈谈什么叫无损编码,如果你了解视频技术,画面每帧就是一副按RGB数据流数组处理的画面,按8bit每种颜色分量来说,再加上8bit的透明通道,每个像素点是32bit,这样一帧就是一个WxHx32bit 的数据数组,这样按每秒30帧,这里视频其实就是图片序列,所谓的无损画面其实就是对摄像机拍摄的类似这样画面,完全量化存储的画面。如果某种格式能直接存储这样的数据,就是无损视频数据。不过这样存储太占空间,既不利于存储,也不利于网络传输,所以有了各种编码技术,这些技术的根本目的就是在不影响观看情况下尽量减小数据量,这里很多编码都利用了人视觉的生物特性,都是有损编码技术,不过这些损失的信息一般都是人动态视觉中不太关注的信息,而且如果编码率足够高,也不是不能做到无损的。

所以一般编转码码中其实不存在完全的无损转码,一般不同的编码转换的过程是

  1. 解码原编码数据到图像帧(对数据是无损的过程)
  2. 解码图像帧在新编码要求下编码成新数据流(一般是有损的过程,具体编码效率依据不同编码技术能力不同差异其实很大)

此外这里AVI也是一种包装格式,它可以直接包装mp4编码数据流,所以如果是mp4文件转AVI,其实可以无损转换(和mp4编码内容的mkv转mp4一样重封装即可)。

此外mp4其实也可以说是一种封装格式,它可以封装h.264编码数据流,也可以封装h.265编码数据流,如果是h.264转h.265,是需要转码的,这个转码后的h.265编码数据也不可能比原始h.264画面更好,最多体现为数据文件更少,因为按前面不同编码转换过程可知这个过程中h.265编码的数据源实际上h.264解码画面,这已经是画面的上限质量啦!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏