ffmpeg命令行使用_狗蛋儿l的博客-CSDN博客_ffmpeg命令行

0、查看视频信息
ffmpeg -i 11.mp41、去除音频
ffmpeg -i 文件名 -an -vcodec copy 文件名.mp4
-an去除音频,-vcodec copy拷贝源数据的视频流到文件名.mp4文件里面2、去除视频
ffmpeg -i 文件名 -vn -acodec copy 文件名.mp4
-vn去除音频,-acodec copy拷贝源数据的音频流到文件名.mp4文件里面3、改变视频分辨率
ffmpeg -i 文件名.mp4 -vf scale=640:360 文件名.mp4
scale=后面填写的是修改后的分辨率ffmpeg -i 文件名.mp4 -vf scale=iw*2:ih*2 文件名.mp4
把分辨率变成两倍,也可以*0.5变成二分之一4、音视频合并
ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out.mp45、保存音频为AAC文件
ffmpeg -i 11.mp4 -vn -acodec copy 11.aac6、YUV转H264
ffmpeg -f rawvideo -pix_fmt yuv420p -s 320x240 -r 30 -i out.yuv -c:v libx264 -f rawvideo out.h2647、提取PCM数据
ffmpeg -i 11.mp4 -vn -ar 44100 -ac 2 -f s16le 11.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位表示8、播放YUV 数据
ffplay -pix_fmt nv12 -s 192x144 1.yuv 9、播放YUV中的 Y平面
ffplay -pix_fmt nv21 -s 640x480 -vf extractplanes='y' 1.yuv10、转格式
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
上面的命令表式的是音频、视频都直接 copy,只是将 mp4 的封装格式转成了flv。
copy是把原来的并不条件
-i: 输入文件
-vcodec copy : 视频编码处理方式
-acodec copy: 音频编码处理方式11、提取YUV数据
ffmpeg -i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuvffplay -s (wxh分辨率,stream中看) out.yuv
-an: a代表audio,n代表no不包括音频的
-c:v rawvideo 指定将视频转成原始数据
-pixel_format yuv420p 指定转换格式为yuv420p(4:2:0)

查看视频信息
ffmpeg -i 视频名字
1

视频名字这里输入前几个字符按 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
1
-an去除音频,-vcodec copy拷贝源数据的视频流到文件名.mp4文件里面

去除视频
ffmpeg -i 文件名 -vn -acodec copy 文件名.mp4
1
-vn去除音频,-acodec copy拷贝源数据的音频流到文件名.mp4文件里面

保存音频为AAC文件
 ffmpeg -i 文件名.mp4 -vn -acodec copy 文件名.aac
1
改变视频分辨率
ffmpeg -i 文件名.mp4 -vf scale=640:360 文件名.mp4
1
scale=后面填写的是修改后的分辨率

ffmpeg -i 文件名.mp4 -vf scale=iw*2:ih*2 文件名.mp4
1
把分辨率变成两倍,也可以*0.5变成二分之一

隐藏无用信息
ffmpeg -i 文件名.mp4 -hide_banner
1

添加水印
ffmpeg -i 文件名.mp4 -i 水印.png -filter_complex overlay out.mp4
1
默认左上角,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
1
x,y 确定logo的位置坐标
w,h 设置logo的宽高
show 表示是否显示矩形框,默认是 0 不显示,1 是显示

添加文字水印
ffmpeg -i 文件名.mp4 -vf drawtext=text='内容':fontcolor='颜色':fontsize=字号 out.mp4
1
截取视频
ffmpeg -i 文件名.mp4 -ss 秒 -to 时间 out.mp4
1
从多少秒开始,截取多长时间的视频

视频转换为gif
ffmpeg -i 文件名.mp4 -ss 10 -t 5 -s 640*320 -r 15 out.mp4
1
-ss 开始时间
-t 持续时间
-i 后面是源文件
-s 动图分辨率
-r 帧率

ffmpeg -i 文件名.mp4 -vframes 30 out.gif
1
-vframes 30 视频前三十帧
把视频前三十帧转换为gif

视频压缩之 -crf
ffmpeg -i 文件名.mp4 -c:v libx264 -crf 23 out.mp4
1
×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
1
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
1
pad后面参数值依次为:宽,高,x坐标,y坐标,默认是黑边可以不写
56:(720 - 680)/2=56
1080 x 608分辨率变成 1080 x 720分辨率

