ffmpeg命令汇总
1. 查看ffmpeg信息:
ldd `which ffmpeg`
ffmpeg -filters
ffmpeg -h filter=drawtext
man ffmpeg
ffmpeg --help
开启ffmpeg log
ffmpeg -loglevel trace -i a.mkv out.yuv
相关log level等级如下:
{ "quiet" , AV_LOG_QUIET },
{ "panic" , AV_LOG_PANIC },
{ "fatal" , AV_LOG_FATAL },
{ "error" , AV_LOG_ERROR },
{ "warning", AV_LOG_WARNING },
{ "info" , AV_LOG_INFO },
{ "verbose", AV_LOG_VERBOSE },
{ "debug" , AV_LOG_DEBUG },
{ "trace" , AV_LOG_TRACE },
接口为:av_log_set_level(AV_LOG_TRACE);
2.码流信息查询
查看码流所有的frame
ffprobe -show_frames 640_480_Video_MPEG4_Audio_mp3.avi
-show_streams:查看track信息
-select_streams v:0:选取第一路视频
-show_entries "packet=pts_time,duration_time,stream_index : stream=index,codec_type":只显示pts_time duration_time stream_index相关信息
-print_format json按json格式打印
ffprobe -show_streams -select_streams v:0 -show_frames -show_entries "packet=pts_time,duration_time,stream_index : stream=index,codec_type" 640_480_Video_MPEG4_Audio_mp3.avi -print_format json
统计码流的frame数
ffprobe -show_frames 2017_0608_142115_0002_F.mp4 | grep media_type=video | wc -l
3. demux&decode
mp4文件转ts文件(h264 codec)
ffmpeg -i modify.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb out.ts
-vcodec copy 拷贝video的ES数据
-acodec copy 拷贝audio的ES数据
-vbsf h264_mp4toannexb 对video的ES数据增加sync头
mp4抽取ES data(h264&h265)
ffmpeg -i "Chocolate - 1280x720.mp4" -vcodec copy -f rawvideo -vbsf h264_mp4toannexb chocolate-1280x720.264
-vcodec copy 拷贝video的ES数据
-f rawvideo 指定输出video数据为ES数据
-vbsf h264_mp4toannexb 对video的ES数据增加sync头
ffmpeg -i 2017_04_18_11_23_0_alltime_0600.mkv -vcodec copy -an -f hevc out.265
-vcodec copy 拷贝video的ES数据
-f hevc 指定输出video数据为H265 ES数据
抽取第二路视频的es数据,map信息要通过ffmpeg -i LOCK_2017_0420_175519_0054_F.mp4 这个命令获取
ffmpeg -i LOCK_2017_0420_175519_0054_F.mp4 -map 0:1 -vbsf h264_mp4toannexb out.264
-map 0:1 指定哪一路视频
-vbsf h264_mp4toannexb 对video的ES数据增加sync头
使用ffmpeg获取PCM数据
ffmpeg -i input.mpg -f s16le -ar 44100 -acodec pcm_s16le output.pcm
-f s16le 指定输入格式为16位pcm
-ar 44100 设定采样率为44100
-acodec 设定audio codec
把AVI里的音频保存成mp3文件
ffmpeg -i source_video.avi -vn -ar 44100 -acodec libmp3lame -ac 2 -ab 192K -f mp3 sound.mp3
-vn 不处理视频
-ar 44100 设定采样率为44100
-acodec libmp3lame 设定audio codec
-ac 2 设定channels数
-ab 192K 设定bitrate
-f mp3 设定输出格式
4. mux&encode
raw yuv编码成相应的container
ffmpeg -s 640*480 -pix_fmt nv12 -i 264_test.yuv -vcodec h264 out.ts
-s 指定宽高
-pix_fmt nv12 指定YUV数据格式
-vcodec h264 指定video codec
ffmpeg -s 640*480 -pix_fmt nv12 -i 264_test.yuv -vcodec mpeg4 out.ts
5. filter相关
对jpeg图像进行crop裁剪
ffmpeg -i jpeg1.jpg -vf crop=iw/2:ih/2 ff_out.yuv
对yuv数据进行裁剪
ffmpeg -loglevel trace -s 1920*1088 -pix_fmt nv12 -i jpeg1.yuv -vf crop=iw/2:ih/2 ff_out.yuv
ffmpeg加文字水印并控制水印显示时间或显示周期
#加水印 水印位置由x,y,w,h来控制
#ffmpeg编译时需--enable-libfreetype才能用此功能
#!/bin/bash
ffmpeg -y -i jiushu.mpg -acodec libfaac -b:a 30k -ar 44100 -r 15 -ac 2 -s 480x272 -vcodec libx264 -refs 2 -x264opts keyint=150:min-keyint=15 -vprofile baseline -level 20 -b:v 200k -vf "drawtext=fontfile=/mnt/hgfs/zm/simhei.ttf: text=‘来源:迅雷‘:x=100:y=x/dar:fontsize=24:fontcolor=yellow@0.5:shadowy=2" drawtext.mp4
-acodec libfaac
-b:a 30k
-ar 44100
-r 15
-ac 2
-s 480x272
-vcodec libx264
-refs 2
-x264opts keyint=150:min-keyint=15
-vprofile baseline
-level 20
-b:v 200k
-vf "drawtext=
fontfile=/mnt/hgfs/zm/simhei.ttf:
text=‘来源:迅雷‘:
x=100:
y=x/dar:
fontsize=24:
fontcolor=yellow@0.5:
shadowy=2"
#加水印,显示10秒
#!/bin/bash
ffmpeg -y -i jiushu.mpg -acodec libfaac -b:a 30k -ar 44100 -r 15 -ac 2 -s 480x272 -vcodec libx264 -refs 2 -x264opts keyint=150:min-keyint=15 -vprofile baseline -level 20 -b:v 200k -vf "drawtext=fontfile=/mnt/hgfs/zm/simhei.ttf: text=‘来源:迅雷‘:x=100:y=x/dar:draw=‘if(gt(n,0),lt(n,250))‘:fontsize=24:fontcolor=yellow@0.5:shadowy=2" drawtext.mp4
draw=‘if(gt(n,0),lt(n,250))‘ 画水印的时间
最新使用ffmpeg textdraw没有draw接口,所以无法实现该功能。可以用第一节的命令查询filter的相关参数。
加打时间戳
ffmpeg -i wildlife.wmv -vf "drawtext=fontfile=arial.ttf: text='fuck': timecode='09\:57\:00\:00': r=25: \x=(w-tw)/1.5: y=h-(20*lh):fontcolor=white: box=1: boxcolor=0x00000000@1" -an -y out.wmv
使用ffmpeg AVfilter 中的amix实现混音
ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
inputs
The number of inputs. If unspecified, it defaults to 2.//输入的数量,如果没有指明,默认为2.
duration
How to determine the end-of-stream.//决定了流的结束
longest
The duration of the longest input. (default)//最长输入的持续时间
shortest
The duration of the shortest input.//最短输入的持续时间
first
The duration of the first input.//第一个输入的持续时间
dropout_transition
The transition time, in seconds, for volume renormalization when an input stream ends. The default value is 2 seconds.
//输入流结束时(音频)容量重整化的转换时间(以秒为单位)。 默认值为2秒。
6. ffplay播放YUV数据
播放yuv数据,循环3次,帧率为3
ffplay -loop 3 -f rawvideo -video_size 1920*1080 -pix_fmt nv12 -framerate 3 out.yuv
-loop表示循环次数
-framerate表示帧率
ffmpeg -s 1920*1080 -pix_fmt nv12 -i _1920x1080_8bit_uv1.nv12_001.yuv -vf crop=iw/2:ih/2:0:0 ISP_1920x1080_nv12_001.yuv
7. 查看支持的pix_fmt
ffmpeg -pix_fmts
8. UDP串流
服务器端,发送h264裸流
ffmpeg -re -i out.h264 -vcodec copy -f h264 udp://192.168.0.179:1234
-re表示按时间截读取文件
客户端
ffplay -f h264 udp://192.168.0.179:1234
9. ffserver RTSP服务器配置(旧版ffmpeg才有)
RTSPPort 5454
BindAddress 0.0.0.0
RTSPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
#MP3 audio
<Stream cry.mp3>
File "/media/sf_chuchen/ffmpeg/cry.mp3"
Format rtp
NoVideo
</Stream>
其中,以下两条必须指定
RTSPPort 5454 #rtsp server 端口
Format rtp #格式为rtp,在http下,为流的格式(MP3)
vlc播放:
rtsp://ip_addr:5454/stream_name
10. RTP串流
服务器端推送
./ffmpeg -re -stream_loop -1 -i zhen_h264+mp2.ts -vcodec copy -an -f rtp rtp://10.10.50.90:9999 > h264.sdp
客户端接收
./ffplay -protocol_whitelist "file,rtp,udp" h264.sdp
实际上ffmpeg内部RTP默认使用UDP协议发送数据,所以可以指定单播或者组播地址。
对于RTP协议,sdp作为重要的流描述信息,是必须存在的
-re该参数表示按照实际帧率发送,否则按照最快速度发送数据(视具体主机性能而定)-stream_loop -1表示循环播放,这里的是数字-1(不是字母L),本地文件串流结束后直接从头开始-vcodec copy/-acodec copy表示复制视频或者音频,不做转码-vn/-an表示禁用视频或音频```````
ffmpeg命令汇总的更多相关文章
- 转: FFmpeg功能命令汇总
原文: FFmpeg功能命令汇总 前言 如此强大的FFmpeg,能够实现视频采集.视频格式转化.视频截图.视频添加水印.视频切片.视频录制.视频推流.更改音视频参数功能等.通过终端命令如何实现这些功能 ...
- 20145222《信息安全系统设计基础》Linux常用命令汇总
学习Linux时常用命令汇总 通过Ctrl+f键可在该网页搜索到你想要的命令. Linux中命令格式为:command [options] [arguments] //中括号代表是可选的,即有些命令不 ...
- Keystone 命令汇总
Keystone 命令汇总 目录 [隐藏] 1 用户(User) 1.1 查看用户列表 1.2 创建用户 1.3 删除用户 1.4 显示用户详细信息 1.5 更新用户的密码 1.6 赋予用户一个角 ...
- Oozie命令行常用命令汇总[转]
Oozie命令行常用命令汇总 有时候脚本跑多了就不愿意在OozieWeb端去看脚本的运行情况了.还好Oozie提供了很多命令行命令.能通过命令行直接检索自己想看到的脚本信息.在这里简单进行一下总结.一 ...
- 【Andorid】短视频拍摄SDK——Vitamio Recorder 2.0 发布(支持ffmpeg命令行)
简介 VCamera SDK Android 版(短视频拍摄SDK)是炫一下(北京)科技有限公司推出的软件开发工具包,为Android开发者提供简单.快捷的接口,帮助开发者实现Android平台上的短 ...
- docker 命令汇总
命令汇总 docker history fa5fa5为镜像id或者镜像名 docker export 30b >h.tar30b为容器id或者容器名# docker export angry_b ...
- vim常用命令汇总
vim常用命令汇总: http://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html 定位 本行第一个字符 ctrl+$ ...
- 73条日常Linux shell命令汇总,总有一条你需要!
转载: 73条日常Linux shell命令汇总,总有一条你需要! 1.检查远程端口是否对bash开放: echo >/dev/tcp/8.8.8.8/53 && echo &q ...
- 常用Git命令汇总
常用Git命令汇总 跟着R哥来到了新公司(一个从硬件向互联网转型中的公司),新公司以前的代码基本是使用SVN做版本控制,甚至有些代码没有做版本控制,所以R哥叫HG做了一次Git分享,准备把公司所有的代 ...
随机推荐
- 20145301实验五 Java网络编程及安全
北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.05.06 18:30-21:30 实验名称:实验五 Java网络编程 实验内容 ...
- 【读书笔记】《深入浅出nodejs》第三章 异步I/O
1. 为什么要异步I/O (1)用户体验上: 并发的优势: M+N+... -> max(M,N,...) --> 使后端能够快速的响应资源 *并发的劣势:... (2)资源分配: 单线 ...
- 彻底的卸载干净oracle 11g
1.关闭oracle所有的服务.可以在windows的服务管理器中关闭: 2.打开注册表:regedit 打开路径: <找注册表 :开始->运行->regedit> H ...
- js 捕获型事件
true 为捕获型事件 false 为冒泡型事件
- String类自带的字符串处理原生方法
一.取出指定索引的字符 —— 使用charAt()方法 二.字符串与字符数组的转换 三.字符串转大写.先转换成数组,然后再改变ASCII码 四.给定一个字符串,要求判断其是否由数字组成 五.字符串与字 ...
- MySQL表类型MyISAM/InnoDB的区别(解决事务不回滚的问题)
MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与 ...
- Win10配Theano环境和Keras框架
网络上有各种各样的win7 64bit安装theano的方法,我也试过好多,各种各样的问题.因为之前没了解过MinGw等东西,所以安装起来比较费劲,经过不断的尝试,最终我按照以下过程安装成功. 其实过 ...
- ctci1.8
bool isSub(string str0, string str1){ if(str0.length() != str1.length()) return false; ...
- 自已开发完美的触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
手机端网页版app在使用下拉列表时,传统的下拉列表使用起来体验非常不好,一般做的稍好一点的交互功能界面都不会直接使用下拉列表,所以app的原生下拉列表都是弹窗列表选择,网页型app从使用体验上来当然也 ...
- 格雷码C++实现
格雷码C++实现 题目 给定一个整数n,请返回n位的格雷码,顺序从0开始,要求递归实现. 格雷码: 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code ...