最近要将mkv格式转为mp4格式,由于compressor不支持mkv,所以就打算用ffmpeg来转,但是由于视频文件巨大,简单的命令太慢了,所以就想用硬件加速,但是由于macOS的特殊性,官网上给出硬件加速的方法不管用,所以就研究了一下,正好写一下这款程序的一个小教程,希望能帮到有需要的人。

需要注意的是,ffmpeg不是GUI(图形交互)软件,所以操作起来需要有一定命令行使用的经验,不过我也会一步步来,尽力让新手也能看懂。

首先介绍一下ffmpeg。
ffmpeg是一款非常好用的视频音频转码、编码、解码录制程序,可以用于录制流媒体视频音频、转换音视频文件格式等各种用途,官网是:http://www.ffmpeg.org。由于是开源软件,很多转码、下载视频软件的内在就是ffmpeg。

安装FFmpeg

第一步肯定是安装程序了,官网不光提供源码可以让我们按需编译程序,也给我们提供了完整的编译版本,这里我们直接安装编译好的完整版
首先我们进入官网,点击“Download”:

再点击苹果图标,然后点击64位的静态版本下载:

这时候下载了一个归档,也就是压缩包。我们在桌面新建一个文件夹,这里将其命名为“ffmpeg”,然后将压缩包拖到这个新文件夹中。双击解压之后就得到程序了,大致如下:

这时候我们双击运行,会自动配置好,如下:

这时候就算安装好了。

初步使用FFmpeg

这时候我们需要打开“终端”(Terminal),打开终端有几种比较方便的办法。

  • 按下Command键+空格键,唤出“聚焦搜索”,搜索“终端”或者“Terminal”,就可以找到了。
  • 点击“启动台”,找到“其他”,就可以找到“终端”了。

由于macOS终端的默认工作目录是用户的根目录,所以我们需要输入以下命令来切换到刚才新建的ffmpeg文件夹:

cd Desktop/ffmpeg/

然后我们就可以用./ffmpeg来使用ffmpeg程序了。

我们可以使用以下命令来查看“帮助”:

# 下面这个命令可以查看比较简短的帮助和提示
./ffmpeg -h
# 下面这个命令可以查看比较长的帮助和提示
./ffmpeg -h long
# 下面这个命令可以查看完整的帮助和提示
./ffmpeg -h full

好了,我们开始转码吧。

初步视频格式转换(视频转码)

ffmpeg转码非常简单。这里出于演示目的,我往ffmpeg文件夹中拖入了一个名为in.mp4的MP4视频文件作为输入文件,如下:

然后使用以下命令将其转成名为out.mov的MOV视频文件(这里in.mp4out.mov都可以自己决定的):

./ffmpeg -i in.mp4 out.mov

按下回车就会进入转码状态了,画面上会出现这样的内容:

这里讲一下如何看这个部分,先看重复很多的那些行,从左到右:

  • frame= :这部分显示的是已经生成了多少帧。
  • fps=:这部分显示的是从上条信息到这条信息期间,生成了多少帧。这里和左下角的speed部分有关系,等会说speed部分的时候再讲。
  • q:这部分表示的是视频质量。由于我们没有设定转码质量,所以由系统自动决定,这里的是31(最高是52,部分编码器可能会不同)。
  • size=:这里显示的是从上条信息到这条信息期间,生成了多少数据。
  • time:这部分显示的是到被转码视频的哪部分了,比如说time=00:01:36.68表示转码到视频的1分36.68秒。
  • bitrate=:这里显示的是从上条信息到这条信息期间转码的视频的平均码率。这个数据一般维持在一个值附近,这个值可以指定,稍后说。

然后就是刚才提到的左下角的speed部分,这部分表示的是转码速度是视频帧数的几倍,比如说这个视频平均帧数是60帧,每次转码72帧,这里显示的就是1.2x了。(视频时间除以speed就是大致的渲染时间)这部分越高,就表示转码速度越快。如果这部分小于1x,那就算慢了,就需要使用硬件加速。
转码速度取决于源文件、目标文件的码率,如果源文件码率低,转码会快。目标文件同理,但是码率低可能会大幅降低画质。
而且转码速度也取决于目标文件格式,例如转avi文件会快很多。

