转自: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编码指南
相关推荐
这个压缩包"ffmpeg-master-latest-win64-gpl-shared"是针对Windows 64位操作系统编译的最新FFmpeg版本,包含了动态链接库(shared),这意味着在使用时,程序会依赖这些库文件来执行各种多媒体操作。 FFmpeg 包含了...
windows FFmpeg 免安装压缩包 ffmpeg-6.1.1-full-build-shared
- 转码视频:`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"提供了适用于Windows 64位系统的最新FFmpeg工具,为音频、视频处理提供了强大的功能。无论是个人用户进行多媒体转换,还是开发者构建多媒体应用,这个工具都能提供极大的...
FFmpeg 是一套能够处理多媒体数据(音频、视频、字幕等)的开源计算机程序库和命令行工具,广泛应用于音视频处理、转码、流媒体等领域1。 要使用该压缩包,通常需要以下步骤: 下载 ffmpeg-6.1.1.tar 压缩包。 ...
在Windows环境下,FFmpeg 的静态编译版本 `ffmpeg-20180201-b1af0e2-win64-static` 包含了所有必需的依赖库,用户只需将该版本解压后放入系统路径,就可以在命令行直接运行FFmpeg命令,无需额外安装。 总的来说,...
github有的时候上不去,下载链接也点不动,故上传CSDN备份 Windows builds by BtbN Latest Auto-Build (2024-02-06 12:56) ffmpeg-master-latest-win64-gpl-shared.zip
这个压缩包"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" 是一个针对 Delphi 用户的 FFmpeg 头文件包,包含了 FFmpeg 3.0.2 版本的 Pascal 头文件,适用于 Delphi 的 FFVCL 库。 FFVCL (FFmpeg Video Component Library) 是一个 ...
4. **参数调整**:H264编码有许多可调整的参数,如比特率、帧率、关键帧间隔等,通过FFmpeg API可以设置这些参数以满足特定需求。 5. **错误处理**:在使用FFmpeg时,必须处理可能出现的错误,例如内存分配失败、...
此压缩包包含的版本是 4.2.2,适用于 Windows 64 位操作系统,分为开发版(ffmpeg-4.2.2-win64-dev)和共享版(ffmpeg-4.2.2-win64-shared)。 1. **FFmpeg 命令行工具**: FFmpeg 的核心部分是一组命令行工具,...
使用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的强大之处还在于其丰富的命令行选项和参数,可以满足从基础到高级的各种需求。通过组合不同的滤镜和设置,用户可以实现定制化的多媒体处理任务。 总的来说,"ffmpeg-master-6.0-win64-gpl.zip" 提供了一套...
ffmpeg-6.0-win-full-build-shared.7z
FFmpeg sdk 3.2 ,音视频解码器,支持众多格式。内有文档。开发方便。
在这个“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是javaCV在linux32位平台的依赖包
C#实现 ffmpeg视频转码、播放-附件资源
这个名为 "ffmpeg-N-101994-g84ac1440b2-win64-gpl.zip" 的压缩包文件包含了FFmpeg的特定版本,适用于64位Windows系统,并且是基于GPL(GNU General Public License)许可证的,这意味着你可以自由地使用、修改和...