linux下编译安装ffmpeg
安装步骤
1. 安装yasm
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix=/usr/local
make
make install
2. 安装ffmpeg
wget http://ffmpeg.org/releases/ffmpeg-3.4.1.tar.bz2
tar -xjvf ffmpeg-3.4.1.tar.bz2
cd ffmpeg-3.4.1
./configure --enable-shared --enable-gpl --prefix=/usr/local/ffmpeg
make 
make install

echo "/usr/local/ffmpeg/lib" >> /etc/ld.so.conf
ldconfig
说明:

--enable-gpl,如果不想使用delogo等滤镜,可以不加。
为方便使用,可以将/usr/local/ffmpeg/bin加入环境变量PATH中
检查安装
ffmpeg -version
得到类似如下输出

ffmpeg version 3.4.1 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-11)
configuration: --enable-shared --enable-gpl --prefix=/usr/local/ffmpeg
libavutil      55. 78.100 / 55. 78.100
libavcodec     57.107.100 / 57.107.100
libavformat    57. 83.100 / 57. 83.100
libavdevice    57. 10.100 / 57. 10.100
libavfilter     6.107.100 /  6.107.100
libswscale      4.  8.100 /  4.  8.100
libswresample   2.  9.100 /  2.  9.100
libpostproc    54.  7.100 / 54.  7.100
如果要查看支持的滤镜,可以使用如下命令

ffmpeg -filters


ffmpeg -i 文件名
获取到文件信息
-Duration 的数字为1321kb/s 为视频的比特率
-Stream 为视频的分辨率

添加水印
ffmpeg -i logo.mp4 -acodec copy -b:v 1321k -vf "movie=logo.png[watermark];[in][watermark]overlay=20:20" output.mp4
-i 要处理的视频文件
-acodec 保持音频不变
-b:v 设置视频比特率 默认为200k
-vf "" 水印处理参数 logo.png是水印图片 voerlay 为水印图片到左上角的距离

添加水印二
  ffmpeg -i E:\xx.mp4   -i E:\logo.png  -filter_complex "[0:v]overlay=5:5 1[out]" -map "[out]" -movflags faststart E:\out.mp4 -y

-i xx.mp4 表示要进行水印添加处理的视频
E:\logo.png 添加的水印图片
重要的是overlay=后面的部分,第一个参数表示水印距离视频左边的距离,第二个参数表示水印距离视频上边的距离,第三个参数 为1,表示支持透明水印。使用透明的png图片进行视频编码后,成功获得带透明水印的视频,并且画质也比较好。
E:\out.mp4 处理后的视频
-y 覆盖生成的视频

去除水印
ffmpeg -i logo1.mp4 -b:v 1321k -vf delogo=x=50:y=30:w=180:h=100  delogo.mp4
-i 要处理的视频文件
-b:v 设置视频比特率 默认为200k
delogo 为滤镜
x y 为水印图片到左上角的距离
w h 为水印图片自身的宽和高


去除水印二
ffmpeg -i logo.mp4 -filter_complex "delogo=x=100:y=100:w=100:h=100:show=1" delogo.mp4


第一步:先将avi视频转成mp4
下面把各参数意思大概讲讲,大概了解意思即可,不再此展开流媒体专业知识的讲解。
-c:v 视频编码为x264 ,x264编码是H264的一种开源编码格式。
-s 设置分辨率
-pix_fmt yuv420p:设置像素采样方式,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0,它的作用是
根据采样方式来从码流中还原每个像素点的YUV(亮度信息与色彩信息)值。
-b 设置码率,-b:a和-b:v分别表示音频的码率和视频的码率,-b表示音频加视频的总码率。码率对一个视频质量有
很大的作用,后边会介绍。
-r:帧率,表示每秒更新图像画面的次数,通常大于24肉眼就没有连贯与停顿的感觉了。



第二步:将mp4生成m3u8
ffmpeg ‐i lucene.mp4 ‐hls_time 10 ‐hls_list_size 0 ‐hls_segment_filename
./hls/lucene_%05d.ts ./hls/lucene.m3u8


-hls_time 设置每片的长度,单位为秒
-hls_list_size n: 保存的分片的数量,设置为0表示保存所有分片
-hls_segment_filename :段文件的名称,%05d表示5位数字
生成的效果是:将lucene.mp4视频文件每10秒生成一个ts文件,最后生成一个m3u8文件,m3u8文件是ts的索引
文件。



2.2.1 码率的设置
码率又叫比特率即每秒传输的bit数,单位为bps(Bit Per Second),码率越大传送数据的速度越快。
码率的计算公式是:文件大小(转成bit)/ 时长(秒)/1024 = kbps 即每秒传输千位数
例如一个1M的视频,它的时长是10s,它的码率等于
码率设置到多少才能达到最好,通过根据个人的经验或参考一些视频网台给出的参考,下图是优酷对码率的要求:
ffmpeg ‐i lucene.mp4 ‐hls_time 10 ‐hls_list_size 0 ‐hls_segment_filename
./hls/lucene_%05d.ts ./hls/lucene.m3u8
1*1024*1024*8/10/1024 = 819Kbps



对于24帧每秒的视频 128帧是第5秒的第四帧ffmepg命令./ffmpeg -i logo.mp4 -threads 1 -ss 00:00:05.167  -f image2 -r 1 -t 1  a.jpg
-i 指定目标
-threads 指定线程数
-y 指定覆盖源文件
-ss 指定截取的时间 可以int格式 也可以hh:mm:ss[.xxx]格式
-f 指定图片格式
-r 指定每秒截取的帧数 附注 没有-r会截取25张图片,此时-ss指定时间不指定毫秒时,会截取该秒内所有帧,否则会截取同一毫秒的25张图片