mac ffmpeg 中的录制命令和分解与复用命令

mac中屏幕录制命令:

  1. ffmpeg -f avfoundation -i 1 -r 30 out.yuv
    -f 指定使用 avfoundation 采集数据。
    -i 指定从哪儿采集数据,它是一个文件索引号。在我的MAC上,1代表桌面。
    -r 指定帧率。按ffmpeg官方文档说-r与-framerate作用相同,但实际测试时发现不同。-framerate 用于限制输入,而-r用于限制输出。
    可以使用下面的命令查看mac上有哪些设备:
    ffmpeg -f avfoundation -list_devices true -i “”
    查询结果:
    在这里插入图片描述
    录制命令的截图:
    mac ffmpeg 中的录制命令和分解与复用命令_第1张图片
    录制完视频的播放命令是:
    ffplay -s 1400x900 -pix_fmt uyvy422 out.yuv
    截图上红色标出的就是-s 和-pix_fmt 后面数值的来源。

  2. ffmpeg -framerate 30 -f avfoundation -i 0 out.mp4
    -framerate 限制视频的采集帧率。这个必须要根据提示要求进行设置,如果不设置就会报错。
    -f 指定使用 avfoundation 采集数据。
    -i 指定视频设备的索引号。
    播放命令:
    ffplay out.mp4

mac中声音录制命令:

  1. ffmpeg -f avfoundation -i :0 out.wav
    -f 指定使用 avfoundation 采集数据。
    -i 指定从哪儿采集数据,它是一个文件索引号。
    : 冒号前面的是视频采集索引号,冒号后面是音频采集索引号
    播放声音的命令:
    ffplay out.wav

  2. 录制音频裸数据
    ffmpeg -f avfoundation -i :0 -ar 44100 -f s16le out.pcm

mac录制视频与声音:

在运行这个命令之前先检查下面的问题1和问题2所需要的库是否安装,如果没有安装,先安装下面的两个库,然后重新编译ffmpeg,免得浪费时间

第一种录制声音和视频的命令

ffmpeg -f avfoundation -i 1:0 -r 29.97 -c:v libx264 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k out.flv
-i 1:0 冒号前面的 “1” 代表的屏幕索引号。冒号后面的"0"代表的声音索相号。
-c:v 与参数 -vcodec 一样,表示视频编码器。c 是 codec 的缩写,v 是video的缩写。
-crf 是 x264 的参数。 0 表式无损压缩。
-c:a 与参数 -acodec 一样,表示音频编码器。
-profile 是 fdk_aac 的参数。 aac_he_v2 表式使用 AAC_HE v2 压缩数据。
-b:a 指定音频码率。 b 是 bitrate的缩写, a是 audio的缩与。

问题1

Unknown encoder ‘libx264’

即,缺少libx264库,需要安装该库:

  1. git clone git://git.videolan.org/x264.git

  2. cd x264

  3. ./configure --enable-static --enable-share --disable-asm

  4. make

  5. sudo make install

问题2

Unknown encoder ‘libfdk_aac’
缺少fdk_aac库需要安装该库:
1)git clone git://github.com/mstorsjo/fdk-aac

  1. ./autogen.sh

  2. ./configure

  3. make

  4. make install

安装完libx264和fdk-aac,需要重新编译安装ffmpeg

  1. 配置ffmpeg时,加上x264和fdk-aac,如:
    ./configure --enable-version3 --enable-libfdk-aac --enable-nonfree --enable-gpl --enable-libx264

  2. make clean

  3. make

  4. make install(或者 sudo make install)

ffmpeg -framerate 30 -vsync 2 -f avfoundation -i 0:0 out.mp4
(这个命令没有坑)

分解与复用

流拷贝是通过将 copy 参数提供给-codec选项来选择流的模式。它使得ffmpeg省略了指定流的解码和编码步骤,所以它只能进行多路分解和多路复用。 这对于更改容器格式或修改容器级元数据很有用。 在这种情况下,流程如图:

 _______              ______________            ________
|       |            |              |          |        |
| input |  demuxer   | encoded data |  muxer   | output |
| file  | ---------> | packets      | -------> | file   |
|_______|            |______________|          |________|

由于没有解码或编码,速度非常快,没有质量损失。 但是,由于许多因素,在某些情况下可能无法正常工作。 应用过滤器显然也是不可能的,因为过滤器处理未压缩的数据。

抽取音频流

ffmpeg -i input.mp4 -acodec copy -vn out.aac
acodec: 指定音频编码器,copy 指明只拷贝,不做编解码。
vn: v 代表视频,n 代表 no 也就是无视频的意思。
抽取视频流

ffmpeg -i input.mp4 -vcodec copy -an out.h264
vcodec: 指定视频编码器,copy 指明只拷贝,不做编解码。
an: a 代表视频,n 代表 no 也就是无音频的意思。
转格式

ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
上面的命令表式的是音频、视频都直接 copy,只是将 mp4 的封装格式转成了flv。

音视频合并

ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out.mp4

参考资料

ffmpeg 官方文档
慕课网手记

你可能感兴趣的:(ffmpeg)