ffmpeg
吐着泡泡说爱你
小学生一枚,,学习嵌入式和视音频开发,数字图像处理
展开
-
ffmpeg关于timebase的理解
——:ffmpeg的分层结构 写这篇文章的时候先把ffmpeg分层问题大致说明一下,我们按照最常见的”转码程序”和”摄像头采集”以及”播放器”三个模型总结 1:转码 转码基本流程:flv格式数据->h264/aac数据->yuv/pcm数据->h264/aac数据->mp4格式数据 a:我们把flv格式数据或者mp4格式数据这一层叫做mux/demux层或者是复用层有些人习惯于叫做封装层,这转载 2017-06-18 09:53:37 · 2091 阅读 · 0 评论 -
mpeg-ts(二)
MPEG2的三类帧 I帧:是帧内编码帧,其编码不依赖BP两帧,同时他是BP帧编解码的参考图像 P帧:前向预测编码图像,像素的预测值取为前面与其相邻的I帧或P帧中对应像素的值,即采用帧间运动补偿前值预测。 B帧:双向预测编码图像,像素的预测值取为前后与其距离最近的I帧或P帧相应像素的加权平均,即采用帧间运动补偿前后平均,需要指出,B帧不能作为其他B帧或P帧的编码参考图像。编码顺序: 传输流中编转载 2017-06-19 10:40:43 · 431 阅读 · 0 评论 -
ffmpeg转码研究命令行
Ffmpeg是一款功能强大的视频处理工具,那么转码肯定不是问题的,因为项目的需求,对转码进行了研究。刚开始首先去看了ffmpeg源代码中的一个例子transcode.c,但是发现该例子更应该称之为remux的一个例子,并没有具体的涉及到转码。所以转而去ffmpeg工具中寻求帮助了。 ffmpeg转码流程:举例: 输入文件为ts格式,视频编码为H.264,音频编码为AAC,要求的输出文件封装格式为转载 2017-06-19 11:17:12 · 739 阅读 · 0 评论 -
ffmpeg命令中文解释
a) 通用选项-L license -h 帮助 -fromats 显示可用的格式,编解码的,协议的… -f fmt 强迫采用格式fmt -I filename 输入文件 -y 覆盖输出文件 -t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持 -ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持 -title s转载 2017-06-19 16:44:47 · 516 阅读 · 0 评论 -
FFmpeg基本用法
FFmpegFFmpeg 基本用法本课要解决的问题1.FFmpeg的转码流程是什么?2.常见的视频格式包含哪些内容吗?3.如何把这些内容从视频文件中抽取出来?4.如何从一种格式转换为另一种格式?5.如何放大和缩小视频?6.如何旋转,翻转,填充,裁剪,模糊,锐化视频?7.如何给视频加logo,删除logo?8.如何给视频加文本,动态文本?9.如何处理图片?10.如何录像,添加动态logo,截图,马赛克转载 2017-06-19 16:46:20 · 3407 阅读 · 0 评论 -
x264输出统计值含义
典型的x264输出(Stats Output)如下: [text] view plaincopyavis [info]: 1280x720 @ 1.77 fps (40997 frames) yuv4mpeg: 640x480@30/1fps, 0:0 x264 [info]: 352x288 (given by file name) @ 25.00 fps 取决于输入源会有不同,但大转载 2017-06-19 17:07:10 · 672 阅读 · 0 评论 -
x264编码----码率控制
x264是一个 H.264/MPEG4 AVC 编码器,本指南将指导新手如何创建高质量的H.264视频。对于普通用户通常有两种码率控制模式:crf(Constant Rate Factor)和Two pass ABR。码率控制是一种决定为每一个视频帧分配多少比特数的方法,它将决定文件的大小和质量的分配。如果你在编译和安装libx264 方面需要帮助,请查看ffmpeg和x264编译指南:http:/转载 2017-06-19 17:08:09 · 987 阅读 · 0 评论 -
x264参数介绍(-,帧类型和码率控制)
预设值预设值是x264在r1177版本增加的一个方便的命令行选项。可以用x264.exe –fullhelp查看所有的命令行帮助。profile默认:无 说明:限制输出文件的profile。这个参数将覆盖其它所有值,此选项能保证输出profile兼容的视频流。如果使用了这个选项,将不能进行无损压缩(qp 0 or crf 0)。 可选:baseline,main,high 建议:不设置。除非解转载 2017-06-19 17:09:19 · 1835 阅读 · 0 评论 -
x264参数介绍(二 ,分析和视频可用性信息)
分析partitions默认:’p8x8,b8x8,i8x8,i4x4′ 说明:H.264在压缩前会被切分为16×16大小的宏块。这些块可被进一步切分成更小的块,利用此参数,可以控制不同的帧类型(I、P、B)开启更细的帧切分(8×8、4×4),具体参数如下: I帧:i8x8、i4x4; P帧:p8x8(会同时开启p16x8和p8x16)、p4x4(会同时开启p8x4和p4x8); B帧:b8转载 2017-06-19 17:10:33 · 594 阅读 · 0 评论 -
ffmpeg字幕
转载自 dancing_night 增加字幕流 ffmpeg -i video.avi -i sub.ass -map 0:0 -map 0:1 -map 1 -c:a copy -c:v copy -c:s copy video.mkv提取字幕流 1)原始文本输出 ffmpeg -i output.mkv -an -vn -bsf:s mov2textsub -scodec copy转载 2017-06-19 17:12:46 · 1682 阅读 · 0 评论 -
ffmpeg中av_seek_frame使用样例
av_seek_frame使用时需要使用四个参数 av_seek_frame(fmt_ctx, -1 , 20 * AV_TIME_BASE, AVSEEK_FLAG_ANY);参数一: fmt_ctx为容器内容; 参数二: 流索引, stream_index 参数三: 将要定位处的时间戳 参数四: seek功能flag容器即AVFormatContext, 其中包含了一些视频标准格式中对应原创 2017-08-28 17:51:38 · 12827 阅读 · 1 评论 -
调用ffmpeg SDK对YUV视频序列进行编码
1、FFMpeg进行视频编码所需要的结构:为了实现调用FFMpeg的API实现视频的编码,以下结构是必不可少的:AVCodec:AVCodec结构保存了一个编解码器的实例,实现实际的编码功能。通常我们在程序中定义一个指向AVCodec结构的指针指向该实例。 AVCodecContext:AVCodecContext表示AVCodec所代表的上下文信息,保存了AVCodec所需要的一些参数。对于实现转载 2017-08-30 17:50:57 · 679 阅读 · 0 评论 -
ffmpeg中tbr tbc tbn的含义解释
因为最近的工作需要从MP4视频中提取一些关键帧,要了解如何将视频的时间点转换为对应的帧号,所以查阅了一些关于视频编解码以及时间同步方式的资料。再此总结一下。 首先是解码,利用FFmpeg解码得到的信息通常如下: Metadata: major_brand : isom minor_version : 512 compatible_brands: mp4转载 2017-09-01 15:12:00 · 4536 阅读 · 0 评论 -
ffplay查看运动向量及宏块的显示情况
MacroBlock相关信息: ffplay -debug vis_mb_type inputfile 使用该命令行执行后效果如下: 可以看到block的信息,可以显示出来; 通过这个列表可以看到对应的宏块类型。 Motion Vector相关信息 ffplay -vismv pf inputfile 使用该命令行以后效果如下:Vismv的参数有三种,分别为: -vismv pf – 向前预测转载 2017-09-01 15:25:33 · 1121 阅读 · 0 评论 -
ffmpeg将视频从隔行扫描转为逐行扫描
其实主要是这个参数 -deinterlace 隔行扫描的视频一般在播放的时候 会有横条感 逐行扫描的视频播放的时候感觉会好很多 会感觉清晰很多ffmpeg -i 1.mts -strict -2 -vcodec libx264 -vb 2000k -deinterlace -r 30 -vprofile high -vlevel 5.1 -acodec aac -ar 44100 -ab 1转载 2017-09-01 15:43:35 · 5766 阅读 · 0 评论 -
mpeg2-ts基础
一:基本概念1.ES–Elementary Streams(原始流)是直接从编码器出来的数据流,ES经过PES打包器之后,转换成PES包。ES仅是包含一种数据内容的数据流,如h.264视频或者aac音频数据。打包之后的PES也是只包含一种的ES,如只含视频ES的PES或者只含音频ES的PES。每个ES都由若干个存取单元(AU)组成,每个视频AU或者音频AU都由头部和编码数据两部分组成,一个AU相当于转载 2017-06-19 10:28:01 · 457 阅读 · 0 评论 -
ffmpeg 一些命令
1.修改分辨率率将输入为640*480的修改为320*249ffmpeg -i input -vf scale=iw/2:-2 outputiw:输入帧宽,此处为640,640/2=320。-1告诉scale filter保持纵横比,所以scale filter计算出值240.2.改变音视频播放速度1>视频2倍播放速度,音频两倍播放速度。ffmpeg -i input.mkv -filter:v “原创 2017-06-19 10:22:03 · 572 阅读 · 0 评论 -
常用FFMPEG命令
1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流 ffmpeg -i input_file -acodec copy -vn output_file_audio //分离音频流 2.视频解复用 ffmpeg -i test.mp4 -vcodec copy -an -f m4v test.2转载 2017-06-18 15:13:44 · 274 阅读 · 0 评论 -
如何利用AVDictionary配置参数
准备介绍下 ffmpeg 提供的一个非常好用的健值对工具:AVDictionary,特别是对于没有 map 容器的 c 代码,可以充分利用它来配置和定义播放器的参数,ffmpeg 本身也有很多 API 通过它来传递参数。AVDictionary 的用法简介AVDictionary 所在的头文件在 libavutil/dict.h,其定义如下: [cpp] view plain copy pr转载 2017-06-18 15:50:30 · 1496 阅读 · 0 评论 -
RTP头结构解析
RTP包头前12个固定字节机构图:0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-转载 2017-06-18 15:56:28 · 1305 阅读 · 0 评论 -
YUV RGB常见视频格式解析
I420是YUV格式的一种,而YUV有packed format和planar format两种,而I420属于planar format的一种。 同时I420表示了YUV的采样比例4:2:0。4:2:0的YUV并不是说没有V分量,而是指对于每一个行,只有一个U或者V分量。比如第一行里,是YUYYUY,到了第二行是YVYYVY,那么对于每一行来说就是4:2:0或者4:0:2。需要说明的是,这里的排转载 2017-06-18 16:08:14 · 982 阅读 · 0 评论 -
ffmpeg从MP4中提取h264的NALU
1.获取数据 ffmpeg读取mp4中的H264数据,并不能直接得到NALU,文件中也没有储存0x00000001的分隔符。下面这张图为packet.data中的数据从图中可以发现,packet中的数据起始处没有分隔符(0x00000001), 也不是0x65、0x67、0x68、0x41等字节,所以可以肯定这不是标准的nalu。其实,前4个字0x000032ce表示的是nalu的长度,从第5个字转载 2017-06-18 16:18:03 · 1198 阅读 · 0 评论 -
ffmpeg常用参数一览表
基本选项: -formats 输出所有可用格式 -f fmt 指定格式(音频或视频格式) -i filename 指定输入文件名,在linux下当然也能指定:0.0(屏幕录制)或摄像头 -y 覆盖已有文件 -t duration 记录时长为t -fs limit_size 设置文件大小上限 -ss time_off 从指定的时间(s)开始, [-]hh转载 2017-06-18 16:33:37 · 906 阅读 · 0 评论 -
h264编码速度质量参数设置
FFmpeg and x264 Encoding Guide 参数说明:http://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide preset 与编码速度和质量相关av_opt_set(c->priv_data, “preset”, “slow”, 0); Current presets in descending order of speed a转载 2017-06-18 16:39:14 · 8909 阅读 · 0 评论 -
h264编码原理以及I帧B帧P帧
前言 H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理论依据是:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内。所以对于一段变化不大图像画面,我们可以先编码出一个完整的图像帧A,随后的B帧就不编码全部图像,只写入与A帧的差别,这样B帧的大小就只有完转载 2017-06-18 17:02:04 · 1015 阅读 · 0 评论 -
音频,视频时间戳计算及每帧播放时间
av_rescale_q用于计算Packet的PTS。av_rescale_q的返回值是一个很大的整数,且每次计算的结果间隔很大。 不同于avcodec_encode_video改变AVCodecContext *avctx的pts(小整数,且间隔小)。av_rescale_q(a,b,c)是用来把时间戳从一个时基调整到另外一个时基时候用的函数。它基本的动作是计算a*b/c,但是这个函数还是必需的转载 2017-06-18 17:09:07 · 2953 阅读 · 0 评论 -
使用ffmpeg 获取视频总时长
以前一直以为知道pFormatContext后,通过其成员变量duration就是视频长度。但是通过实验,其数值都是很大的负数,一看就不对,最近看av_dump_format(),看到此函数输出了视频的时长,然后看了下源码,找到了获取视频的时长的方法 直接贴出 :if(pFormatCtx->duration!=AV_NOPTS_VALUE){ int hours,mins,secs,us;转载 2017-06-18 22:06:28 · 5658 阅读 · 0 评论 -
ffmpeg -比特率,帧率和文件大小
比特率和帧率是音视频基本的特性,对于音视频整体的质量有关键作用!如果知道比特率和持续时间,就可以计算输出文件的大小。 1.Frame(frequency)rate introduction 帧率就是每秒编码进视频文件的帧数目。人类的眼睛需要每秒至少15帧才能将图像连贯在一起。帧率的单位是HZ,LCD显示一般有60Hz的平率。 有2种类型的帧率-interlaced(denoted asi af转载 2017-06-19 09:50:34 · 18304 阅读 · 0 评论 -
ffmpeg 获取帮助的命令
1.Text help in FFmpeg tools ffmpeg有很多的控制台帮助信息。可以查找到比如编解码器等信息。 下面的选项对于ffplay和ffprobe适用。例如: ffmpeg -h decoder=flv2.Available bitstream filters ffmpeg -bsfs3.Available codecs ffmpeg -codecs……3.Availa转载 2017-06-19 09:57:25 · 2099 阅读 · 0 评论 -
ffmpeg -resize and scale
resize 的意思是改变长和宽,scale意思是用scale filter改变帧的大小。 1.Resizing video 宽和高用-s选项进行设置。要在output filename 之前设置。例如:初始化分辨率为320*240ffmpeg -i input_file -s 320*240 output_file2.预定义视频帧的大小下面的两个cmd有同样的效果ffmpeg -i input转载 2017-06-19 10:13:11 · 7475 阅读 · 0 评论 -
ffmpeg_Cropping video(剪裁视频)命令行
1.Cropping Basics老版本的ffmpeg有bottom, left, right, top选项,但是现在已经被废弃了,而改用crop filter来进行描述。值ow可从oh中得到,反之亦然,但是不可以从x和y中得到,因为x和y是从ow和oh中推断出来的。值x可从y中获取,反之亦然。比如:剪切输入帧的左第三,中第三,右第三,可以用下面的命令。ffmpeg -i input -vf cro转载 2017-06-19 10:19:56 · 2601 阅读 · 0 评论 -
使用ffmpeg将mp4转为ts(代码实现)
使用ffmpeg将mp4转为ts的命令格式如下 ffmpeg - i b.mp4 -codec copy -bsf h264_mp4toannexb a.ts如果不使用-bsf h264_mp4toannexb参数 会提示错误 主要是因为使用了mp4中的h264编码 而h264有两种封装: 一种是annexb模式 传统模式 有statrtcode SPS和PPS是在ES中 另一种是m原创 2017-09-01 16:15:23 · 18181 阅读 · 5 评论