但是我们如果看一下转码后的视频,可能会发现视频比源文件糊,这是因为目标文件的码率太低(如果目标文件比源文件小太多就会这样)。如下图,上边是源文件,平均码率是41970k;下边是目标文件,平均码率是2780k:

可以看到下面的头发糊到一起了,所以我们得使用一个比较高的码率,来改善这一情况。
如果只是想转码,不想损耗画质,使用的码率得大于等于源文件。
如果是想发在视频平台上,一般1080P的视频想要获取比较好的画质,码率至少在5000k以上即可。
这里需要注意的是同等码率下,mov画质不如mp4,所以我们将码率设置成10000k,码率几乎是之前的4倍,:

./ffmpeg -i in.mp4 -b:v 10000k out.mov

对比图如下(从上到下为“源文件”、“自动设置”、“10000码率”):

可以看到虽然画质还是比不上源文件但是好很多了。

FFmpeg加速渲染

上面提到过渲染很慢可以使用硬件加速,也就是利用显卡或者一些指令集加速。使用硬件加速不光会加快转码速度,也会减少内存和CPU的占用
但是如果使用官网文档的方法是没有办法在macOS平台加速,官网甚至没有提到相关内容。
首先我们使用以下命令来查看可以使用的硬件加速方式:

./ffmpeg -hwaccels

这时候我们可以在最下面看到支持的硬件加速方式,如下:

这里可以看到只支持videotoolbox方式来进行硬件加速。没错,macOS平台没办法按照官网文档中说的那样使用qsv或者其他硬件加速方式,需要使用videotoolbox

Apple使用VideoToolbox来为h264和265/HEVC视频编码提供硬件加速。

我们来更改一下之前使用过的命令,使用硬件加速,如下:

./ffmpeg -hwaccel videotoolbox -i in.mp4 -c:v h264_videotoolbox -b:v 10000k out.mov

我们先用-hwaccel videotoolbox选项来表示使用videotoolbox工具包,然后使用-c:v h264_videotoolbox表示我们使用h264编/解码器来进行转码,如果源文件是h265/HEVC编码的,就使用-c:v hevc_videotoolbox

刚才不用加速的时候,速度是0.949x,使用加速之后达到了1.91x,几乎是之前的两倍(这一般取决于显卡能力)。

不过需要注意的是,加速转码的画质可能会不如直接转码,但是除非大码率转码,不然的话二者画质没有任何区别。如果很担心这个问题,但是又需要加速,视频是h264或者h265/HEVC编码的视频,可以使用-preset veryslow选项来缓和一下,如下:

./ffmpeg -hwaccel videotoolbox -i in.mp4 -c:v h264_videotoolbox -b:v 10000k -preset veryslow out.mov

这样就基本可以使用FFmpeg程序了,后面应该还会写一写其他的用法。

希望可以帮到有需要的人~

