音视频】5.ffmpeg命令分类与使用
GT
其实平时也有一些处理音视频的个人或者亲人需求,熟练使用ffmpeg之后也不要借助图示化软件,一个命令基本可以搞定
G: 熟练使用ffmpeg命令!
T :不要死记硬背,看一遍,自己找下规律,敲一遍,用的多了,自然而然就记住了。就算忘了,我也可以查一查_
ffmpeg提供的命令行工具
ffprobe:用作信息查询,查看音视频文件中的信息
ffplay:是一个使用了FFmpeg和SDL库的媒体播放器,ijkplayer 就是基于ffplay改造二次开发的,多做了一些硬件解码和兼容性的工作。
ffmpeg:最重要,最核心。包含各种功能,学习也主要是学习这玩意。
ffserver:简单的流媒体服务器,能够响应客户端的流媒体请求和把数据流发送给客户端。
ffprobe
ffprobe [fileName] :直接输出文件信息,很明显,可以看出代表的含义
# 时长、开始、比特率
Duration: 00:01:39.96, start: 0.000000, bitrate: 1035 kb/s
# video流,编码格式h264 (封装格式avc1),视频帧格式为yuv420p,分辨率1000x562,比特率、帧率,default代表默认的视频流,可能有多路视频流。
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1000x562 [SAR 1:1 DAR 500:281], 935 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default)
# 音频流,编码格式aac(封装格式MP4A),采用Profile是LC,采样率44.1kHZ,stereo立体声,数据表示格式浮点型,比特率
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 94 kb/s (default)
1
2
3
4
5
6
7
8
ffprobe -show_format [fileName]
ffprobe -show_packets [fileName]
ffprobe -show_frames [fileName]
ffprobe -print_format json -show_streams [fileName]
属性 含义
media_type 帧的类型(a,v,字幕等)
pict_type 帧类型(IPB)
pic_fmt 帧的图像色彩格式(yuv420p)
Key_frame 是否是关键帧
ffplay
播放: ffplay [fileName]
直接播放文件,播放同时会打印音视频流信息,与上面通过ffprobe查看到的一致
1.seek:播放窗口点击
2.快进快退:左右键10s,上下键1min
3.音视频切换:W
4.frame-step:S
循环播放:ffplay [fileName] -loop [times]
切换音视频流:ffplay [fileName] ast/vst [index]
播放音视频裸数据PCM/YUV:
ffplay .pcm -f s161e -channels 2 -ar 44100
ffplay -f rawvideo -pixel_format yuv420p/rgb24 -s 1920*1080 [fileName]
音视频同步,以音/视频/外部时钟为参考
ffplay [fileName] -sync audio/video/ext
ffmpeg:最美味的鱼,也是刺最多的。
ffmpeg -help:可以考到如下几类参数
# 1.Global options 全局生效,而不是只针对个别文件
# 2.Per-file main options:操作每个文件单独生效
-f fmt 指定音视频格式
-c codec codec name
-codec codec codec name
-pre preset preset name
-map_metadata outfile[,metadata]:infile[,metadata] set metadata information of outfile from infile
-t duration 指定时长
-to time_stop record or transcode stop time
-fs limit_size 指定文件大小的上限
-ss time_off 指定开始时间
-sseof time_off set the start time offset relative to EOF
-seek_timestamp enable/disable seeking by timestamp with -ss
-timestamp time set the recording timestamp ('now' to set the current time)
-metadata string=string add metadata
-program title=string:st=number... add program with specified streams
-target type specify target file type ("vcd", "svcd", "dvd", "dv" or "dv50" with optional prefixes "pal-", "ntsc-" or "film-")
-apad audio pad
-frames number set the number of frames to output
-filter filter_graph set stream filtergraph
-filter_script filename read stream filtergraph description from a file
-reinit_filter reinit filtergraph on input parameter changes
-discard discard
-disposition disposition
# 3. Video options: 视频参数
-vframes number set the number of video frames to output
-r rate 帧率fps
-s size 分辨率
-aspect aspect 指定视频长宽比(4:3,16:9或1.3333,1.7777)
-bits_per_raw_sample number set the number of bits per raw sample
-vn 取消视频的输出
-vcodec codec 强制使用codec编解码方式(‘copy’ 代表不进行重新编码)
-timecode hh:mm:ss[:;.]ff set initial TimeCode value.
-pass n select the pass number (1 to 3)
-vf filter_graph set video filters
-ab bitrate audio bitrate (please use -b:a)
-b bitrate video bitrate (please use -b:v)
-dn disable data
# 4. Audio options: 音频参数
-aframes number set the number of audio frames to output
-aq quality 设置音频质量 (指定编码)
-ar rate 设置音频采样率 (单位Hz)
-ac channels 设置声道数 1单声道 2立体声
-an 取消音频输出
-acodec codec 指定音频编码 ('copy' 指不做音频转码,直接复制)
-vol volume 设置录制音量大小 (256=normal)
-af filter_graph set audio filters
# 5. Subtitle options
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
查询类命令
-version show version
-buildconf show build configuration
-formats show available formats
-muxers show available muxers
-demuxers show available demuxers
-devices show available devices
-codecs show available codecs
-decoders show available decoders
-encoders show available encoders
-bsfs show available bit stream filters
-protocols show available protocols
-filters show available filters
-pix_fmts show available pixel formats
-layouts show standard channel layouts
-sample_fmts show available audio sample formats
-colors show available color names
-sources device list sources of the input device
-sinks device list sinks of the output device
-hwaccels show available HW acceleration methods
命令格式
ffmpeg [global_options] {[input_file_options] -i input_url} {[output_file_options] output_url}
复用解复用命令
抽取音频流
ffmpeg -i input.mp4 -acodec copy -vn out.aac
抽取视频流
ffmpeg -i input.mp4 -vcodec copy -an out.h264
格式转换
ffmpeg -i input.mp4 -vcodec copy -acodec copy out.flv
音视频合并
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
#提取PCM数据
ffmpeg -i input.mp5 -vn -ar 44100 -ac 2 -f s16le out.pcm
#yuv转h264
ffmpeg -f rawvideo -pix_fmt yuv420p -s 320x240 -r 30 -i out.yuv -c:v libx264 -f rawvideo out.h264
#pcm转wav
ffmpeg -s16le -ar 8000 -ac 2 -acodec pcm_s16le -i input.raw output.wav
滤镜
#添加水印:-vf中的 movie 指定logo位置。scale 指定 logo 大小。overlay 指定 logo 摆放的位置
ffmpeg -i 1.mp4 -vf “movie=2.png,scale=30:30[watermask];[in][watermask] overlay=30:10[out]” water.mp4
#删除水印
1.找到水印
ffplay -i water.mp4 -vf delogo=x=30:y=10:w=32:h=31:show=1
2.删除水印
ffmpeg -i water.mp4 -vf delogo=x=30:y=10:w=32:h=31output.mp4
#视频缩小1倍:-vf scale 指定使用简单过滤器 scale,iw/2:-1 中的 iw 指定按整型取视频的宽度。 -1 表示高度随宽度一起变化。
ffmpeg -i 1.mp4 -vf scale=iw/2:-1 scale.mp4
视频裁剪
crop 格式:crop=out_w:out_h: x :y
out_w: 输出的宽度。可以使用 in_w 表式输入视频的宽度。
out_h: 输出的高度。可以使用 in_h 表式输入视频的高度。
x : X坐标
y : Y坐标
ffmpeg -i 1.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy -video_size 1280x720 out.mp4
倍速播放
-filter_complex 复杂滤镜,[0:v]表示第一个(文件索引号是0)文件的视频作为输入。setpts=0.5PTS表示每帧视频的pts时间戳都乘0.5 ,也就是差少一半。[v]表示输出的别名。音频同理就不详述了。
-map 可用于处理复杂输出,如可以将指定的多路流输出到一个输出文件,也可以指定输出到多个文件。"[v]" 复杂滤镜输出的别名作为输出文件的一路流。上面 map的用法是将复杂滤镜输出的视频和音频输出到指定文件中。
ffmpeg -i 1.mp4 -filter_complex "[0:v]setpts=0.5PTS[v];[0:a]atempo=2.0[a]" -map “[v]” -map “[a]” speed.mp4
对称视频(水平翻转)
ffmpeg -i 1.mp4 -filter_complex “[0:v]pad=w=2*iw[a];[0:v]hflip[b];[a][b]overlay=x=w” duicheng.mp4
对称视频(垂直翻转)
ffmpeg -i 1.mp4 -filter_complex “[0:v]pad=h=2*ih[a];[0:v]vflip[b];[a][b]overlay=y=h” duicheng.mp4
画中画
ffmpeg -i 1.mp4 -i 2.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 -i 1.mp4 -af ‘volume=0.5’ out.mp4
音视频的拼接与裁剪
裁剪
ffmpeg -i 1.mp4 -ss 00:00:00 -t 10 out1.mp4
拼接
text文件:
file ‘out1.flv’
file ‘out2.flv’
file ‘out3.flv’
ffmpeg -f concat -i text -c copy pinjie.mp4
hls切片
-strict -2 指明音频使用AAC。
-f hls 转成 m3u8 格式。
ffmpeg -i 1.mp4 -c:v libx264 -c:a libfdk_aac -strict -2 -f hls out.m3u8
视频图片互转
视频转JPEG
-r 1:1s一张
ffmpeg -i 1.mp4 -r 1 -f image2 image-%3d.jpeg
图片转gif
ffmpeg -i image-%3d.jpeg -r 5 out.gif
视频转gif图
ffmpeg -i 1.mp4 -ss 00:00:00 -t 10 out.gif
图片转视频
ffmpeg -f image2 -i image-%3d.jpeg images.mp4
直播相关
推流
ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName
拉流保存
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
转流
ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v copy -f flv rtmp://server/live/h264Stream
水平有限,能力一般,且处于学习阶段,博客大概为自己学习的记录,难免有理解偏差,欢迎留言指正!
生命不止,学习不息!
---------------------
音视频】5.ffmpeg命令分类与使用的更多相关文章
- C/C++音视频库ffmpeg的数据包AVPacket分析
ffmpeg下载地址 http://www.ffmpeg.club/ AVPacket是ffmpeg用来存放编码后的视频帧数据,我们来分析一下这个结构体,先贴出ffmpeg3.2中AVPacket声明 ...
- 音视频处理ffmpeg使用
参考资料: [url]http://blog.163.com/prosen@yeah/blog/static/12251328720099101378975/ http://ffmpeg.org/ff ...
- 音视频开发-FFmpeg
音视频开发是个非常复杂的,庞大的开发话题,初涉其中,先看一下结合 OEIP(开源项目) 新增例子. 可以打开flv,mp4类型文件,以及rtmp协议音视频数据,声音的播放使用SDL. 把采集的麦/声卡 ...
- C++编程音视频库ffmpeg的pts时间换算方法
ffmpeg中的pts,dts,duration时间记录都是基于timebase换算,我们主要分析下pts的时间怎么换算,其它的是一样的换算.ffmpeg的时间换算对许多新接触同学算是一个大坑,很多刚 ...
- 如何使用ffmpeg进行音视频裁剪命令和音视频合成命令
音视频剪裁命令 ffmpeg -i input.mp4 -ss 00:00:00 -t 10 out.ts -i : 指定视频 -ss : 开始时间 -t : 指定裁剪的秒数 音视频合并的命令 ffm ...
- FFmpeg采集音视频数据命令
文章转自:https://www.jianshu.com/p/4709ccbda3f9 1.ffmpeg 把文件当做直播推送至服务器 (RTMP + FLV) ffmpeg - re -i demo. ...
- 音视频处理概要 markdown
最近要想办法把录制的音视频进行拼接. 比方说此次录制的视频有三段,通过高清直播编码器录制,录制下的标准为h.264 直接用ffmpeg简单拼接,音频会丢失,所以有了此次解决方案(有可能会繁琐,简单方案 ...
- FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑
FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...
- FFmpeg开发实战(三):FFmpeg 打印音视频Meta信息
在之前使用FFmpeg命令行的时候,我们经常看到FFmpeg命令行在输出音视频文件的会打印一下文件的Meta信息,类似如图: 那么我们如何通过代码的方式输出这些Meta信息呢? FFmpeg提供了一个 ...
随机推荐
- oracle导入命令,记录一下 数据库日志太大,清理日志文件
oracle导入命令,记录一下 工作中用到了,这个命令,记录一下,前提要安装imp.exe imp PECARD_HN/PECARD_HN@127.0.0.1:1521/orcl file=E:\wo ...
- python模块之 paramiko(转载)
paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能.这是一个第三方的软件包,使用之前需要安装. 1 基于用户名和密码的 sshclient 方式登录 # 建立一个s ...
- HTML5开发移动web应用——SAP UI5篇(6)
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
- URAL 1057 数位dp
题目传送门http://acm.timus.ru/problem.aspx?space=1&num=1057 最近在学习数位dp,具体姿势可以参照这篇论文:http://wenku.baidu ...
- Python实现用户交互,显示省市县三级联动的选择
题目:Python实现用户交互,显示省市县三级联动的选择 定义的字典为: dic = { "江西": { "萍乡": ["安源", &quo ...
- 昆石VOS2009 VOS3000无漏洞去后门电脑管理客户端大全
注意:您的VOS是什么版本的请使用什么版本的管理客户端,否则无法登陆! ** VOS2009的: ** VOS2009-client-v2.1.2.0.exe 点击这里下载: VOS2009-clie ...
- Ueditor 单独使用上传图片及上传附件方法
1 <script type="text/plain" id="upload_ue"></script> 2 <script ty ...
- springboot(一) 热部署
代码地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo 1.热部署的定义 所谓的热部署:比如项目的热部署,就是在应用 ...
- 公司6:JrVue重用布局
JrVue是我们基于element重新封装的一套组件库; 为了提高开发效率, 方便对代码的统一管理和维护, 我们提供了一些统一的页面布局, 以及项目常用的中小型模块 我在master新拉一个分支J ...
- spring cloud config搭建说明例子(三)-添加actuator
添加心跳 服务端 ConfigServer pom.xml添加actuator包 <dependency> <groupId>org.springframework.cloud ...