注:先cd到文件所在地文件夹也是可以的,直接使用文件名
1.列出ffmpeg支持的所有格式:
ffmpeg -formats
2.剪切一段媒体文件,可以使音频或者视频文件:
ffmpeg -i /Users/xiexianbin/Desktop/20180925195840.mp4 -ss 00:00:10.0 -codec copy -t 20 /Users/xiexianbin/Desktop/20180925195840_cut.mp4
表示将文件20180925195840.mp4从第10秒开始剪切20秒的时间,
输出到文件20180925195840_cut.mp4。
其中-ss指定偏移时间,-t指定时长
3.将一个媒体文件切割成多个媒体文件:
ffmpeg -i /Users/xiexianbin/Desktop/20180925195840.mp4 -t 00:00:20 -c copy /Users/xiexianbin/Desktop/20180925195840_part1.mp4 -ss 00:00:20 -codec copy /Users/xiexianbin/Desktop/20180925195840_part2.mp4
表示拷贝文件20180925195840.mp4前20秒存储为20180925195840_part1.mp4,
从20秒开始拷贝,存储为20180925195840_part2.mp4
4.提取一个视频文件中的音频文件:
ffmpeg -i /Users/xiexianbin/Desktop/20180925195840.mp4 -vn -acodec copy /Users/xiexianbin/Desktop/20180925195840_audio.m4a
提取为aac格式:(以下都是可以的)
ffmpeg -i 20180630151652.mp4 -vn -codec copy -bsf:a aac_adtstoasc 20180630151652.aac
ffmpeg -i 20180630151652.mp4 -vn -codec libfdk_aac -ar 64000 -ac 1 20180630151652_aduio_aac.aac
ffmpeg -i 20180630151652.mp4 -vn -codec libfdk_aac 20180630151652_aduio_aac.aac
5.提取一个视频文件中的视频文件:
ffmpeg -i /Users/xiexianbin/Desktop/20180925195840.mp4 -an -vcodec copy /Users/xiexianbin/Desktop/20180925195840_video.mp4
6.从MP4文件中抽取视频流导出为裸H264数据:
1),视频数据使用h264_mp4toannexb这个bitstream filter来转换为原始的H264数据
2),实测加不加-an结果都是一样的
以下几种都是可以的
ffmpeg -i /Users/xxb/Desktop/20180630151652.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 /Users/xxb/Desktop/20180630151652.h264
ffmpeg -i /Users/xxb/Desktop/20180630151652.mp4 -vcodec copy -bsf: h264_mp4toannexb -f h264 /Users/xxb/Desktop/20180630151652.h264
ffmpeg -i /Users/xxb/Desktop/20180630151652.mp4 -an -codec copy -bsf:v h264_mp4toannexb -f h264 /Users/xxb/Desktop/20180630151652.h264
ffmpeg -i /Users/xxb/Desktop/20180630151652.mp4 -an -codec copy -bsf: h264_mp4toannexb /Users/xxb/Desktop/20180630151652.h264
7.使用AAC音频数据和H264视频数据生成MP4文件:
ffmpeg -i 20180630151652.aac -i 20180630151652.h264 -acodec copy -bsf:a aac_adtstoasc -vcodec copy -f mp4 20180630151652New.mp4
注意:使用上面生成的aac和h264文件生成新的mp4文件,视频播放速度会变快,暂时不知道怎么解决,终端的警告:
8.对音频文件的编码格式做转换:
mp3转aac:
ffmpeg -i 胡彦斌为你我受冷风吹.mp3 -acodec libfdk_aac 胡彦斌为你我受冷风吹.aac
如果出现报错:Unknown encoder 'libfdk_aac',安装fdk_aac库,
参考这篇文章中安装所需库的方法:https://www.jianshu.com/p/d1ed7b860f1b
9_1.从WAV音频文件中导出PCM裸数据:
ffmpeg -i 周杰伦稻香.wav -acodec pcm_s16le -f s16le 周杰伦稻香.pcm
这样就可以导出用16个bit来表示一个sample的PCM数据了,
并且每个sample的字节排列顺序都是小尾端表示的格式,
声道数和采样率使用的都是原始WAV文件的声道数和采样率
9_2.PCM数据转WAV:
ffmpeg -f s16le -ar 44100 -ac 2 -acodec pcm_s16le -i 周杰伦稻香.pcm 周杰伦稻香pcm2wav.wav
9_3.PCM数据转MP3:
ffmpeg -f s16le -ar 44100 -ac 2 -acodec pcm_s16le -i 周杰伦稻香.pcm 周杰伦稻香pcm2mp3.mp3
10.重新编码视频文件,复制音频流,同时封装到MP4格式的文件中:
ffmpeg -i testFlvVideo.flv -vcodec libx264 -acodec copy testFlvVideo.mp4
11.将一个MP4格式的视频转换成gif格式的动图:
ffmpeg -i 20180630151652.mp4 -vf scale=400:-1 -ss 00:00:05 -t 5 -r 10 20180630151652.gif
宽高比例不变,宽度改为400,帧率改为10,从第5秒开始,持续5秒的时间,生成gif
12.将一个视频的画面部分生成图片,比如要分析一个视频里面的每一帧都是什么内容的时候:
ffmpeg -i 20180630151652.mp4 -r 0.25 ./fpsPng/frames_%04d.png
每4秒截取一帧视频画面生成一张图片,生成的图片从frames_0001.png开始一直递增下去
13.使用一组图片生成一个gif:
ffmpeg -i ./fpsPng/frames_%04d.png -r 5 fpsPng.gif
14.使用音量效果器,改变一个音频媒体文件中的音量:
ffmpeg -i 周杰伦稻香.wav -af 'volume=0.5' 周杰伦稻香volume0.5.wav
15.淡入效果器的使用:
ffmpeg -i 周杰伦稻香.wav -filter_complex afade=t=in:ss=0:d=5 周杰伦稻香fadeIn.wav
从第0秒开始,持续5秒,淡如效果
16:淡出效果器的使用:
ffmpeg -i 周杰伦稻香.wav -filter_complex afade=t=out:st=215:d=8 周杰伦稻香fadeOut.wav
从第215秒开始,持续8秒,淡出效果
17:混音(将多路声音进行合并)
ffmpeg -i 周杰伦稻香.wav -i 胡彦斌为你我受冷风吹.mp3 -filter_complex amix=inputs=2:duration=shortest mixMusic.wav
将 周杰伦稻香.wav 和 胡彦斌为你我受冷风吹.mp3 两个文件进行混音,两个音频文件的时间较短的那个时间作为输出文件的时间长度
注:如果要用两个音频文件的时间长度较长的那个作为输出文件的时间长度shortest改成longest
18:对声音进行变速但不变调效果器的使用:
ffmpeg -i 胡彦斌为你我受冷风吹.mp3 -filter_complex atempo=0.5 胡彦斌为你我受冷风吹atempo0.5.mp3
将 胡彦斌为你我受冷风吹.mp3按照0.5倍的速度进行处理,生成 胡彦斌为你我受冷风吹atempo0.5.mp3,输出文件的时长变为原来的2倍,但是音高是不变调,这就是大家常说的变速不变调
19_1:为视频添加水印:
ffmpeg -i 20180630151652.mp4 -vf "movie=china.png[watermark];[in][watermark] overlay=10:10[out]" 20180630151652Chian.mp4
或者
ffmpeg -i 20180630151652.mp4 -i china.png -filter_complex overlay 20180630151652_withLogo.mp4
19_2:去掉视频水印:
ffmpeg -i 20180630151652_withLogo.mp4 -vf delogo=x=72:y=32:w=168:h=86:show=1 20180630151652_withoutLogo.mp4
20:视频提亮效果器的使用:
ffmpeg -i testFlvVideo\(没声音\).flv -c:v libx264 -b:v 800k -c:a libfdk_aac -vf eq=brightness=0.25 -f mp4 testFlvVideo_brightness.mp4
提亮参数是brightness,取值范围从-1.0-1.0,默认值是0
21:为视频增加对比度效果:
ffmpeg -i testFlvVideo\(没声音\).flv -c:v libx264 -b:v 800k -c:a libfdk_aac -vf eq=contrast=1.5 -f mp4 testFlvVideo_contrast.mp4
对比度参数是contrast,取值范围从-2.0-2.0,默认1.0
22:视频旋转效果器的使用:
ffmpeg -i 20180630151652.mp4 -vf "transpose=1" -b:v 600k 20180630151652Transpose.mp4
顺时针转90度
23:视频裁剪效果器的使用:
ffmpeg -i 20180630151652.mp4 -an -vf "crop=240:480:120:0" -vcodec libx264 -b:v 600k 20180630151652_crop.mp4
截取视频的尺寸为240*480,距离左边距120,距离上边距0。输出文件的比特率为600kbps
24:将一张RGBA格式表示的数据转换成JPEG格式图片:
ffmpeg -f rawvideo -pix_fmt rgba -s 480*480 -i texture.rgb -f image2 -vcodec mjpeg output.jpg
25:将一张YUV格式表示的数据转换成JPEG格式图片:
ffmpeg -f rawvideo -pix_fmt yuv420p -s 480*480 -i texture.yuv -f image2 -vcodec mjpeg output.jpg
26:将一段视频推送到流媒体服务器上:
ffmpeg -re -i input.mp4 -acodec copy -vcodec copy -f flv rtmp://xxxx
27:将流媒体服务器上的流dump到本地:
ffmpeg -i http://xxx/xxx.flv -acodec copy -vcodec copy -f flv output.flv
28:将两个音频文件以两路流到形式封装到一个文件中,比如在k歌的应用场景中,原唱伴唱实时切换的场景下,可以使用一个文件包含两路流,一路是伴奏流,一路是原唱流:
ffmpeg -i 131.mp3 -i 134.mp3 -map 0:a -c:a:0 libfdk_aac -b:a:0 96k -map 1:a -c:a:1 libfdk_aac -b:a:1 64k -vn -f mp4 output.m4a
第一路音频的编码方式为aac,比特率为96k。第二路音频的编码方式为aac,比特率为64k,取消视频输出,输出的格式为mp4
-map 0:a 代表指定第一个文件的音频
-c:a:0 libfdk_aac 代表第一个文件的音频的编码方式为aac
29:将输入的视频的分辨率改成960*540
ffmpeg -i 20180630151652.mp4 -vf scale=960:-1 20180630151652_scale960.mp4