macOS上如何安装(不需要编译安装或者brew)、使用ffmpeg转码的教程,以及如何使用硬件加速相关推荐

  1. Redhat EL 5.3上安装Cacti(4)- 编译安装rrdtool及安装配置snmp

    Redhat EL 5.3上安装Cacti(4)- 编译安装rrdtool及安装配置snmp Linux下安装Cacti实现网络监控 由于博客字符8万限制,所以分开5部分上传! 请看Redhat EL ...

  2. 最新版本Redis:Redis 7.0 安装使用,编译安装Redis,Redis使用场景-2022年最新Redis图解安装

    最新版本Redis:Redis 7.0 安装使用,编译安装Redis,Redis使用场景. 本章主要目标: 1.Redis介绍 2.下载Redis,编译安装Redis 3.启动Redis使用 4.Re ...

  3. python3.7.2安装-ubuntu下编译安装Python3.7.2

    Ubuntu下安装Python3.7.2 1.去官网下载Python3.7.2 首先到要安装的文件夹下创建安装目录 mkdir /usr/local/bin/python3.7 切到要下载的文件夹下: ...

  4. ubuntu 编译安装php mysql_ubuntu编译安装php5 mysql nginx

    一.首先下载软件源码包 wget http://sysoev.ru/nginx/nginx-0.8.53.tar.gz wget http:/.s135.com/soft/linux/nginx_ph ...

  5. apache 编译安装php mysql_编译安装APACHE+PHP+MYSQL

    adminjun qq:279872 网络技术研究会群:8070045 中国linux公社论坛群:4478487 其实这是我用RouterOS和redhat linux进行pppoe服务器的配置及在r ...

  6. 从nginx的编译安装,了解编译安装原理

    nginx编译安装过程 https://www.cnblogs.com/liujuncm5/p/6713784.html 1.configure 这一步一般用来生成 Makefile,为下一步的编译做 ...

  7. freerdp 解压安装_Ubuntu下编译安装运作FreeRdp连接Windows

    Ubuntu下编译安装运行FreeRdp连接Windows. linux下编译源码进行USB重定向到远程桌面的测试,经过参数的正确配置,可以正常的重定向.具体的操作步骤如下: ⑴在虚拟机上安装git, ...

  8. 编译安装python3.6_编译安装Python3.6及以上

    编译安装Python3.6及以上 前言 系统环境为centos6或7系统,编译安装python3.6及以上版本需要带上ssl模块,否则后面pip3安装会出现ssl类似的报错.而3.6及以上中的ssl模 ...

  9. linux nginx编译安装mysql_Centos7下编译安装配置Nginx+PHP+MySql环境

    序言 这次玩次狠得.除了编译器使用yum安装,其他全部手动编译.哼~ 看似就Nginx.PHP.MySql三个东东,但是它们太尼玛依赖别人了. 没办法,想用它们就得老老实实给它们提供想要的东西. 首先 ...

最新文章

  1. linux7开放3306端口,CentOS 7 开放3306端口访问
  2. 《Effective STL》学习笔记(第四部分)
  3. python集合和eval的使用
  4. Base64编码算法
  5. pop客户机程序流程图_基于.NET的在线考试系统的设计与实现
  6. Linux学习之系统编程篇:利用 setitimer 实现 alarm练习
  7. java textfield事件_[求助]TextField失去焦点触发事件问题
  8. 信息学奥赛一本通C++语言——1094:与7无关的数
  9. BilibilivideoDownload下载器
  10. 如何制作一个可控制的人体骨骼模型
  11. 书单(三)-从小到大课外阅读书籍顺序
  12. 如何看待花呗接入央行个人征信?
  13. 灰度拉伸python_对比度拉伸(一些基本的灰度变换函数)基本原理及Python实现
  14. 周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8
  15. maya为什么不能导出fbx_FBX动画导入导出经验心得(MayaToMax,MayaToMaya)
  16. vue02——vue中v-XXX指令
  17. 基于Pushlet实现的网站消息推送
  18. MySQL(08 聚合函数 课后练习)
  19. 第一次预习作业(html,css,js简单介绍,HTML常用标签)
  20. 【素描教程】新手素描鼻子的起形跟…

热门文章

  1. java 电子杂志,制作电子杂志的软件-名编辑电子杂志制作软件 V2.4.9.23 免费版
  2. Windows下创建隐藏账户、影子账户
  3. 如何利用JS加密工具来压缩体积
  4. 10. GridView控件的简单介绍
  5. 若金融战败 30年辛劳积累将付诸东流!
  6. 10270 : 青蛙的游戏
  7. Python数据分析(一)
  8. Edge 按 Backspace键 实现返回上一页 过程
  9. [开源]斗图大脸萌7.0版 斗图素材引流
  10. 如何用Label mx条码软件生成条形码标签