linux下安装ffmpeg:
参考: https://www.jianshu.com/p/905df3d9e753
ffmpeg常用参数说明:
主要参数:
-i 输入文件
-ss 开始时间
-t 持续时间
视频参数:
-b 视频码率
-pix_fmt raw data的格式
-r 视频帧率
-s 视频尺寸(1920x1080)
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 视频编解码器
音频参数:
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频
ffmpeg常用命令:
264 to yuv:
ffmpeg -i input_file.264 -s 1280x720 -pix_fmt yuv420p -vframes 100 output.yuv
-vframes 指定解码帧数
yuv to 264:
ffmpeg -i input_file.yuv -s 1280x720 -vcodec h264 output_file.264
yuv to 264 并且控制I帧间隔和B帧:
ffmpeg -i input_file -vcodec h264 -bf 1 -g 25 -s 854x480 -an -f m4v output_file
-bf 控制B帧数目,-g 控制I帧间隔, -f 控制文件格式
音频格式改变:
ffmpeg -i input_file -vcodec h264 -b:v 10M -b:a 128K output_file
-b:v 10M 表示视频码率为10Mbps
-b:a 128K 表示音频码率为 128Kbps
从视频中提取图像保存为图片:
ffmpeg -i input.mp4 -r 1 -f image2 image-%3d.jpeg
-r 表示提取图像的频率
-f 表示输出格式
%3d 表示文件命名方式(也即生成的图片名为 image-001.jpeg, image-002.jpeg, …, image-999.jpeg)。
裁剪视频(音频相同):
ffmpeg -ss 00:00:31.300 -t 00:00:20 -i VID_20191113_205651.mp4 -vcodec copy -acodec copy output.mp4
-ss 开始时间
-t 持续时间
-i 输入视频
合并视频:
ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc contact.mp4
把1.mp4和2.mp4合成为一个contact.mp4,首先把两个mp4均转换为ts,然后再把两个ts拼接成一个mp4
把图片合成为视频
ffmpeg -loop 1 -f image2 -i /tmpdir/image%04d.jpg -vcodec libx264 -r 24 -t 1 test.mp4
-loop 是否循环写入
/tmpdir/image%04d.jpg 输入图片文件,图片文件保存为 image0001.jpg image0002.jpg …
-vcodec 选择编码方式
-r 视频帧率
-t 视频时长(s)
音视频分离之抽取音频:
ffmpeg -i 3.mp4 -vn -y -acodec copy 3.aac
ffmpeg -i 3.mp4 -vn -y -acodec copy 3.m4a
音视频分离之抽取视频:
ffmpeg -i input.mp4 -vcodec copy -an video.mp4
音视频合并:
ffmpeg -i video.avi -i audio.mp3 -vcodec copy -acodec copy output.avi
指定尺寸、编码格式、数据格式重新编码:
ffmpeg -i cut-insert.mp4 -vf scale=1920:1080 -pix_fmt yuv420p -vcodec libx264 cut-3.mp4
将视频指定部分静音:
ffmpeg -i video.mp4 -af "volume=enable='between(t,5,10)':volume=0, volume=enable='between(t,15,20)':volume=0" out.mp4
上面就是把视频5-10s和15-20s静音
生成静音音频流:
ffmpeg -f lavfi -t 10 -i anullsrc test.aac -y
查看ffmpeg支持的所有yuv格式:
ffmpeg -pix_fmts
yuv缩放命令:
ffmpeg -s 1920x1080 -r 25 -i input.yuv -vf scale=960:540 -c:v rawvideo -pix_fmt yuv420p out.yuv
yuv裁剪功能:
ffmpeg -s 1920x1080 -i input.yuv -c:v rawvideo -filter:v select="gt(n\, -1)" -vframes 30 out30.yuv
or
ffmpeg -s 1920x1080 -i input.yuv -c:v rawvideo -filter:v select="between(n\, 10\, 50)" out30.yuv
// 根据帧数裁剪,裁剪第10帧到第50帧
ffmpeg -s 1920x1080 -i input.yuv -c:v rawvideo -filter:v select="between(t\, 10\, 50)" out30.yuv
// 根据时间戳裁剪,裁剪第10s到第50s
or
ffmpeg -r 1 -ss 8 -i input.yuv -vcodec copy -vframes 30 output.yuv
// 从第8帧开始一共裁剪30帧
视频裁剪功能:
ffmpeg -i VID_20191211_140343.mp4 -vf crop=100:100:0:0 output.mp4
crop=height:width:x:y
其中height:width表示要裁剪的视频尺寸,x:y表示裁剪的视频左上角的位置。
视频播放速率调整(视频快进、慢放等):
ffmpeg -i input.mp4 -an -filter:v "setpts=0.5*PTS" output.mp4
注意:视频调整的速度倍率范围为:[0.25, 4]
对视频进行加速时,如果不想丢帧,可以用-r 参数指定输出视频FPS,方法如下:
ffmpeg -i input.mp4 -an -r 60 -filter:v "setpts=2.0*PTS" output.mp4
上面的方法是只调整video的速度,若还需调整audio速度,方法如下:
ffmpeg -i input.mkv -filter:a "atempo=2.0" -vn output.mkv
注意:倍率调整范围为[0.5, 2.0]
如果需要调整4倍可采用以下方法:
ffmpeg -i input.mkv -filter:a "atempo=2.0,atempo=2.0" -vn output.mkv
如果需要同时调整,可以采用如下的方式来实现:
ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mkv
视频旋转功能:
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
其中transpose为旋转角度
0:逆时针旋转90度并垂直翻转,这是默认值。
1:顺时针旋转90度。
2:逆时针旋转90度。
3:顺时针旋转90度并垂直翻转。
要将视频顺时针旋转180度,你需要如下两次提及转置参数:
ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" output.mp4
上面的命令将重新编码给定视频文件的音频和视频部分,如果你不想重新编码视频并仅更改元数据中的旋转度,请改用以下命令:
ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4
更好的是,你可以将输入文件的所有全局元数据(例如日期、相机详细信息)复制到输出文件,如下所示:
ffmpeg -i input.mp4 -map_metadata 0 -metadata:s:v rotate="90" -codec copy output.mp4
给视频加黑边:
ffmpeg -i video-crop.mp4 -vf 'scale=2340:900,pad=2340:1080:0:0:black' video-final.mp4
其中scale=2340:900表示将原视频缩放到2340*900
pad=2340:1080:0:0:black 表示最终视频的尺寸是2340*1080,然后把video-crop.mp4放在[0,0]坐标的位置,其他地方用黑色填充。
视频和图片转换成黑白颜色:
//把图片转换为黑白的
ffmpeg -i sample.png -vf hue=s=0 output.png
//把视频转换为黑白的
ffmpeg -i julin_5s.mp4 -vf hue=s=0 -c:a copy julin_monochrome.mp4
官网翻译文档:https://www.bookstack.cn/read/other-doc-cn-ffmpeg/ffmpeg-doc-cn-40.md
官方ffmpeg命令行参考文档:http://ffmpeg.org/ffmpeg.html