# 视频中抽帧存图, -r 每秒产生的帧数(置空则全转), -q:v 2 高质量, -s 宽x高
ffmpeg -i input.avi -r 1 -q:v 2 -s WxH -f image2 pic-%03d.jpeg
# 获取视频的信息
ffmpeg -i input.avi
# 将图片序列合成视频, -r 生成视频的帧, -b 码率 bit单位, -vcodec 编码格式
ffmpeg -f image2 -i pic-%03d.jpeg -vcodec xvid -r 30 -b:v 8000k test.mp4
# 转化视频格式, -acodec 音频编码, -ac 声道数, -ar 声音采样率(选择32、64、96、128),
# -ab 声音比特率(建议160k以上), -vol 音量扩大倍数, 如200%, -threads 设置线程数,对部分格式的编码有效
ffmpeg -threads 4 -i source_video.avi -b:v 8000k -s 320x240 -ab 32 -ar 24000 -acodec aac -vol 200 final_video.mp4
# 图像resize
ffmpeg -i input.jpg -vf scale=320:240 output_320x240.png # fixed aspect ratio
ffmpeg -i input.jpg -vf scale=320:-1 output_320.png # keep aspect ratio
ffmpeg -i input.jpg -vf scale=iw*2:ih input_double_width.png # iw, ih input width and height
ffmpeg -i input.jpg -vf scale=iw*.5:ih*.5 input_half_size.png # 0.5 input width height
ffmpeg -i input.jpg -vf scale=w=320:h=240:force_original_aspect_ratio=decrease output_320.png # keep ratio but given a max box
#每秒抽一帧
time ffmpeg -i ./test.avi -q:v 1 -vf select='not(mod(n,1))',setpts=N/TB -r 1 %08d.jpg
//处理视频M1.mp4, 不需要旋转
ffmpeg -y -i " M1.mp4" -vcodec libx264 -b 1024000 -s 320x180 -acodec copy " M1_cp.mp4"
//处理视频M2.mp4,逆时针旋转90
ffmpeg -y -i " M2.mp4" -vf transpose=2 -vcodec libx264 -b 1024000 -s 320x180 -acodec copy -metadata:s:v:0 rotate=90 " M2_cp.mp4"
//处理视频M3.mp4,旋转180
ffmpeg -y -i " M3.mp4" -vf vflip,hflip -vcodec libx264 -b 1024000 -s 320x180 -acodec copy -metadata:s:v:0 rotate=180 " M3_cp.mp4"
//处理视频M4.mp4,逆时针旋转270(或者顺时针旋转90)
ffmpeg -y -i "M4_cp.mp4" -vf transpose=1 -vcodec libx264 -b 1024000 -s 320x180 -acodec copy -metadata:s:v:0 rotate=270 "M4_cp.mp4"
音视频技术是程序员日常生活中经常用到的,比如转码需求,同事下载的avi视频,电脑上没有播放器可以播放此格式的视频文件,那你就可以帮他把avi转成mp4格式,你两个就可以愉快的观看了;截取视频需求,录制视频后,可能不需要前面3秒和后面5秒,那就需要剪切或者拼接视频;想提取视频中的某一帧画面出来;不想看到视频画面,只想听到里面的声音,那就提取视频中的音频转为mp3;出于某种特殊的需求,你想倒着播放一段视频等等,太多太多了,再比如视频中加GIF,视频中加文字,抖音合拍功能,视频加速播放。上面的这些需求或者是想法,都可以用命令行轻松搞定,FFmpeg的强大,只有你想不到,没有他做不到。下面就列举了一些常用的简单命令,让我们一起看一下吧,另外看完后,最好是动手去实践一番。
视频的合并
下面通过动手实现抖音合拍功能来演示命令行的使用,首先准备好两个文件input1和input2,都是用手机拍摄的,高度相同;
1、两个视频的合并(注意参数hstack代表是横向合并,也就是左右合并,横向合并的形象类比为“川”;如果是竖向合并,也就是上下合并,用参数vstack,竖向或者纵向合并的形象类比为“三”)
ffmpeg?-i input1.mp4 -i input2.mp4 -lavfi hstack output.mp4
注意:经过此命令处理后的视频output.mp4只会保留input1的音频
2、提取视频中的音频并合并音频
ffmpeg -i input1.mp4 -vn -y -acodec copy audio1.m4a
ffmpeg -i input2.mp4 -vn -y -acodec copy audio2.m4a
ffmpeg -i audio1.m4a -i audio2.m4a -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 audio3.mp3
3、把audio3.mp3文件合并到output.mp4中去
? ? ffmpeg -i output.mp4 -i?audio3.mp3?-c:v copy -c:a aac -strict experimental success.mp4
最后我们得到的success.mp4就是合拍视频,包含了两个视频的音频。
?
三个视频合并(input=3表示希望合并的视频的个数)
ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -lavfi hstack=inputs=3 output.mp4
常用参数说明:
命令格式:
? ? ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]
? ? ffmpeg [[options][`-i' input_file]]... {[options] output_file}...
? ? (1) h264: 表示输出的是h264的视频裸流
? ? (2) mp4: 表示输出的是mp4的视频
? ? (3)mpegts: 表示ts视频流
主要参数:
-i 设定输入流
-f 设定输出格式
-ss 开始时间
视频参数:
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器,一般后面加copy表示拷贝
音频参数:
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器,一般后面加copy表示拷贝
-an 不处理音频