查看视频信息
ffmpeg -i 视频名字
视频名字这里输入前几个字符按 tab 键可以自动补全
返回结果:
红框之内的内容没什么用
编码器 :encoder : Lavf57.25.100
持续时间:Duration: 00:14:20.58, start: 0.000000, bitrate: 381 kb/s
Duration 持续时间,start 开始时间,bitrate比特率
视频流: Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yu
v420p, 1360x768, 182 kb/s, 29.94 fps, 30 tbr, 15360 tbn, 30720 tbc (default)
h264编码格式,avc1封装格式,yuv420p每一帧的格式,1360x768分辨率,182 kb/s 视频比特率,29.94 fps帧数
音频流: Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, flt
p, 191 kb/s (default)
aac 编码格式,mp4a 封装格式,44100 Hz 采样率,stereo 立体声,fltp 浮点型,191 kb/s (default)音频比特率
去除音频
ffmpeg -i 文件名 -an -vcodec copy 文件名.mp4
-an去除音频,-vcodec copy拷贝源数据的视频流到文件名.mp4文件里面
去除视频
ffmpeg -i 文件名 -vn -acodec copy 文件名.mp4
-vn去除音频,-acodec copy拷贝源数据的音频流到文件名.mp4文件里面
保存音频为AAC文件
ffmpeg -i 文件名.mp4 -vn -acodec copy 文件名.aac
改变视频分辨率
ffmpeg -i 文件名.mp4 -vf scale=640:360 文件名.mp4
scale=后面填写的是修改后的分辨率
ffmpeg -i 文件名.mp4 -vf scale=iw*2:ih*2 文件名.mp4
把分辨率变成两倍,也可以*0.5变成二分之一
隐藏无用信息
ffmpeg -i 文件名.mp4 -hide_banner
添加水印
ffmpeg -i 文件名.mp4 -i 水印.png -filter_complex overlay out.mp4
默认左上角,overlay=W-w 是右上角,overlay=0:H-h 是左下角,overlay=W-w:H-h 是右下角
大写的 H 是视频的高度,大写的 W 是视频的宽度,小写的 h 是水印的高度,小写的 w 是水印的宽度。
去除水印
ffmpeg -i 文件名.mp4 -vf delogo=x:y:w:h:show out.mp4
x,y 确定logo的位置坐标
w,h 设置logo的宽高
show 表示是否显示矩形框,默认是 0 不显示,1 是显示
添加文字水印
ffmpeg -i 文件名.mp4 -vf drawtext=text='内容':fontcolor='颜色':fontsize=字号 out.mp4
截取视频
ffmpeg -i 文件名.mp4 -ss 秒 -to 时间 out.mp4
从多少秒开始,截取多长时间的视频
视频转换为gif
ffmpeg -i 文件名.mp4 -ss 10 -t 5 -s 640*320 -r 15 out.mp4
-ss 开始时间
-t 持续时间
-i 后面是源文件
-s 动图分辨率
-r 帧率
ffmpeg -i 文件名.mp4 -vframes 30 out.gif
-vframes 30 视频前三十帧
把视频前三十帧转换为gif
视频压缩之 -crf
ffmpeg -i 文件名.mp4 -c:v libx264 -crf 23 out.mp4
×264 默认值是 23(建议18 - 28)
×265 默认是28(建议24 - 34)
两个的可用值是 0 到 51
值越小编码质量越好,码率越高
其中 0 可以说是无损的,51质量最差
crf 差别为6就会导致文件大小加倍或者减半
视频压缩之 -preset
ffmpeg -i 文件名.mp4 -vocdec libx264 -preset xxx -crt 25 out.mp4
preset 主要影响编码的速度,并不会很大影响输出文件的大小
x264编码算法有下列参数值
ultrafast 编码速度最快压缩率低,生成文件很大
superfa
veryfast
faster
fast
medium x264默认标准
slow
slower
veryslow
placebo 编码速度最慢,压缩率高,生成文件小
xxx 就是填入下列的参数
给视频或图像加上黑边
ffmpeg -i 文件名.mp4 -vf pad=1080:720:0:56:black out.mp4
pad后面参数值依次为:宽,高,x坐标,y坐标,默认是黑边可以不写
56:(720 - 680)/2=56
1080 x 608分辨率变成 1080 x 720分辨率
转格式
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
上面的命令表式的是音频、视频都直接 copy,只是将 mp4 的封装格式转成了flv。
copy是把原来的并不条件
- -i: 输入文件
- -vcodec copy : 视频编码处理方式
- -acodec copy: 音频编码处理方式
音视频合并
ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out.mp4
提取YUV数据
ffmpeg -i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv
ffplay -s (wxh分辨率,stream中看) out.yuv
- -an: a代表audio,n代表no不包括音频的
- -c:v rawvideo 指定将视频转成原始数据
- -pixel_format yuv420p 指定转换格式为yuv420p(4:2:0)
YUV转H264
ffmpeg -f rawvideo -pix_fmt yuv420p -s 320x240 -r 30 -i out.yuv -c:v libx264 -f rawvideo out.h264
提取PCM数据
ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm
播放的时候参数也要和上面一样,因为不知道你用什么采样率和声道是啥
ffplay -ar 44100 -ac 2 -f s16le -i out.pcm
- -vn: v代表video,n代表不要视频
- -ar: a代表audio,r代表read,采样率44100 44.1k
- -ac: a代表audio,c2代表双声道还有立体声,环绕立体声
- -f: 音频抽取出来的存取格式, s16 s代表有符号的,每一位16位表示
PCM转WAV
ffmpeg -f s16be -ar 8000 -ac 2 -acodec pcm_s16be -i input.raw output.wav
查看有哪些设备
首先通过下面的命令查看一下 mac 上都有哪些设备。
ffmpeg -f avfoundation -list_devices true -i ""
录屏
yuv播放的时候需要指定宽高
ffmpeg -f avfoundation -i 1 -r 30 out.yuv
- -f 指定使用 avfoundation 采集数据。
- -i 指定从哪儿采集数据,它是一个文件索引号。在我的MAC上,1代表桌面(可以通过上面的命令查询设备索引号)(1其实是个索引,屏幕是1,摄像头是0)。
- -r 指定帧率。按ffmpeg官方文档说-r与-framerate作用相同,但实际测试时发现不同。-framerate 用于限制输入,而-r用于限制输出。
注意,桌面的输入对帧率没有要求,所以不用限制桌面的帧率。其实限制了也没用。
播放
录制的时候会提示
Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 3360x2100,
q=2-31, 3386880 kb/s, 30 fps, 30 tbn, 30 tbc
-s 3360x2100
-pix_fmt uyvy422
ffplay -s xxxxx(你录制时候的宽高) -pix_fmt (也是你录制时候的格式) ./out.yuv
录屏+声音
ffmpeg -f avfoundation -i 1:0 -r 29.97 -c:v libx264 -crf 0 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k out.flv
ffmpeg -y -f avfoundation -i 1:0 -framerate 60 -c:v libx264 -r 60 -pix_fmt yuv420p -preset 0 -crf 19 -c:a aac -b:a 192k "$HOME/Screen Record $(date "+%Y-%m-%d %H-%M-%S").mp4"
- -i 1:0 冒号前面的 “1” 代表的屏幕索引号。冒号后面的"0"代表的声音索相号。
- -c:v 与参数 -vcodec 一样,表示视频编码器。c 是 codec 的缩写,v 是video的缩写。
- -crf 是 x264 的参数。 0 表式无损压缩。
- -c:a 与参数 -acodec 一样,表示音频编码器。
- -profile 是 fdk_aac 的参数。 aac_he_v2 表式使用 AAC_HE v2 压缩数据。
- -b:a 指定音频码率。 b 是 bitrate的缩写, a是 audio的缩与
录视频
ffmpeg -framerate 30 -f avfoundation -i 0 out.mp4
- -framerate 限制视频的采集帧率。这个必须要根据提示要求进行设置,如果不设置就会报错。
- -f 指定使用 avfoundation 采集数据。
- -i 指定视频设备的索引号
视频+音频
ffmpeg -framerate 30 -f avfoundation -i 0:0 out.mp4
录音
ffmpeg -f avfoundation -i :0 out.wav
0是代表设备的索引,可以去上面查看
录制好了播放
ffplay ./out.wav
录制音频裸数据
ffmpeg -f avfoundation -i :0 -ar 44100 -f s16le out.pcm
视频缩小一倍
ffmpeg -i out.mp4 -vf scale=iw/2:-1 scale.mp4
- -vf scale 指定使用简单过滤器 scale,iw/2:-1 中的 iw 指定按整型取视频的宽度。 -1 表示高度随宽度一起变化。
视频裁剪
ffmpeg -i VR.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy -video_size 1280x720 vr_new.mp4
crop 格式:crop=out_w:out_h : x : y
- out_w: 输出的宽度。可以使用 in_w 表式输入视频的宽度。
- out_h: 输出的高度。可以使用 in_h 表式输入视频的高度。
- x : X坐标
- y : Y坐标
如果 x和y 设置为 0,说明从左上角开始裁剪。如果不写是从中心点裁剪。
倍速播放
ffmpeg -i out.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" speed2.0.mp4
- -filter_complex 复杂滤镜,[0:v]表示第一个(文件索引号是0)文件的视频作为输入。setpts=0.5*PTS表示每帧视频的pts时间戳都乘0.5,也就是差少一半。[v]表示输出的别名。音频同理就不详述了。
- map 可用于处理复杂输出,如可以将指定的多路流输出到一个输出文件,也可以指定输出到多个文件。"[v]"复杂滤镜输出的别名作为输出文件的一路流。上面 map的用法是将复杂滤镜输出的视频和音频输出到指定文件中。
对称视频
ffmpeg -i out.mp4 -filter_complex "[0:v]pad=w=2*iw[a];[0:v]hflip[b];[a][b]overlay=x=w" duicheng.mp4
- hflip 水平翻转
如果要修改为垂直翻转可以用vflip。
画中画
ffmpeg -i out.mp4 -i out1.mp4 -filter_complex "[1:v]scale=w=176:h=144:force_original_aspect_ratio=decrease[ckout];[0:v][ckout]overlay=x=W-w-10:y=0[out]" -map "[out]" -movflags faststart new.mp4
录制画中画
ffmpeg -f avfoundation -i "1" -framerate 30 -f avfoundation -i "0:0"
-r 30 -c:v libx264 -preset ultrafast
-c:a libfdk_aac -profile:a aac_he_v2 -ar 44100 -ac 2
-filter_complex "[1:v]scale=w=176:h=144:force_original_aspect_ratio=decrease[a];[0:v][a]overlay=x=W-w-10:y=0[out]"
-map "[out]" -movflags faststart -map 1:a b.mp4
多路视频拼接
ffmpeg -f avfoundation -i "1" -framerate 30 -f avfoundation -i "0:0" -r 30 -c:v libx264 -preset ultrafast -c:a libfdk_aac -profile:a aac_he_v2 -ar 44100 -ac 2 -filter_complex "[0:v]scale=320:240[a];[a]pad=640:240[b];[b][1:v]overlay=320:0[out]" -map "[out]" -movflags faststart -map 1:a c.mp4
添加水印
ffmpeg -i out.mp4 -vf "movie=logo.png,scale=64:48[watermask];[in][watermask] overlay=30:10 [out]" water.mp4
- -vf中的 movie 指定logo位置。scale 指定 logo 大小。overlay 指定 logo 摆放的位置。
删除水印
先通过 ffplay 找到要删除 LOGO 的位置
ffplay -i test.flv -vf delogo=x=806:y=20:w=70:h=80:show=1
使用 delogo 滤镜删除 LOGO
ffmpeg -i test.flv -vf delogo=x=806:y=20:w=70:h=80 output.flv
裁剪
ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out1.mp4
- -ss 指定裁剪的开始时间,精确到秒,时:分:秒
- -t 被裁剪后的时长,单位为秒
合并
首先创建一个 inputs.txt 文件,文件内容如下:
file ‘1.flv’
file ‘2.flv’
file ‘3.flv’
然后执行下面的命令:
ffmpeg -f concat -i inputs.txt -c copy output.flv
hls切片文章来源:https://www.toymoban.com/news/detail-402629.html
ffmpeg -i out.mp4 -c:v libx264 -c:a libfdk_aac -strict -2 -f hls out.m3u8
- -strict -2 指明音频使有AAC。
- -f hls 转成 m3u8 格式。
视频转JPEG
ffmpeg -i test.flv -r 1 -f image2 image-%3d.jpeg
- -r : 图片转出的帧率,每秒钟转出1张图片
- -f : 将输入文件转成什么格式
- %3d是动态的,3个数字组成的
视频转gif
ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out.gif
图片转视频
这个会一下把所有帧全部输出文章来源地址https://www.toymoban.com/news/detail-402629.html
ffmpeg -f image2 -i image-%3d.jpeg images.mp4
- -i : 表示输入,后面是图片
播放YUV 数据
ffplay -pix_fmt nv12 -s 192x144 1.yuv
播放YUV中的 Y平面
ffplay -pix_fmt nv21 -s 640x480 -vf extractplanes='y' 1.yuv
到了这里,关于ffmpeg命令行使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!