最近要将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. Mysql 索引 事物
  2. 【TP3.2】模板 select选项采坑
  3. 解决类似umount target is busy挂载盘卸载不掉问题
  4. mysql 索引语法_MySQL 索引:语法及案例剖析
  5. python判断字符是否是字典的键_Python3基础 dict in/not in 查询一个字符是否指定字典的键或者值...
  6. .NET跨平台之旅:将示例站点从ASP.NET 5 Beta7升级至RC1
  7. Node中同步与异步的方式读取文件
  8. linux的文件io操作(转)
  9. 【监控】Grafana面板修改记录
  10. 鼠标经过(hover)事件的延时处理
  11. python数据分析之(6)简单绘图matplotlib.pyplot
  12. php判断平板,一种 PHP 判断设备是否是手机/平板的方法
  13. Carryon 数数字(x^n ≡1 mod(x-1))
  14. Unity ML-Agents 从零训练你自己的AI!:一、环境配置
  15. Linux常用指令(5)——20.4.25
  16. android studio DDMS debug process 无法激活,小虫子灰色
  17. 一文搞懂谐波、纹波、噪声
  18. Nginx+Docker+Jekyll+阿里云ECS+备案搭建博客全记录
  19. 《MongoDB极简教程》第一章 NoSQL简史 amp; MongoDB安装amp;环境配置
  20. 分享一下基于autojs4的WX加好友

热门文章

  1. 基于SSM和mysql实现的Web便利店收银管理系统实现,Javaweb实现的超市收银平台
  2. 724便利店系统完整项目及讲解
  3. 计算机网络的管理分析,计算机网络管理软件的分析研究
  4. 报错解决:Can‘t connect to X11 window server using……
  5. Could not launch “” Domain: IDEDebugSessionErrorDomain Code: 3 Failure Rea
  6. 打开管家婆软件提示:已停止工作/程序无响应
  7. EFI系统分区如何删除
  8. Linux 探索之旅 | 第二部分第一课:终端 Terminal,好戏上场
  9. access下如何配置两个vlan_锐捷三层交换机创建的两个vlan之间怎么样配置能通
  10. 四位行波进位加法器_《城市:天际线》中的图灵机:用水电管道做一个四位加法器...