先从在mac系统中安装ffmpeg开始说起。我们通过第三方工具homebrew开始安装ffmpeg比较方便。
一、前提:安装homebrew
-homebrew 是Mac平台的一个包管理工具,提供了许多Mac下没有的Linux工具等,而且安装过程很简单。
二、安装过程
查看当前电脑是否安装有homebrew
brew
若没有安装,在终端输入下面的命令安装homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
国内gitee安装homebrew
/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"
清理homebrew:
brew cleanup
二、通过homebrew安装FFmpeg
这里要多说一句, 为什么推荐用homebrew去安装, 而不是自己手动搞? 笔者手下有个运维曾经在某博客上搜索安装h265的编码器文件, 折腾了一天,结果编译出来的视频文件, 全部花瓶。说实话还是homebrew香一些。
使用homebrew安装ffmpeg插件的命令如下:
brew install ffmpeg
查看安装ffmpeg的信息
brew info ffmpeg
如果看到有绿色对号✅的代表支持这种库,红色叉子代表不支持。
查看安装ffmpeg的信息
更新ffmpeg
brew update
或者
brew upgrade ffmpeg
安装某一个特定的库如下格式:
brew install [FORMULA...]
例如:安装openssl 库输入以下命令:
brew install openssl
安装某一个特定的库
卸载某个特定的库如下格式:
brew uninstall [FORMULA...]
例如:卸载openssl库输入以下命令:
brew uninstall openssl
三、多媒体音频视频格式转换姿势
说到这里重点来了,我不是舞扇猪头高晓松,没那么多胡说废话,直接看本章代码命令样例就明白。
视频格式/容器转换
比如你想把一个avi文件,想转为mp4。输入:
ffmpeg -i 原片.avi 目标文件名.mp4
或者想把mp4转成ts格式的
ffmpeg -i 原片.mp4 目标文件名.ts
改变视频的分辨率
改变视频的码率很简单了。一个-s参数搞定, 例如
ffmpeg -i 原片.mp4 -s 1920x1080 目标文件名.mp4
如果发现有个-s参数后面竟然是vga, 例如, 那么用的其实是别名, 举例说明:
ffmpeg -i 原片.mp4 -s vga 目标文件名.mp4
其实就等价于
ffmpeg -i 原片.mp4 -s 640x480 目标文件名.mp4
改变视频的码率
改变码率后, 视频的播放质量和大小会有显著变化。其参数为-b:v 其中:v的意思就是特指改变视频的码率, 而不是音频的码率。
比如网上常用的2.1M的码率和1.5M的码率, 我们想把一个视频码率限定为1.5M怎么办?
ffmpeg -i 原片.mp4 -b:v 1.5M 目标文件名.mp4
ffmpeg改变fps帧率
所谓的fps就是frame per second多少多少帧画面每秒。如果大家接触过电影基本原理就知道,其实视频画面就是由多张快速变换的静态图片叠上去的,帧率越低,画面流畅性越低,但是文件会被压缩的很小。
这里需要用到参数-r后面紧跟着一个值, 例如我想把某视频改成25帧
ffmpeg -i 原片.mp4 -r 25 目标文件名.mp4
提取音频轨道信息
比如我有一个“晓松奇谈”,可是我不想看到他的脸,我只想听声音, 地铁上可以听,咋办?
ffmpeg -i 说说国内的假洋鬼子.mp4 -acodec copy -vn output.aac
上面的命令,默认mp4的audio codec是aac,如果不确定,咱可以暴力一点,不管什么音频,都转为最常见的aac。
ffmpeg -i 奇谭怪论均为博人眼球.mp4 -acodec aac -vn output.aac
单独提取视频
把某个视频文件中的视频提取出来,不要声音
ffmpeg -i input.mp4 -vcodec copy -an output.mp4
ffmpeg的视频剪切能力
经常要测试视频,但是只需要测几秒钟,可是视频却有几个G?这个时候有人会说final cut pro先导进去如何如何,其实你用命令行指定了时间长度就可以切的。
下面的命令,就可以从时间为00:00:15开始,截取5秒视频。
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4
-ss表示开始切割的时间,-t表示要切多少。上面就是从开始,切5秒钟出来。
使用ffmpeg 将多个MP4 文件合并成一个大的MP4文件?
不妨试一下ffmpeg + ts
这个的思路是先将 mp4 转化为同样编码形式的 ts 流,因为 ts流是可以 concate 的,先把 mp4 封装成 ts ,然后 concate ts 流, 最后再把 ts 流转化为 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 copy -vcodec copy -absf aac_adtstoasc output.mp4