ffmpeg是一个源于Linux的工具软件,是FLV视频转换器,可以轻易地实现FLV向其它格式avi、asf、 mpeg的转换或者将其它格式转换为flv。
ffmpeg设备相关的操作取决于操作系统,MAC和WIN是不统一的。
相关地址
Yum中最新只能安装2.8版本
安装EPEL Release
因为安装需要使用其他的repo源,所以需要EPEL支持
sudo yum install -y epel-release rpm
安装Nux-Dextop源
# 导入一个Code
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
# 安装nux-dextop 源
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
# 查看repo源是否安装成功
sudo yum repolist
安装ffmpeg
yum list ffmpeg
sudo yum install -y ffmpeg
查看版本
ffmpeg -version
下载列表地址:https://johnvansickle.com/ffmpeg/
下载
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
解压
tar xvJf ffmpeg-release-amd64-static.tar.xz
查看
cd ffmpeg-4.2.1-amd64-static/
./ffmpeg -version
显示信息
ffmpeg version 4.2.1-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2019 the FFmpeg developers built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516 configuration: –enable-gpl –enable-version3 –enable-static –disable-debug –disable-ffplay –disable-indev=sndio –disable-outdev=sndio –cc=gcc-6 –enable-fontconfig –enable-frei0r –enable-gnutls –enable-gmp –enable-libgme –enable-gray –enable-libaom –enable-libfribidi –enable-libass –enable-libvmaf –enable-libfreetype –enable-libmp3lame –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libopenjpeg –enable-librubberband –enable-libsoxr –enable-libspeex –enable-libsrt –enable-libvorbis –enable-libopus –enable-libtheora –enable-libvidstab –enable-libvo-amrwbenc –enable-libvpx –enable-libwebp –enable-libx264 –enable-libx265 –enable-libxml2 –enable-libdav1d –enable-libxvid –enable-libzvbi –enable-libzimg
官方编译的可能没有我们需要的编码器,下面是我们自己编译的方式
安装编译环境
yum install -y automake autoconf libtool gcc gcc-c++
yum install make
安装yasm插件
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar -xvf yasm-1.3.0.tar.gz
cd yasm-1.3.0/
./configure && make && make install
安装nasm
查看nasm的版本
nasm -version
版本低于2.13安装编译x264会报错 版本满足条件可跳过
Found no assembler Minimum version is nasm-2.13
安装nasm
yum list nasm
发现只有2.10.07-7.el7版本 看来只能自己编译了
下载列表地址:https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/
cd ~
wget https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.gz
tar -zxvf nasm-2.14.02.tar.gz
cd nasm-2.14.02
./configure
make && make install
cd ..
安装x264视频编码器
wget https://code.videolan.org/videolan/x264/-/archive/stable/x264-stable.tar.gz
tar -zxvf x264-stable.tar.gz
cd x264-stable
./configure --enable-static --enable-shared
make && make install
cd ..
安装完成后路径
whereis libx264.a
libx264: /usr/local/lib/libx264.a
安装fdk-aac音频编码器
wget https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.5.tar.gz
tar -zxvf fdk-aac-0.1.5.tar.gz
cd fdk-aac-0.1.5
./configure
make && make install
cd ..
安装ffmpeg
查看所有可下载版本
网址:http://www.ffmpeg.org/releases/
wget https://ffmpeg.org/releases/ffmpeg-4.1.3.tar.gz
tar zxvf ffmpeg-4.1.3.tar.gz
cd ffmpeg-4.1.3
./configure --enable-gpl --enable-libx264 --enable-nonfree --enable-libfdk-aac
make && make install
或者下载源码后按照上面步骤安装
yum install git
git clone https://github.com/FFmpeg/FFmpeg.git
安装完成后路径
whereis ffmpeg
ffmpeg: /usr/local/bin/ffmpeg
自定义安装位置
默认不添加–prefix 这相当于
./configure --prefix=/usr/local
安装后的文件就会遍布在/usr/local的子文件夹中
我们可以按照下面写法自定义位置
./configure --prefix=/usr/local/ffmpeg
这样文件的位置就是
/usr/local/ffmpeg/bin/ffmpeg
这时我们运行ffmpeg -version
提示
-bash: /usr/local/bin/ffmpeg: No such file or directory
要么我们在安装时直接设置
./configure --prefix=/usr/local
这样不方便卸载,因为安装生成的文件在多个文件夹中
要么我们配置一下搜索的路径
vi /etc/profile
在开始注释后添加
PATH=$PATH:/usr/local/ffmpeg/bin
保存并立即生效
source /etc/profile
查看版本
ffmpeg -version
卸载
make uninstall
测试ffmpeg
ffmpeg -version
报错:
ffmpeg: error while loading shared libraries: libx264.so.157: cannot open sh
解决方法
vi /etc/ld.so.conf
添加libx264.so所在路径
/usr/local/lib
退出后执行
ldconfig
参数 | 示例 | 适用 | 作用 |
---|---|---|---|
-vcodec-c:v | -vcodec libx264-acodec copy | 视频 | 视频编码-acodec copy 表示适用文件原有编码 录制时无效 用在文件转码时 |
-acodec-c:a | -acodec libmp3lame | 音频 | 音频编码 |
-preset | -preset ultrafast | 视频 | 压缩的预设,决定视频的质量 |
-b:v | -b:v 800k | 视频 | 视频比特率 很重要 影响清晰度 |
-b:a | -b:a 100k | 音频 | 音频比特率 很重要 影响清晰度 |
-pix_fmt | -pix_fmt yuv422p | 视频 | 视频颜色空间 不设置在网页上可能黑屏 |
-r | -r 30 | 视频 | 视频 设置帧频 缺省25 |
-f fmt | -f flv | 通用 | |
-s size | -s 640x320-s 640x? | 视频 | 设置视频输出尺寸 |
ffmpeg -i pingcap-intro-converted.mp4 -b:v 64k -r 20 -c:v libx264 -s 640x320 -strict -2 pingcap.mp4
ffmpeg -ss 00:00:10 -i test1.flv -f image2 -y test1.jpg
ffmpeg -re -i eguid.flv -vcodec copy -acodec copy -f flv -y rtmp://110.3.212.110:1935/live/xiaoming
当然有解决办法
ffmpeg -re -stream_loop -1 -i eguid.flv -vcodec copy -acodec copy -f flv -y rtmp://110.3.212.110:1935/live/xiaoming
加了一个-stream_loop -1
-1为无限循环
ffmpeg -i rtmp://119.3.212.205:1935/live/xiaoming -vcodec h264 -f flv -acodec aac -ac 2 eguid.flv
ffmpeg -i rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov -rtsp_transport tcp -vcodec h264 -acodec aac -f flv rtmp://119.3.212.205:1935/live/xiaoming
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 -y -i test.mp4 -i logo.png -filter_complex "[1]scale=w=480:h=280[s];[0][s]overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10[ov]" -map "[ov]" output.mp4
ffmpeg -list_devices true -f dshow -i dummy
这里获取的设备名称中文是乱码的
我们可以在设备管理器中查看设备的名称
查看摄像头视频
ffplay -f dshow -i video="Integrated Camera"
保存文件
ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -f flv test1.flv
服务器推流
ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -b:v 512k -preset:v ultrafast -f flv rtmp://39.104.23.195:1935/live/xiaoming
保存文件
ffmpeg -f dshow -i video="Integrated Camera":audio="麦克风 (2- High Definition Audio 设备)" -vcodec libx264 -acodec copy -preset:v ultrafast -f flv test3.flv
推流
ffmpeg -f dshow -i video="Integrated Camera":audio="麦克风 (2- High Definition Audio 设备)" -vcodec libx264 -b:v 512k -b:a 16k -r 25 -acodec copy -preset ultrafast -f flv rtmp://39.104.23.195:1935/live/xiaoming
查看
ffplay -f gdigrab -i desktop
保存文件
ffmpeg -f gdigrab -i desktop -framerate 30 -video_size 640x480 -vcodec libx264 -preset ultrafast -f flv test2.flv
服务器推流
ffmpeg -f gdigrab -i desktop -framerate 30 -vcodec libx264 -b:v 512k -preset ultrafast -pix_fmt yuv422p -f flv rtmp://39.104.23.195:1935/live/xiaoming
保存文件
ffmpeg -f gdigrab -i desktop -f dshow -i audio="麦克风 (2- High Definition Audio 设备)" -vcodec libx264 -acodec copy -preset:v ultrafast -f flv test4.flv
推流
ffmpeg -f gdigrab -i desktop -f dshow -i audio="麦克风 (2- High Definition Audio 设备)" -vcodec libx264 -preset ultrafast -b:v 800k -b:a 100k -acodec libmp3lame -pix_fmt yuv422p -f flv rtmp://39.104.23.195:1935/live/xiaoming
首先需要安装一个软件:screen capture recorder
编译好的下载地址是:
http://sourceforge.net/projects/screencapturer/files/
安装完了之后,在命令行执行:
ffmpeg -list_devices true -f dshow -i dummy
就会看到多了两个设备
保存文件
ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="virtual-audio-capturer" -vcodec libx264 -preset:v ultrafast -f flv test5.flv
推流
ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="virtual-audio-capturer" -vcodec libx264 -preset:v ultrafast -pix_fmt yuv422p -f flv rtmp://39.104.23.195:1935/live/xiaoming
用户头像在右下角
ffmpeg -f gdigrab -i desktop -f dshow -i video="Integrated Camera" -f dshow -i audio="麦克风 (2- High Definition Audio 设备)" -c:v libx264 -preset ultrafast -filter_complex overlay=W-w:H-h -acodec libmp3lame -ar 44100 -ac 1 -f flv mytest.flv
头像在右上角并缩放
ffmpeg -y -f gdigrab -i desktop -f dshow -i video="Integrated Camera" -f dshow -i audio="麦克风 (2- High Definition Audio 设备)" -c:v libx264 -preset ultrafast -filter_complex "[1:v]scale=w=200:h=300:force_original_aspect_ratio=decrease[ckout];[0:v][ckout]overlay=x=W-w:y=0" -acodec libmp3lame -ar 44100 -ac 1 -f flv mytest.flv
左上角
-filter_complex overlay=0:0
右上角
-filter_complex overlay=W-w:0
左下角
-filter_complex overlay=0:H-h
右下角
-filter_complex overlay=W-w:H-h
ffmpeg -f dshow -i video="Integrated Camera":audio="麦克风 (2- High Definition Audio 设备)" -vcodec libx264 -acodec libvo_aacenc -preset:v ultrafast -f rtsp rtsp://127.0.0.1/abcd.sdp
设置帧率
ffmpeg -f dshow -i video="USB2.0 Camera":audio="麦克风 (USB2.0 Camera)" -vcodec libx264 -acodec libvo_aacenc -b 1080k -r 20 -preset:v ultrafast -f rtsp rtsp://127.0.0.1/abcd.sdp
MAC上录制摄像头和麦克风都需要申请权限,直接在命令行中获取摄像头和麦克风都会报错,不能推流。 这个折腾了我好长时间才找到原因,网上也没说这种情况的原因,希望看到这个博客的同学别再踩这个坑。
brew install ffmpeg
ffmpeg -f avfoundation -list_devices true -i ""
需要获取录制权限
ffmpeg -y -framerate 30 -f avfoundation -r 30 -i 0 out.mp4
-framerate 限制视频的采集帧率。这个必须要根据提示要求进行设置,如果不设置就会报错。 -f:指定使用使用 avfoundation库(mac系统下) 来录制 -i:指定输入设备 1:设备索引值,1代表屏幕,0代表摄像头,等等 -r:指定帧率为30
flv
ffmpeg -y -framerate 30 -f avfoundation -r 30 -i 0 -f flv test01.flv
播放命令:
ffplay out.mp4
ffmpeg -y -f avfoundation -i "1" -framerate 30 -video_size 640x480 -vcodec libx264 -preset ultrafast -f flv test2.flv
-t 录制时间,单位miao
推流
ffmpeg -f avfoundation -i "1" -vcodec libx264 -preset ultrafast -f flv rtmp://119.3.212.205:1935/live/xiaoming
ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv mytest.flv
或者
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的缩写。
推流
ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://119.3.212.205:1935/live/xiaoming
ffmpeg -f avfoundation -framerate 30 -i "1:0" \
-f avfoundation -framerate 30 -video_size 640x480 -i "0" \
-c:v libx264 -preset ultrafast \
-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv mytest.flv
推流
ffmpeg -f avfoundation -framerate 30 -i "1:0" \
-f avfoundation -framerate 30 -video_size 640x480 -i "0" \
-c:v libx264 -preset ultrafast \
-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://119.3.212.205:1935/live/xiaoming
ffmpeg -f avfoundation -i :0 out.wav
播放声音的命令:
ffplay out.wav
ffmpeg -f avfoundation -i :0 -ar 44100 -f s16le out.pcm