mac中屏幕录制命令:
-
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 “”
查询结果:
录制命令的截图:
录制完视频的播放命令是:
ffplay -s 1400x900 -pix_fmt uyvy422 out.yuv
截图上红色标出的就是-s 和-pix_fmt 后面数值的来源。 -
ffmpeg -framerate 30 -f avfoundation -i 0 out.mp4
-framerate 限制视频的采集帧率。这个必须要根据提示要求进行设置,如果不设置就会报错。
-f 指定使用 avfoundation 采集数据。
-i 指定视频设备的索引号。
播放命令:
ffplay out.mp4
mac中声音录制命令:
-
ffmpeg -f avfoundation -i :0 out.wav
-f 指定使用 avfoundation 采集数据。
-i 指定从哪儿采集数据,它是一个文件索引号。
: 冒号前面的是视频采集索引号,冒号后面是音频采集索引号
播放声音的命令:
ffplay out.wav -
录制音频裸数据
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库,需要安装该库:
-
git clone git://git.videolan.org/x264.git
-
cd x264
-
./configure --enable-static --enable-share --disable-asm
-
make
-
sudo make install
问题2
Unknown encoder ‘libfdk_aac’
缺少fdk_aac库需要安装该库:
1)git clone git://github.com/mstorsjo/fdk-aac
-
./autogen.sh
-
./configure
-
make
-
make install
安装完libx264和fdk-aac,需要重新编译安装ffmpeg
-
配置ffmpeg时,加上x264和fdk-aac,如:
./configure --enable-version3 --enable-libfdk-aac --enable-nonfree --enable-gpl --enable-libx264 -
make clean
-
make
-
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