利用ffmpeg命令行转压视频示例代码

 更新时间:2019年03月05日 11:07:13   作者:洪亮  
这篇文章主要给大家介绍了关于如何利用ffmpeg命令行转压视频的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

在开始本文的正文之前,首先得安装好ffmpeg程序(Linux下还得安装x264编码)。Mac下直接用brew安装:

brew install ffmpeg --with-faac --with-fdk-aac --with-ffplay --with-fontconfig --with-freetype --with-libass --with-libbluray --with-libcaca --with-libsoxr --with-libquvi --with-frei0r --with-libvidstab --with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-openssl --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theroa --with-tools --with-x265

装好后就可以用ffmpeg这个命令压制MP4文件了:

ffmpeg -i MVI_7274.MOV -vcodec libx264 -preset fast -crf 20 -y -vf "scale=1920:-1" -acodec libmp3lame -ab 128k a.mp4

参数解释如下(从这里参考而来,有修改:https://vistb.net/2012/02/x264-video-compress-intro/):

-preset:指定编码的配置。x264编码算法有很多可供配置的参数,不同的参数值会导致编码的速度大相径庭,甚至可能影响质量。为了免去用户了解算法,然后手工配置参数的麻烦。x264提供了一些预设值,而这些预设值可以通过preset指定。这些预设值有包括:ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow和placebo。ultrafast编码速度最快,但压缩率低,生成的文件更大,placebo则正好相反。x264所取的默认值为medium。需要说明的是,preset主要是影响编码的速度,并不会很大的影响编码出来的结果的质量。压缩高清电影时,我一般用slow或者slower,当你的机器性能很好时也可以使用veryslow,不过一般并不会带来很大的好处。

-crf:这是最重要的一个选项,用于指定输出视频的质量,取值范围是0-51,默认值为23,数字越小输出视频的质量越高。这个选项会直接影响到输出视频的码率。一般来说,压制480p我会用20左右,压制720p我会用16-18,1080p我没尝试过。个人觉得,一般情况下没有必要低于16。最好的办法是大家可以多尝试几个值,每个都压几分钟,看看最后的输出质量和文件大小,自己再按需选择。

其实还有-b 1024k这样的参数,但是我发现-crf设置上后-b就不管用了。根据我自己的简单尝试,压制5D2拍摄的一段18秒1920x1080的视频(下午自然光、图像简单、大面积白墙、只有一扇黑门)crf和压出来的文件大小关系如下:

crf 文件大小
16 54M
18 39M
20 25M
22 17M
24 11M
26 7.3M
28 5.0M
30 3.6M
32 2.7M
默认 14M(crf为23)

又比较了一下crf在20、28、32时的视频质量,发现32还是能看出质量下降的,20的确非常精细,但28跟20之间的差别并不是那么大,crf值设置在26-28之间比较好。如果对尺寸有要求,什么都不设,用默认的也行(可能是31)。

另外,关于preset,slow和fast只跟运行时间有关,slow跑的时间比fast长不少,slow出来的mp4文件会小一些(12M),fast出来的文件会大一些(14M),但视频质量的差距并不明显。

如果把原视频尺寸从1920x1080缩小到960x540,则视频尺寸变为了:

crf 文件大小
16 11M
18 6.7M
20 4.4M
22 3.0M
24 2.1M
26 1.6M
28 1.3M
30 1.1M
32 893K
默认 2.5M(crf为23)

综上,对质量要求较高时,选22以下;对尺寸要求非常高时,选26(但质量确实是会稍差一些),否则选24的性价比比较高(或者默认的23也行),如果对尺寸实在要求非常非常高,那就28以上吧。

后记补充(来自@gghyoo)

可以用-threads n 来实施多线程的运算,充分利用多核cpu

例子如下:

ffmpeg -threads 2 -crf 20 -y -i ML-02.avi -strict experimental ML-02.mp4

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Linux Apache Web 服务器

    Linux Apache Web 服务器

    一、什么是WWW服务 现在在Internet上最热门的服务之一就是环球信息网WWW(World Wide Web)服务,Web已经成为很多人在网上查找、浏览信息的主要手段。WWW是一种交互式图形界面的Internet服务,具有强大的信息连接功能。它使得成千上万的用户通过简单的图形界面就可以访问各个大学、组织、公司等的最新信息和各种服务。
    2008-03-03
  • linux openssl基础介绍

    linux openssl基础介绍

    随着计算机网络技术的发展,方便快捷的互连网使人们渐渐习惯了从Web页上收发E-mail、购物和交易,这时Web页面上需要传输重要或敏感的数据,例如用户的银行帐户、密码等,所以网络安全就成为现代计算机网络应用急需解决的问题。
    2008-03-03
  • 保护(IIS)web服务器安全的15个技巧

    保护(IIS)web服务器安全的15个技巧

    保护(IIS)web服务器安全的15个技巧...
    2007-08-08
  • IIS7下运行Access+Asp的解决方法

    IIS7下运行Access+Asp的解决方法

    IIS7下运行Access+Asp的解决方法...
    2007-01-01
  • 如何使win2003服务器自动定时重启的图文教程

    如何使win2003服务器自动定时重启的图文教程

    如何使win2003服务器自动定时重启的图文教程...
    2007-03-03
  • iASP-让unix支持asp

    iASP-让unix支持asp

    iASP-让unix支持asp...
    2007-02-02
  • Apache+PHP4.0+Sybase安装文档

    Apache+PHP4.0+Sybase安装文档

    Apache + PHP 4.0 + Sybase 安装文档 蓝森林 2001年5月16日 00:59 作 者: wangwei (  -BLUG ) [目的] 使用linux 构架web服务器, 连接小型机上的Sybase数据库。我们在Sybase服务器上安装了一个实验的数据库,数据库名为test, test中有一个表是Province, 字段有Province_id, Province。 Province_id Province
    2008-03-03
  • TOMCAT+IIS配置方法

    TOMCAT+IIS配置方法

    TOMCAT+IIS配置方法...
    2006-10-10
  • linux下编译安装kangle web server教程详解

    linux下编译安装kangle web server教程详解

    这篇文章主要介绍了如果在linux下编译安装kangle web server,操作简单,对初学者很有帮助
    2017-12-12
  • 独立服务器win2003系统站点常见问题解答

    独立服务器win2003系统站点常见问题解答

    独立服务器win2003系统站点常见问题解答...
    2007-05-05

最新评论