当前位置:网站首页>ffmpeg命令行使用
ffmpeg命令行使用
2022-07-06 09:29:00 【狗蛋儿l】
查看视频信息
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切片
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
图片转视频
这个会一下把所有帧全部输出
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
边栏推荐
- Flask框架配置loguru日志庫
- Research Report on market supply and demand and strategy of Chinese table lamp industry
- (POJ - 2739) sum of constructive prime numbers (ruler or two points)
- useEffect,函数组件挂载和卸载时触发
- Codeforces Round #797 (Div. 3)无F
- 软通乐学-js求字符串中字符串当中那个字符出现的次数多 -冯浩的博客
- Generate random password / verification code
- Is the sanic asynchronous framework really so strong? Find truth in practice
- Problem - 1646C. Factorials and Powers of Two - Codeforces
- Codeforces Round #802(Div. 2)A~D
猜你喜欢
QT模拟鼠标事件,实现点击双击移动拖拽等
Codeforces Round #802(Div. 2)A~D
Install Jupiter notebook under Anaconda
Tree of life (tree DP)
QT实现窗口置顶、置顶状态切换、多窗口置顶优先关系
QT realizes window topping, topping state switching, and multi window topping priority relationship
简单尝试DeepFaceLab(DeepFake)的新AMP模型
Log statistics (double pointer)
(POJ - 3685) matrix (two sets and two parts)
Pytorch extract skeleton (differentiable)
随机推荐
QT实现窗口渐变消失QPropertyAnimation+进度条
Codeforces Round #797 (Div. 3)无F
Research Report on market supply and demand and strategy of double drum magnetic separator industry in China
Research Report on hearing health care equipment industry - market status analysis and development prospect prediction
AcWing:第58场周赛
QWidget代码设置样式表探讨
Problem - 1646C. Factorials and Powers of Two - Codeforces
(POJ - 3186) treatments for the cows (interval DP)
(lightoj - 1369) answering queries (thinking)
Anaconda下安装Jupyter notebook
Oneforall installation and use
QT style settings of qcobobox controls (rounded corners, drop-down boxes, up expansion, editable, internal layout, etc.)
Market trend report, technical innovation and market forecast of tabletop dishwashers in China
AcWing——第55场周赛
QT implementation fillet window
本地可视化工具连接阿里云centOS服务器的redis
The "sneaky" new asteroid will pass the earth safely this week: how to watch it
Problem - 922D、Robot Vacuum Cleaner - Codeforces
How to insert mathematical formulas in CSDN blog
Codeforces Round #800 (Div. 2)AC