转格式
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
1
上面的命令表式的是音频、视频都直接 copy,只是将 mp4 的封装格式转成了flv。
copy是把原来的并不条件

-i: 输入文件
-vcodec copy : 视频编码处理方式
-acodec copy: 音频编码处理方式
音视频合并
ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out.mp4
1
提取YUV数据
ffmpeg -i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv

ffplay -s (wxh分辨率,stream中看) out.yuv
1
2
3
-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
1
提取PCM数据
ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm
1
播放的时候参数也要和上面一样,因为不知道你用什么采样率和声道是啥

ffplay -ar 44100 -ac 2 -f s16le -i out.pcm
1
-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
1
查看有哪些设备
首先通过下面的命令查看一下 mac 上都有哪些设备。

ffmpeg -f avfoundation -list_devices true -i ""
1
录屏
yuv播放的时候需要指定宽高

ffmpeg -f avfoundation -i 1 -r 30 out.yuv
1
-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
1
录屏+声音
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
1
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"
1
-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 
1
-framerate 限制视频的采集帧率。这个必须要根据提示要求进行设置,如果不设置就会报错。
-f 指定使用 avfoundation 采集数据。
-i 指定视频设备的索引号
视频+音频
ffmpeg -framerate 30 -f avfoundation -i 0:0 out.mp4 
1
录音
ffmpeg -f avfoundation -i :0 out.wav
1
0是代表设备的索引,可以去上面查看

录制好了播放

ffplay ./out.wav
1
录制音频裸数据
ffmpeg  -f avfoundation -i :0 -ar 44100 -f s16le out.pcm
1
视频缩小一倍
ffmpeg -i out.mp4 -vf scale=iw/2:-1 scale.mp4
1
-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
1
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
1
-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
1
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
1
录制画中画
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
1
2
3
4
5
多路视频拼接
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
1
添加水印
ffmpeg -i out.mp4  -vf "movie=logo.png,scale=64:48[watermask];[in][watermask] overlay=30:10 [out]" water.mp4
1
-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
1
使用 delogo 滤镜删除 LOGO

ffmpeg -i test.flv -vf delogo=x=806:y=20:w=70:h=80 output.flv
1
裁剪
ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out1.mp4
1
-ss 指定裁剪的开始时间,精确到秒,时:分:秒
-t 被裁剪后的时长,单位为秒
合并
首先创建一个 inputs.txt 文件,文件内容如下:

file ‘1.flv’
file ‘2.flv’
file ‘3.flv’

然后执行下面的命令:

ffmpeg -f concat -i inputs.txt -c copy output.flv
1
hls切片

ffmpeg -i out.mp4 -c:v libx264 -c:a libfdk_aac -strict -2 -f hls  out.m3u8
1
-strict -2 指明音频使有AAC。
-f hls 转成 m3u8 格式。
视频转JPEG
ffmpeg -i test.flv -r 1 -f image2 image-%3d.jpeg
1
-r : 图片转出的帧率,每秒钟转出1张图片
-f : 将输入文件转成什么格式
%3d是动态的,3个数字组成的
视频转gif
ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out.gif
1
图片转视频
这个会一下把所有帧全部输出

ffmpeg  -f image2 -i image-%3d.jpeg images.mp4
1
-i : 表示输入,后面是图片
播放YUV 数据
ffplay -pix_fmt nv12 -s 192x144 1.yuv 
1
播放YUV中的 Y平面
ffplay -pix_fmt nv21 -s 640x480 -vf extractplanes='y' 1.yuv
1

————————————————
版权声明:本文为CSDN博主「狗蛋儿l」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zranxi/article/details/122795801

