如何以最小的质量损失重新编码 H.264 视频?

Sof*_*Kng 20 h.264 handbrake ffmpeg video-encoding

我有很多 MPEG-TS 文件(.TS 容器但 H.264 视频)并且播放很好,除了当您向前/向后跳过或快进时,它非常缓慢并且变得像素化等。

我一直在尝试做研究,我猜他们用很少的参考块进行编码(即它是从 DVB-S 卫星流中捕获的)。

当我用 Handbrake(.MP4 容器)对它们重新编码时,它们播放得非常非常好,并且在视频中寻找是即时的,等等。

是否可以以最小的质量损失对我的 MPEG-TS 文件进行转码/重新编码?如果是这样,我最好的选择是什么?它们每个约为 2 Mbps(即每小时 2 GB),但如果“最小质量损失”需要每个文件 10+ GB,我不想重新编码它们。我希望保持视频大小相同。

任何人都可以给我任何建议吗?

evi*_*oup 24

这可能是容器问题,将其复制到新的容器格式

avconv -i input.ts -c copy output.mp4
Run Code Online (Sandbox Code Playgroud)

可能会解决您的问题。这将是 100% 无损的。如果这不起作用,18 的 crf 通常被认为是“视觉无损”;您可以将其设置为 HandBrake(在“视频”选项卡下),或使用 avconv:

avconv -i input.ts -c:a copy -c:v libx264 -crf 18 -preset veryfast output.mp4
Run Code Online (Sandbox Code Playgroud)

预设为:超快、超快、非常快、更快、快、中、慢、慢、非常慢。预设越慢,文件越小(但编码时间增加)。在我的个人实验中,我发现文件大小的最大下降是在超快和非常快之间,之后它似乎更加增量。

注意:如果你愿意,ffmpeg 可以做任何 avconv 可以做的事情,使用相同的语法(只需用 ffmpeg 替换 avconv 的所有实例)。

脚注:您可能会发现ffmpeg x264 编码指南对了解更多信息很有用。


slh*_*hck 8

无需深入了解视频编码的细节:当您的约束是特定视频编解码器 (h.264) 或特定比特率时,就没有“最小质量损失”这样的东西。一个限制因素永远存在——如果有一种方法可以保持更高的质量,那么可以这么说,那将是视频编码的圣杯。

像 x264 这样的编码器只能做这么多——你的主要“控制”旋钮将是“恒定速率因子”设置,它以某种方式充当“恒定质量”因子。除此之外,在使用一个特定编码器重新编码并保持相同的视觉/体验质量时,可以节省多少比特率存在技术限制。

当然,对于 XviD(一种简单的 MPEG 4 Part II 编码器)和 x264(当今最先进的 h.264 编码器),您会得到不同的结果。然后你也可以尝试购买 Mainconcept h.264 编码器,看看在相同的平均比特率下使用它是否会产生更好的质量。

在视频编码中,无论如何您都必须进行一些试验,因为这也取决于源材料。一场足球比赛比一轮斯诺克更难编码。x264 中有一些选项允许对某些类型(例如电影)进行调整,例如使用-tune filmFFmpeg 中的选项,但差异可能很小。

有关示例和更多信息,请参阅FFmpeg:终极视频和音频操作工具