`

FFmpeg视频转码技巧之-crf参数(转)

 
阅读更多

转自:https://blog.csdn.net/lsw8569013/article/details/53005116/

 

昨天,有个朋友给我出了个难题:他手上有一个视频,1080P的,49秒,200多兆;要求在确保质量的情况下把文件压缩到10M以内。

这是什么概念呢?按照文件大小10M来计算,码率是:10 x 8 / 49 = 1.6 Mbps。也就比VCD的质量略好一点(注:VCD的标准码率是1150 Kbps)。谈何“确保质量”?mission impossible啊!

咱还是现实一点吧。在不明显损失画质的前提下,看看使用FFmpeg能够帮到多少忙。用iPhone拍了一个1920 x 1080的视频,33秒,46.3 MB,编码格式是H.264。考虑到H.264目前尚是主流的视频格式,为了播放的兼容性,我们在使用FFmpeg转码时同样选择H.264。

命令行参数-crf

在优先保证画面质量(也不太在乎转码时间)的情况下,使用-crf参数来控制转码是比较适宜的。这个参数的取值范围为0~51,其中0为无损模式,数值越大,画质越差,生成的文件却越小。从主观上讲,18~28是一个合理的范围。18被认为是视觉无损的(从技术角度上看当然还是有损的),它的输出视频质量和输入视频相当。

我们的策略是,在保证可接受视频画质的前提下,选择一个最大的crf值——如果输出视频质量很好,那就尝试一个更大的值;如果看起来很糟,那就尝试一个小一点的值。

让我们先执行下面这条命令(关于FFmpeg运行环境的配置,请参阅这篇文章):

ffmpeg -i D:\src.mov -c:v libx264 -preset veryslow-crf 18 -c:a copy D:\dest1.mp4

意思是:将D盘的源文件src.mov,以“非常慢”的速度重新编码成H.264格式,保存为D:\dest1.mp4。其中,-preset指定的编码速度越慢,获得的压缩效率就越高。而-c:a copy又是什么意思呢?因为音频的码率一般都比较小,我们就不折腾它了,况且解码后重新编码也会损害音质,于是,就将音频数据从源文件中以原有编码格式直接拷入目标文件吧。

小提示:想知道-c:v后面的参数值怎么填吗?或者说FFmpeg到底支持哪些音视频编码格式?执行ffmpeg –encoders看一下吧。另外,执行ffmpeg -i D:\src.mov -c:v libx264-preset -tune D:\dummy.mp4可以看到-preset参数的取值范围,如下:

有个小疑问:既然不在乎等待时间,为什么不给-preset指定一个最慢的placebo呢?那是因为:与 veryslow相比,placebo以极高的编码时间为代价,只换取了大概1%的视频质量提升。这是一种收益递减准则:slow 与 medium相比提升了5%~10%;slower 与 slow相比提升了5%;veryslow 与 slower相比提升了3%。

另外,针对特定类型的源内容(比如电影、动画等),还可以使用-tune参数进行特别的优化。但如果你不确定该用哪个选项,还是忽略这个参数吧。

对比效果

执行完一条转码命令之后,调整-crf参数值,分别设为19、20、28、51,重新转码输出为不同的MP4文件。记录数据,对比如下:

 

crf = 18

crf = 19

crf = 20

crf = 28

crf = 51

文件大小(MB)

46.3

36.7

31.2

26.5

7.95

1.25

缩减比率

 

21%

33%

43%

83%

97%

尝试播放这些文件。发现crf取值为18~28的情况下生成的文件,其画质没有明显的差异,而以-crf 51生成的视频画质已经惨不忍睹了!在实际应用中,多试几个crf值,在画质和压缩比之间找到一个你能接受的平衡点即可。

参考文章:ffmpeg与x264编码指南

 

 

crf = Constant Rate Factor
-preset取值范围:ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo
-tune取值范围:film,animation,grain,stillimage,psnr,ssim,fastdecode,zerolantency

分享到:
评论

相关推荐

    ffmpeg-master-latest-win64-gpl-shared

    这个压缩包"ffmpeg-master-latest-win64-gpl-shared"是针对Windows 64位操作系统编译的最新FFmpeg版本,包含了动态链接库(shared),这意味着在使用时,程序会依赖这些库文件来执行各种多媒体操作。 FFmpeg 包含了...

    windows FFmpeg 免安装压缩包 ffmpeg-6.1.1-full-build-shared

    windows FFmpeg 免安装压缩包 ffmpeg-6.1.1-full-build-shared

    ffmpeg-4.3.1-2021-01-01-essentials_build.rar

    - 转码视频:`ffmpeg -i input.mp4 -c:v libx265 -crf 23 output.mkv` - 推流到 RTMP 服务器:`ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server.com/live/stream_key` FFmpeg 还有一个庞大的开发者社区,...

    ffmpeg-master-latest-win64-gpl.zip

    总之,"ffmpeg-master-latest-win64-gpl.zip"提供了适用于Windows 64位系统的最新FFmpeg工具,为音频、视频处理提供了强大的功能。无论是个人用户进行多媒体转换,还是开发者构建多媒体应用,这个工具都能提供极大的...

    ffmpeg-6.1.1.tar,ffmpeg-master-latest-win64-gpl-shared

    FFmpeg 是一套能够处理多媒体数据(音频、视频、字幕等)的开源计算机程序库和命令行工具,广泛应用于音视频处理、转码、流媒体等领域1。 要使用该压缩包,通常需要以下步骤: 下载 ffmpeg-6.1.1.tar 压缩包。 ...

    ffmpeg 音视频转码

    在Windows环境下,FFmpeg 的静态编译版本 `ffmpeg-20180201-b1af0e2-win64-static` 包含了所有必需的依赖库,用户只需将该版本解压后放入系统路径,就可以在命令行直接运行FFmpeg命令,无需额外安装。 总的来说,...

    ffmpeg-master-latest-win64-gpl-shared.zip

    github有的时候上不去,下载链接也点不动,故上传CSDN备份 Windows builds by BtbN Latest Auto-Build (2024-02-06 12:56) ffmpeg-master-latest-win64-gpl-shared.zip

    ffmpeg库:ffmpeg-n5.1-latest-win64-gpl-shared-5.1

    这个压缩包"ffmpeg-n5.1-latest-win64-gpl-shared-5.1" 提供的是FFmpeg库的最新版本5.1,针对64位Windows操作系统,并且是基于GPL(GNU General Public License)许可的共享版本。下面我们将深入探讨FFmpeg库的关键...

    ffmpeg-delphi-pascal-headers-3.0.2.zip_FFVCL_delphi vlc_ffmpeg_f

    "ffmpeg-delphi-pascal-headers-3.0.2.zip" 是一个针对 Delphi 用户的 FFmpeg 头文件包,包含了 FFmpeg 3.0.2 版本的 Pascal 头文件,适用于 Delphi 的 FFVCL 库。 FFVCL (FFmpeg Video Component Library) 是一个 ...

    ffmpeg6.0-h264-x86-msvc

    4. **参数调整**:H264编码有许多可调整的参数,如比特率、帧率、关键帧间隔等,通过FFmpeg API可以设置这些参数以满足特定需求。 5. **错误处理**:在使用FFmpeg时,必须处理可能出现的错误,例如内存分配失败、...

    ffmpeg-4.2.2-win64-dev ffmpeg-4.2.2-win64-shared

    此压缩包包含的版本是 4.2.2,适用于 Windows 64 位操作系统,分为开发版(ffmpeg-4.2.2-win64-dev)和共享版(ffmpeg-4.2.2-win64-shared)。 1. **FFmpeg 命令行工具**: FFmpeg 的核心部分是一组命令行工具,...

    使用FFmpeg合并MP4视频 ffmpeg-20190416-036b4b0-win64-exe

    使用FFmpeg合并MP4视频 ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts ffmpeg -i "concat:1.ts|2.ts" -acodec ...

    ffmpeg-master-6.0-win64-gpl.zip

    FFmpeg的强大之处还在于其丰富的命令行选项和参数,可以满足从基础到高级的各种需求。通过组合不同的滤镜和设置,用户可以实现定制化的多媒体处理任务。 总的来说,"ffmpeg-master-6.0-win64-gpl.zip" 提供了一套...

    ffmpeg-6.0-win-full-build-shared.7z

    ffmpeg-6.0-win-full-build-shared.7z

    FFmpeg-full-SDK-3.2.rar_FFMPEG 3.2_FFmpeg-full-SDK_ffmpeg sdk VC

    FFmpeg sdk 3.2 ,音视频解码器,支持众多格式。内有文档。开发方便。

    ffmpeg share版-ffmpeg-n4.4-latest-win64-lgpl-shared-4.4.zip

    在这个“ffmpeg-n4.4-latest-win64-lgpl-shared-4.4.zip”压缩包中,包含的是 FFmpeg 的4.4版本,专为64位的Windows系统设计,并且是“共享”(shared)版本,意味着库是动态链接的,可以与其他程序共用。...

    ffmpeg-3.1.2-1.2-linux-x86.jar

    ffmpeg-3.1.2-1.2-linux-x86.jar是javaCV在linux32位平台的依赖包

    C#实现 ffmpeg视频转码、播放-附件资源

    C#实现 ffmpeg视频转码、播放-附件资源

    ffmpeg-N-101994-g84ac1440b2-win64-gpl.zip

    这个名为 "ffmpeg-N-101994-g84ac1440b2-win64-gpl.zip" 的压缩包文件包含了FFmpeg的特定版本,适用于64位Windows系统,并且是基于GPL(GNU General Public License)许可证的,这意味着你可以自由地使用、修改和...

Global site tag (gtag.js) - Google Analytics