FFmpeg:命令行操作相关推荐

  1. FFmpeg命令行解析

    目录标题 一.引言(Introduction) 1.1 FFmpeg简介(Overview of FFmpeg) 1.2 FFmpeg命令行的应用场景(Application Scenarios of ...

  2. Android 下使用 FFmpeg 命令行工具与问题排查

    目录 FFmpeg 命令行工具 将相关文件加入到项目中 修改 ffmpeg 源码 问题排查 上一篇文章 中,我们已经成功编译了 FFmpeg 的主要库并集成到了我们的 Android 应用中.我们暂时 ...

  3. FFmpeg命令行工具系列二---转码流程及过滤器

    一.概述 在FFmpeg命令行工具系列一中,对FFmpeg的命令行工具FFmpeg.exe进行了简单的介绍,并举出了几个简单的例子.在这一章中,将进行一次详细的介绍,主要是对转码过程和过滤器进行介绍. ...

  4. [总结]FFMPEG命令行工具之ffmpeg详解

    目录 0 前言 1 语法 Synopsis 2 描述 Description 3 详细描述 Detailed description 3.1 滤镜 Filtering 3.1.1 简单滤镜图 Simp ...

  5. [总结]FFMPEG命令行工具之ffplay详解

    目录 0 前言 1 语法 Synopsis 2 描述 Description 3 选项 Options 3.1 流指定器 Stream specifiers 3.2 通用选项 Generic opti ...

  6. [总结]FFMPEG命令行工具之ffprobe详解

    目录 0 前言 1 语法 Synopsis 2  描述 Description 3 选项 Options 3.1 流指定器 Stream specifiers 3.2 通用选项 Generic opt ...

  7. ffmpeg 命令行实现多路视频拼接播放

    FFmpeg命令行实现多路视频拼接 下面我将实现的是4个视频合为一个视频 注意:不是首位连接 是同时显示 效果如下: ffmpeg命令为: ffmpeg -i out1.mp4 -i out2.mp4 ...

  8. DOS命令行操作MySQL常用命令

    平时用可视化界面用惯了,如果紧急排查问题,没有安装可视化工具的话,只能通过命令来看了. 以备不时之需,我们要熟悉一下命令行操作MySQL. 打开DOS命令窗口:WIN + R 输入cmd,回车 然后输 ...

  9. github命令行操作

    首先做准备工作,安装github客户端Git Shell和GitHub,GitHub用于界面化操作,本次主要说一下如果用命令行操作, 1.打开Git Shell,进入本地项目库,cd F:gitdem ...

  10. 命令行操作svn和git和git

    前几天在写代码的时候电脑突然坏掉,老大交代的任务没完成,非常痛恨自己用svn或者git保存代码,相信很多程序员遇到过,硬盘坏掉,存在硬盘中的代码丢失,无法找回的问题,svn和git可谓程序员界的福音, ...

最新文章

  1. Flameshot:Linux 环境下的一个简洁但功能丰富的截图工具
  2. Servlet RequestDispatcher需要注意的情况
  3. docker-compose 部署elk+解决时间不对导致kibana找不到logstash定义的index + docker-compose安装...
  4. ABAP中常见的接口技术类型
  5. 健康管理-健康的概念和健康管理目标特点
  6. android流程化步骤样式,Android RecyclerView 解析之绘制流程篇
  7. 使用CSS实现网格+渐变背景色的Web页面背景
  8. [RK3399][Android7.1] 调试笔记 --- CPU的serial number读取
  9. java实现九九乘法表
  10. 冰河在大学是如何度过的?
  11. 大数据时代,传输软件的优势与应用
  12. leelen可视对讲怎么接线_楼道对讲门铃怎么接线
  13. MongoDB 安装报错:无法启动此程序,缺少dll文件
  14. Android错误日志分析
  15. Android 签名方法---同时使用V1和V2签名
  16. Enterprise Architect 中文版 注册码 破解 亲测有效!
  17. Unity 使用LineRenderer做画线游戏
  18. 关于面试中的TCP和UDP怎么用自己的话给面试官说
  19. 专为Oracle数据恢复而生 - PRM/DUL
  20. dac0832控制电机驱动流程图_直流电机闭环调速课程设计上机指导

热门文章

  1. 零时时间戳、字符串、日期
  2. 2021年中国LED交通信号及标志市场趋势报告、技术动态创新及2027年市场预测
  3. 魅族 C++ 微服务框架技术
  4. Source file “nf_cpu.svh“ cannot be opened for reading due to ‘No such file or directory‘. Pleas
  5. 数据结构与算法 精讲
  6. 系统架构设计师 (论文范文 -- 基于构件的软件开发)
  7. 用 js判断 一个数是否是素数(质数)_小学五年级下册数学公式,孩子考试用的上...
  8. 自掘Java----②java基础定义
  9. 用“创业与投资”类比来分析《西部世界》第一、二季的架构
  10. python列表空格变为逗号_【python】输出列表元素,以空格/逗号为分隔符