ffmpeg
文章平均质量分 88
安卓兼职framework应用工程师
这个作者很懒,什么都没留下…
展开
-
Android FFmpeg视频添加水印
前言Android也是利用FFmpeg命令行的形式(混编),进行视频转码压缩。1.FFmpeg添加水印命令1.1.水印命令ffmpeg -iWildlife.wmv-vf "movie=panda.png[watermark];[in][watermark] overlay=10:10[out]"Marked.wmv原始视频文件路径:Wildlife.wmv水印图片路径:panda.p...原创 2020-01-02 20:11:50 · 2996 阅读 · 1 评论 -
ffmpeg shell编译脚本详解
编写ffmpeg编译脚本:ffmpeg-build.sh#!/bin/bash#1、首先:定义下载的库名称source="ffmpeg-3.4"#2、其次:定义".h/.m/.c"文件编译的结果目录#目录作用:用于保存.h/.m/.c文件编译后的结果.o文件cache="cache"#3、定义".a"静态库保存目录#pwd命令:表示获取当前目录staticdir=`pwd...原创 2019-12-12 09:40:46 · 635 阅读 · 0 评论 -
FFMPEG AvFilter使用实例(实现视频缩放,裁剪,水印等)
FFMPEG官网给出了FFMPEG 滤镜使用的实例,它是将视频中的像素点替换成字符,然后从终端输出。我在该实例的基础上稍微的做了修改,使它能够保存滤镜处理过后的文件。在上代码之前先明白几个概念:Filter:代表单个filter FilterPad:代表一个filter的输入或输出端口,每个filter都可以有多个输入和多个输出,只有输出pad的filter称为source,只有输入pad的f...原创 2019-12-10 15:00:26 · 2331 阅读 · 0 评论 -
ffmpeg 从内存中读取数据(或将数据写入内存)
从内存中读取数据ffmpeg一般情况下支持打开一个本地文件,例如“C:\test.avi”或者是一个流媒体协议的URL,例如“rtmp://222.31.64.208/vod/test.flv”其打开文件的函数是avformat_open_input(),直接将文件路径或者流媒体URL的字符串传递给该函数就可以了。但其是否支持从内存中读取数据呢?后来经过分析ffmpeg的源代码,发现其竟...原创 2019-12-10 14:51:21 · 1135 阅读 · 1 评论 -
ffmpeg AVPacket、AVPicture、AVFrame
一、AVPacket[cpp]view plain copy/**AVPacket 作为解码器的输入 或 编码器的输出。当作为解码器的输入时,它由demuxer生成,然后传递给解码器当作为编码器的输出时,由编码器生成,然后传递给muxer在视频中,AVPacket 只能包含不大于1帧的内容,而视频的1帧可能要包含在多个AVPacket中,AVPacket < AVFrame...原创 2019-12-10 14:42:24 · 2763 阅读 · 0 评论 -
FFmpeg 的sws_getContext函数 、sws_scale函数
FFmpeg里面的sws_scale库可以在一个函数里面同时实现:1.图像色彩空间转换;2.分辨率缩放;3.前后图像滤波处理。其核心函数主要有三个:// 初始化sws_scalestruct SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat,int dstW, int dstH, enum...原创 2019-12-10 14:33:15 · 240 阅读 · 0 评论 -
ffmpeg sws_scale函数的用法
如果想將某個PixelFormat轉換至另一個PixelFormat,例如,將YUV420P轉換成YUYV422,或是想變換圖的大小,都可以使用swscale達成。其中,PixelFormat 的列表在 libavutil/pixfmt.h 內定義。swscale的用法可以參考libswscale/swscale-example.c的sample code。主要function有三個sws_...原创 2019-12-10 14:30:58 · 405 阅读 · 0 评论 -
ffmpeg 关于avpicture_fill 和 sws_scale的关系
avpicture_fill((AVPicture *) pFrameRGB, buffer, PIX_FMT_RGB565, pCodecCtx->width, pCodecCtx->height);这句调用时,pFrameRGB和buffer都是已经申请到的一段内存, 会将pFrameRGB的数据按RGB565格式自动"关联"到buffer。sws_scale(img_conv...原创 2019-12-10 14:28:25 · 348 阅读 · 0 评论 -
ffmpeg avpicture_fill用法
1 int avpicture_fill(AVPicture *picture, uint8_t *ptr,int pix_fmt, int width, int height);这个函数的使用本质上是为已经分配的空间的结构体AVPicture挂上一段用于保存数据的空间,这个结构体中有一个指针数组data[4],挂在这个数组里。一般我们这么使用:1) pFrameRGB=avcodec_al...原创 2019-12-10 14:19:31 · 1100 阅读 · 0 评论 -
android FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
FFMPEG中的swscale提供了视频原始数据(YUV420,YUV422,YUV444,RGB24…)之间的转换,分辨率变换等操作,使用起来十分方便,在这里记录一下它的用法。swscale主要用于在2个AVFrame之间进行转换。下面来看一个视频解码的简单例子,这个程序完成了对"北京移动开发者大会茶歇视频2.flv"(其实就是优酷上的一个普通视频)的解码工作,并将解码后的数据保存为原始数据...原创 2019-12-10 14:16:28 · 699 阅读 · 0 评论 -
android ffmpeg提取视频中的i帧和p帧
在工作中会遇到提取视频中的i帧或者p帧的需求,现在来讲解下怎么实现这个功能,代码如下:int mp4_to_yuv(char * input_path, char * output_path){ //1、注册所有组件 av_register_all(); //2、打开视频文件 AVFormatContext *pFormatCtx = avformat_all...原创 2019-12-09 16:41:33 · 1160 阅读 · 2 评论 -
ffmpeg 常用命令大全
FFMPEG是特别强大的专门用于处理音视频的开源库。你既可以使用它的API对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频文件。本文将简要介绍一下 FFMPEG 库的基本目录结构及其功能,然后详细介绍一下我们在日常工作中,如何使用 ffmpeg 提供的工具来处理音视频文件。FFMPEG 目录及作用libavcodec: 提供了一系...原创 2019-12-09 15:01:03 · 289 阅读 · 0 评论 -
ffmpeg 结构体之AVStream和AVPacket
接下来我们来继续学习ffmpeg结构体AVStream和AVPacket这两个也是比较重要的第一部分 AVStream的学习AVStream结构体存储有关流(视频流或者音频流)的信息。此定义位于libavformat/avformat.h中。有关视频解码的主要成员:AVRational time_base:时间基本单位的分数表示。如图:time_base = 1/90000(单位:秒)...原创 2019-12-06 13:52:09 · 922 阅读 · 0 评论 -
ffmpeg重要结构体之AVCodec和AVIOContext
今天继续讲解ffmpeg结构体AvCodec和AVIOContext以便加深对ffmpge的理解一 . AVCodec的讲解AVCodec结构体是有关codec的结构体。在文件"libavcodec/avcodec.h" 中。其中解码相关的变量都很直观:const char *name:Codec的名字,此例子中为h264。enum AVMediaType type:媒体类型:视频。...原创 2019-12-06 13:45:29 · 346 阅读 · 0 评论 -
ffmpeg重要结构体之AVFrame和AVFormatContext
通过对FFmpeg的基本了解,我们知道可以通过利用其so库文件,输出YUV图像到文件,而解码后的图像(YUV)数据是存放在AVFrame结构体中的。第一部分我们就来了解下结构体AVFrame,源代码在 libavutil/frame.h中,运行输出YUV文件的解码程序对某媒体文件进行解码,在输出第一帧图像后,pFrame(为AVFrame结构的变量)见下图:其中主要的变量包括:uint8...原创 2019-12-06 13:38:37 · 524 阅读 · 0 评论 -
ffmpeg 编码器AVCodecContext 的配置参数和视频解码的重要成员讲解
今天重点讲解一下ffmpeg编码器AvCodecContext和解码的重要参数,这也是ffmpeg的重中之重。1、先讲一下基本的APIAVFormatContex * pFormatCtxEnc;AVCodecContext * pCodecCtxEnc; AVStream * video_st;AVOutputFormat * pOutputFormat; pOutputForm...原创 2019-12-06 13:26:14 · 5490 阅读 · 5 评论 -
ffmpeg 命令参数详解
ffmpeg是一个非常快速的视频和音频转换器,也可以从现场音频/视频源获取。它还可以在任意采样率之间进行转换,并通过高质量的多相滤波器实时调整视频大小。压缩视频ffmpeg -i pingcap-intro-converted.mp4 -b:v 64k -r 20 -c:v libx264 -s 640x320 -strict -2 pingcap.mp4获取封面ffmpeg -ss 00...原创 2019-12-06 11:30:31 · 6787 阅读 · 1 评论 -
android AudioTrack如何与AudioFlinger交换音频数据
引子Android Framework的音频子系统中,每一个音频流对应着一个AudioTrack类的一个实例,每个AudioTrack会在创建时注册到 AudioFlinger中,由AudioFlinger把所有的AudioTrack进行混合(Mixer),然后输送到AudioHardware中 进行播放,目前Android的Froyo版本设定了同时最多可以创建32个音频流,也就是说,Mixer...原创 2019-11-26 20:50:26 · 276 阅读 · 0 评论 -
ffmpeg 音频开发(1):基础知识
导读人的说话频率基本上为300Hz3400Hz,但是人耳朵听觉频率基本上为20Hz20000Hz。对于人类的语音信号而言,实际处理一般经过以下步骤:人嘴说话——>声电转换——>抽样(模数转换)——>量化(将数字信号用适当的数值表示)——>编码(数据压缩)——>传输(网络或者其他方式)——> 解码(数据还原)——>反抽样(数模转换)——>...原创 2019-11-20 19:14:06 · 486 阅读 · 0 评论 -
ffmpeg 解码流程和解码函数的讲解
引言ffmpeg 是一个非常好的开源音视频项目 ,想学习它 必须从最基本的解码 开始 下面就简单介绍下他的解码流程和解码函数1.FFmpeg的解码函数av_register_all() 注册所有组件avformat_open_input() 打开输入视频文件avformat_find_stream_info() 获取视频文件信息avcodec_find_decoder() 查找编码器...原创 2019-11-20 15:48:35 · 463 阅读 · 0 评论 -
FFmpeg 播放原理和专业术语的学习
术语在学习ffmpeg之前学习一些专业术语容器(Container) 容器就是一种文件格式,比如flv,mkv等。包含下面5种流以及文件头信息。流(Stream) 是一种视频数据信息的传输方式,5种流:音频(Audio Stream)、附件(t)、数据(d)、字幕(s)和视频(Video Stream)。帧(Frame) 帧代表一幅静止的图像,分为I帧,P帧,B帧。编解码器(Codec)...原创 2019-11-19 20:19:29 · 273 阅读 · 0 评论 -
ffmpeg 音频概念的详解
引言在用ffmpeg进行音视频开发的时候,往往会涉及到一些音频的专业名词。初看的时候感觉好像是懂的,但是在进行开发的时候,有好些参数却不知道为什么这么设置。下面就好好的看看,他们的具体含义。重要参数采样频率:每秒采集数据的次数采样位数:每次采集数据的位数语音编码(format):语音编码指语音数据存储和传输的方式声道(sound chanel):声音在录制时在不同空间位置采集的相互独...原创 2019-11-19 20:16:01 · 302 阅读 · 0 评论 -
android全平台编译ffmpeg以及x264实战
1.编译环境操作系统:ubuntu 16.05android-ndk-r14b注意 这里如果使用高版本比如android-ndk-r16b 编译会报错ffmpeg-3.3.9版本2.编辑ffmpeg-3.3.9的configure文件SLIBNAME_WITH_MAJOR=’(SLIBNAME).(SLIBNAME).(SLIBNAME).(LIBMAJOR)’LIB_INSTALL...原创 2019-05-07 16:15:33 · 653 阅读 · 0 评论 -
Android ffmpeg支持x264的编译脚本
1.编译x264:下载最新版的x264ftp://ftp.videolan.org/pub/videolan/x264/snapshots/1.解压到指定的目录2.切换当前目录为该目录3.创建一个shell脚本build_x264.sh,内容如下:#!/bin/bashexport NDK=/home/android/android-ndk-r14bexport SYSROOT...原创 2019-05-06 20:22:03 · 438 阅读 · 0 评论 -
Android ffmpeg解码后的音频帧保存为pcm数据
1.首先要解码每一帧数据,判断是否为音频帧// 循环读取一帧视频while (av_read_frame(fmt_ctx, &avPacket) >= 0) {//判断是否为视频流if (avPacket.stream_index == videoStream->index) {LOGE(“AVStream is VideoStream”);got_frame = ...原创 2019-05-06 09:56:56 · 708 阅读 · 0 评论 -
Android ffmpeg yuv原始数据写入yuv文件
1.首先要给yuv数据分配缓存空间u_int8_t *video_dst_data[4];int video_dst_linesize[4];int video_dst_bufsize;video_dst_bufsize=av_image_alloc(video_dst_data,video_dst_linesize,dec_ctx->width,dec_ctx->height...原创 2019-05-06 09:41:06 · 792 阅读 · 0 评论 -
Android硬编解码接口MediaCodec解析(一)
#0、本文概述MediaCodec是anroid api 16以后开发的硬编解码接口,英文文档参照这个链接,中文翻译可以参考这个链接。本文主要记录的是如何使用MediaCodec对视频进行编解码,最后会以实例的方式展示如何将Camera预览数据编码成H264,再把编码后的h264解码并且显示在SurfaceView中。本例不涉及音频的编解码。#1、MediaCodec编码视频使用MediaC...原创 2019-05-05 20:41:03 · 565 阅读 · 0 评论