本文只列出自己工作中所使用到的视频处理相关指令,若想更全面的了解,可查询官网:http://ffmpeg.org/ffmpeg-all.html
1、视频分割
1)快速分割,但分割时间不准确
ffmpeg -ss $beginTime -t $lengthTime -accurate_seek -i $srcFileName -codec copy -avoid_negative_ts 1 $dstFileName
2)准确分割,但因分割时需要编解码,导致分割速度慢
ffmpeg -ss $beginTime -t $lengthTime -i $srcFileName -c:v libx264 -c:a aac -strict experimental -b:a 98k $dstFileName
其中:$beginTime——分割起始时间; $lengthTime——分割视频时间长度;$srcFileName——原始视频文件;$dstFileName——分割生成的目标视频文件名
2、视频拼接
ffmpeg -f concat -safe 0 -i $srcFileList -c copy $dstFileName > /dev/null 2>&1
其中:$srcFileList——需要拼接的原始视频文件列表;$dstFileName——拼接生成的目标视频文件
3、hls视频流转换为mp4文件
ffmpeg -i $hlsHttpAddr -c copy $dstFileName
其中: $hlsHttpAddr——hls视频流对应的http地址; $dstFileName——目标视频文件
4、视频文件转换生成音频文件
ffmpeg -i $srcFileName -f wav -ar 16000 -ac 1 $dstFileName
其中:$srcFileName——原始视频文件; $dstFileName——生成的音频文件;且生成的音频为单通道
5、给视频添加一个不同颜色大小的背景画布
1) 先生成一个纯色的视频文件,再将原始视频叠加至纯色的视频上
ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
ffmpeg -i main.mp4 -vf 'movie=effect.mp4 [f];[in][f] overlay=0:0 [out]' out.mp4
2)直接叠加视频于纯色画布上
ffmpeg -f lavfi -t 80 -i color=c=red:s=1920x1080 -i SHXERD100805.mp4 -filter_complex "overlay[out]" -map "[out]" output_backgroud.mkv
其中:-t为指定生成视频文件的时长,若不指定则生成视频时长会一直累加,直到退出程序,因而需提前计算出叠加视频的时间,计算视频时长可使用如下命令:
ffmpeg -i $srcFileName 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//
6、在视频上叠加图片,可一次性叠加多个图片
ffmpeg -i input.mp4 -i image1.png -i image2.jpg -filter_complex 'overlay=x=W-w:y=H-h,overlay=x=0:y=0' output.mp4
7、在视频上叠加文字
ffmpeg -i input.mp4 -vf "drawtext=fontfile=simhei.ttf: text='my video':x=10:y=10:fontsize=24:fontcolor=white:shadowy=2" output.mp4
如果需要在一条命令中添加多个文字,可参考如下命令:
ffmpeg -i input.mp4 -vf "drawtext=fontfile='msyh.ttf':text='my video':x=20:y=20:fontsize=40:fontcolor=black@0.2,drawtext=fontfile='msyh.ttf':text='我的视频':x=100:y=100:fontsize=40:fontcolor=black@0.8" output.mp4 -y