Writing by Tor小黑 —-心中藏之,无日忘之
ffmpeg基本配置及常用命令汇总
一、安装
官网:http://ffmpeg.org/ 下载解压缩会产生下列三个文件:
为了方便使用,我们将这三个exe文件放到system32目录下,或者添加系统环境变量,然后通过命令提示符输入命令即可实现自己想要的功能
ffmpeg.exe 进行格式转换
ffplay.exe 可以当作播放器用,能播放各种格式的视频音频
ffprobe.exe 查看音频或视频文件格式详细信息
ffplay.exe -i +文件名 //播放命令
二、常用命令
cls:清空命令行 按住shift鼠标右键打开命令行
ffplay +文件名.后缀直接播放 p健和空格键暂停 按q结束 f健全屏 鼠标右键调整播放位置
ffprobe+文件 查看文件属性
IDM后台下载直播视频
视频编码或码率控制方式:CBR恒定比特率 VBR可变比特率(使用较多)CRF固定质量码率控制方式
MP4封装:H264视频编码+AAC音频编码
OGG封装:Theora视频编码+Vorbis音频编码 开源免费
基本功能使用
1.ffmpeg -i 1.mp4 -ss 00:01:00 -to 00:01:10 -vcodec copy -an 2.mp4 截视频,去除背景音
2.ffmpeg -i 1.mp4 -vcodec copy -an 2.mp4 加上-an是静音播放,去除背景音
3.ffmpeg -i 1.mp4 -acodec copy -vn 2.mp3 提取视频中音频
4.ffmpeg -i 1.mp3 -ss 00:01:00 -to 00:01:10 -acodec copy 2.mp3 截取一段音频
5.ffmpeg -i 1.mp3 -ss 00:01:00 -t 10 -acodec copy 2.mp3截取10秒音频(时长自己指定)
6.ffmpeg -i 1.mp4 -ss 00:01:00 -to 00:01:10 -c copy 2.mp4 截取视频(时长自己指定)
7.ffmpeg -ss 00:01:00 -i 1.mp4 -to 00:01:10 -c copy -copyts 2.mp4 加上-copyts参数加快截取视频效率
8.ffmpeg -i 1.mp4 -ss 00:01:00 -vfranes 1 img.jpg 在视屏指定时间处截图
9.ffmpeg -i 1.mp4 -i 2.mp3 -c copy out.mp4 视频音频合并
10.ffmpeg -i 1.mp4 -i logo.png -filter_complex "overlay=100:80" out.mp4 给视频添加水印
11.ffmpeg -i 1.mp4 -ss 7.5 -to 8.5 -s 640x320 -r 15 out.gif 输出动图(缩放大小、降低帧率)
12.ffmpeg -f gdigrab -i desktop rec.mp4录制屏幕(无声)
1、去除视频水印:
1.用画图工具,打开视频的截图,计算水印的位置
计算得到,我的视频水印坐标为:50,640. 水印的宽高为:180,60.
2.执行命令 :/usr/bin/ffmpeg -i 1.mp4 -vf "delogo=x=50:y=640:w=180:h=60:show=0" -c:a copy 2.mp4
生成的2.mp4为去掉水印的视频。
show=0水印位置没有边框,show=1水印位置是一个绿色框覆盖
2、裁掉视频字幕
ffmpeg -i in.mp4 -vf crop='1280:720:0:0' -acodec copy out.mp4
其中crop常用的4个参数分别用:隔开,w,h,x,y,分别是裁剪的宽高和裁剪的位置。
视频裁剪使用crop视频滤镜,它可以把视频从指定的x、y位置裁剪成指定的w、h。坐标系是基于左上点开始的。
3、改变视频原始尺寸:
ffmpeg -i input.mp4 -s 320x240 output.mp4
320x240即为输出视频宽高比
4、gif转化为视频
ffmpeg -f gif -i test.gif test.mp4
转化高质量gif 修改比特率
ffmpeg -i test.mp4 - b:v 2048k test.gif
5、截取视频前3秒 并转化为gif
ffmpeg -ss 00:00:01 -t 3 -i C:\Users\Administrator\Desktop\9.mp4 -vf crop=iw:ih*2/3 -s 320x240 -r 7 C:\Users\Administrator\Desktop\8.gif
提示:
1、-ss 00:00:01表示从视频第一秒开始截取
2、- t 表示截图3秒钟的视频
3、-vf crop=iw:ih*2/3 表示截取视频的部分区域,其中宽为视频宽度,高为原视频的2/3
4、-r 7 表示每秒帧率为7帧
5、最后直接加上要生成的gif的路径就会把截取好的视频输出为gif了。
6、每隔一秒钟截取一帧图片(视频转图片)
ffmpeg -i input.mp4 -ss 00:00:00 -t 10 -f image2 -vf fps=fps=1 .\img\%02d.png
提示:
1、-i 后面跟输入文件路径
2、-ss 后面跟开始截图的时间 -t 表示截取的视频长度为10s
3、-vf fps=fps=1 表示截图频率为每秒1帧(和-r 1的作用是一样的,所以可以去掉r 1)
4、-f image2表示输入或输出文件的格式是image2格式,f是format格式的意思
5、需要在当前文件夹下新建一个img文件夹,用来存储图片
7、单张图片合成视频
单张图片合成视频,这里需要用到-loop 1 开启循环,和-t 10 设置为10秒
ffmpeg -r 1 -f image2 -loop 1 -i 1.png -t 10 out.mp4
8、不同编码类型的多段视频合成
先将 mp4 转化为同样编码形式的 ts 流,因为 ts流是可以 concate 的,先把 mp4 封装成 ts ,然后 concate ts 流, 最后再把 ts 流转化为 mp4。
1.ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
2.ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
3.ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
9、多段视频合成
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
1、新建filelist.txt文本文档文件
里面写入要连接的视频,格式为:
file 12.mp4
file 33.mp4
file 24.mp4
2、为了防止出现“Unsafe file name 'D:\delphisr\腾讯下载地址解析子串\k0028qzpkdl.321002.1.ts'filelist.txt: Operation not permitted” 必须在命令中加入“-safe 0”
10、视频旋转
ffmpeg -i input.mp4 -vf "transpose=2" output.mp4
-vf表示过滤器,后边""中的内容为过滤条件,此时transpose表示旋转
旋转参数:0,1,2,3分别表示顺时针并左右翻转,顺时针,逆时针,逆时针并左右翻转
11、多个MP3文件合成一个MP3 文件(连接,一段接一段)
ffmpeg -i "concat:a.mp3|b.mp3|c.mp3" -acodec copy output.mp3
12、多个MP3文件合成一个MP3 文件(混合,同时播放)
ffmpeg -i 124.mp3 -i 123.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f mp3 output.mp3
(-filter_complex ffmpeg滤镜功能,非常强大
amix是混合多个音频到单个音频输出
inputs=2代表是2个音频文件,如果更多则代表对应数字
duration 确定最终输出文件的长度 longest(最长)|shortest(最短)|first(第一个文件)
13、ffmpeg 压制高质量视频
方法1:ffmpeg -i 1.mp4 -vcodec libx264 -pix_fmt yuv420p -crf 16 -acodec copy 2.mp4
-vcodec libx264指定H264编码器
-pix_fmt yuv420p指定像素格式
-crf 16 指定crf固定质量参数
-acodec copy指定音频直接复制
方法2:两遍编码模式 two pass
ffmpeg -i 1.mp4 -vcodec libx264 -pix_fmt yuv420p -vb 6000k -pass 1 -f mp4 NUL
ffmpeg -i 1.mp4 -vcodec libx264 -pix_fmt yuv420p -vb 6000k -pass 2 -f mp4 2.mp4
-f mp4指定最终输出文件格式为mp4
14、多张图片合成视频
1、ffmpeg -f image2 -r 1 -i path\%d.jpg -vcodec mpeg4 path\out.mp4
ffmpeg -r 1 -f concat -safe 0 -i path\list.txt -c:v libx264 (-vf fps=25) -pix_fmt yuv420p out.mp4
-vcodec h264 -r 30 -t 10 -b 16000000 output.mp4
ffmpeg -r 1 -i %d.jpg -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4
图片转视频:ffmpeg -framerate 1 -i %03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
ffmpeg -r 25 -loop 1 -i xinjinping.jpg -pix_fmt yuv420p -vcodec libx264 -b:v 600k -r:v 25 -preset medium -crf 30 -s 720x576 -vframes 250 -r 25 -t 10 a.mp4
2、ffmpeg -f image2 -i /images/%d.jpg -vcodec libx264 -r 25 -b 200k test.mp4
ffmpeg -f image2 -i %d.jpg -vcodec libx264 -r 1 -b 200k test.mp4(1)-r 25 表示每秒播放25帧(2)-b 200k 指定码率为200k
3、ffmpeg -threads2 -y -r 10 -i /tmpdir/image%04d.jpg -i audio.mp3 -absf aac_adtstoasc output.mp4
参数的解释含义:
-threads 2 以两个线程进行运行, 加快处理的速度。
-y 对输出文件进行覆盖
-r 10 fps设置为10帧/秒(不同位置有不同含义,后面再解释)
-i /tmpdir/image%04d.jpg 输入图片文件,图片文件保存为 image0001.jpg image0002.jpg ….
-i audio.mp3 输入的音频文件
-absf aac_adtstoasc 将结果的音频格式转为faac格式时需要这个选项。将音频格式转为faac是因为在iphone上某些音频格式的视频无法播放,例如mp3. 但faac格式的音频的视频在iphone上可以播放。-absf 的意思是设置一个bitstream filter进行某些转换。可以用ffmpeg -bsfs 查看所有支持的bitstream filter。 bitstream filter和 aac_adtstoasc的具体含义我也说不上。但是如果不用这个选项又会导致转换失败。