Android系统攻城狮
《Android系统多媒体进阶实战》一书作者
展开
-
FFmpeg之将视频转为16:9(横屏)或9:16(竖屏)(三十六)
本篇目的:FFmpeg将视频转为16:9(横屏)或9:16(竖屏)ffmpeg是一个开源的跨平台音视频处理工具,可以用于录制、转换和流媒体处理。它支持几乎所有主流的音视频格式和编解码器,包括MP4、AVI、MOV、H.264、H.265等。ffmpeg可以通过命令行进行操作,也可以作为库被集成到其他程序中。它提供了丰富的功能,包括视频剪辑、合并、分离、转码、添加水印、调整音视频质量等。ffmpeg的强大功能和灵活性使其成为许多多媒体应用程序的首选工具。原创 2023-11-30 22:56:58 · 1760 阅读 · 0 评论 -
FFmpeg之Wx公众号图片尺寸不一致解决(三十五)
【代码】FFmpeg之修改图片尺寸(三十五)原创 2023-02-03 14:53:20 · 960 阅读 · 0 评论 -
FFmpeg之mp4/h264/yuv提取y、u、v分量(三十四)
【代码】ffmpeg之mp4/h264/yuv提取y、u、v分量。原创 2022-11-15 14:48:22 · 1345 阅读 · 0 评论 -
FFmpeg之录像时去掉B帧(三十三)
【代码】FFmpeg之录像时去掉B帧(三十三)原创 2022-11-08 20:19:05 · 450 阅读 · 0 评论 -
FFmpeg之获取video pts/dts(三十二)
【代码】FFmpeg之获取video pts/dts(三十二)原创 2022-11-08 19:35:03 · 1821 阅读 · 0 评论 -
FFmpeg之位图格式转换(三十一)
【代码】FFmpeg之将24位图转8位图(三十二)原创 2022-10-20 18:11:49 · 950 阅读 · 0 评论 -
FFmpeg之禁止输出banner log(三十)
FFmpeg之禁止输出banner log原创 2022-06-28 10:19:47 · 831 阅读 · 0 评论 -
FFmpeg4.3.2之ffplay log输出级别(三十)
# emacs ffmpeg-4.3.2/fftools/ffplay.cstatic int read_thread(void *arg){ VideoState *is = arg; AVFormatContext *ic = NULL; int err, i, ret; int st_index[AVMEDIA_TYPE_NB]; AVPacket pkt1, *pkt = &pkt1; int64_t stream_start_time;.原创 2021-09-15 11:06:31 · 522 阅读 · 0 评论 -
FFmpeg4.0.2 over版本av_register_all()流程(二十九)
av_register_all() 在新版本的ffmpeg4.2.2中, av_register_all()函数中已经不做实际的工作, 留在这里是做兼容性考虑!原创 2021-06-09 10:05:48 · 463 阅读 · 0 评论 -
FFmpeg之获取音视频信息(二十八)
1.test.c#include <stdio.h>#include <libavutil/log.h>#include <libavformat/avformat.h>int main(int argc, char *argv[]){ int ret; AVFormatContext *fmt_ctx = NULL; av_log_set_level(AV_LOG_DEBUG); //注册各种多媒体协议,已过时 //av_register_all(.原创 2021-06-08 16:29:25 · 477 阅读 · 0 评论 -
ffmpeg4.3.2版本:gstavdemux.c:486:24: error: AVStream has no member named ‘index_entries‘(二十七)
1.问题../ext/libav/gstavdemux.c:486:24: error: ‘AVStream {aka struct AVStream}’ has no member named ‘index_entries’ fftarget = stream->index_entries[keyframeidx].timestamp;2.解决1.ffmpeg4.3.2版本fftarget = stream->index_entries[keyframei...原创 2021-04-07 20:22:05 · 1425 阅读 · 0 评论 -
FFmpeg之x264/x265转码增加/去掉B帧(二十六)
1.avc转hevc转码默认带B帧# ffmpeg -i guomei_avc.mp4 -c:v libx265 has_b_frame.h265# ffmpeg -i guomei_avc.mp4 -c:v libx265 has_b_frame.mp42.avc转码hevc去掉B帧# ffmpeg -i guomei_avc.mp4 -c:v libx265 -preset ultrafast -x265-params "bframes=0" no_b_frame.h2653.avc去.原创 2021-03-12 16:26:30 · 3409 阅读 · 0 评论 -
FFmpeg之mp4提取/h265(二十五)
# ffmpeg -i test.mp4 -vcodec copy -f h264 test.h264# ffmpeg -i test.mp4 -vcodec copy -f hevc test.h265原创 2021-03-05 15:52:45 · 7136 阅读 · 3 评论 -
FFmpeg之wav转mp3(二十四)
1.下载开源编码库libmp3lame,然后编译、安装到系统https://nchc.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz# cd lame-3.100# ./configure --enable-shared --enable-static# make -j4# sudo make install2.下载ffmpeg编译(参考之前博文)# cd ffmpeg-4.3.1# ./configure --e.原创 2021-01-28 16:36:58 · 2454 阅读 · 0 评论 -
FFmpeg之YUV420排列原理(二十三)
一、RGB与YUV转换LCD显示的数据就是RGB来表示每个像素的颜色,黑白电视机与彩色电视机两种,为了兼容两种电视机,引入YUV格式代替RGB,其中Y表示亮度,U和V表示色差,黑白电视机只用Y信号,而彩色电视机可由YUV转换成RGB再显示颜色。YUV格式是ITU-R的标准,也叫YCbCr.YUV是由RGB格式的数据转换得来。Y <====> Y = 0.299 x R + 0.587 x G + 0.114 x B + 0 U <====> Cb = -0.169 x.原创 2021-01-17 23:48:11 · 524 阅读 · 0 评论 -
FFmpeg之获取yuv分量(二十二)
一、获取YUV420P(I420)像素数据中的Y、U、V分量# emacs test.c#include <stdlib.h>#include <stdio.h>int simplest_yuv420_split(char *path, int w, int h,int num){ FILE *fp=fopen(url,"rb+"); FILE *fp1=fopen("420_y.yuv","wb+"); FILE *fp2=fopen("420_u.yuv",.原创 2021-01-17 23:28:28 · 868 阅读 · 0 评论 -
FFmpeg之yuv裁剪(二十一)
1. 裁剪NV21或NV12需要注意Y、U、V三者的共用关系,Y的裁剪比较直接;但是对于U和V而言,U和V的大小各只有Y的大小的1/4(U的宽高和V的宽高都是Y的宽高的一半),因此在横纵向都要进行跳行,在横向由于U和V是交叉排序,width / 2 的V和 width / 2 的U加起来刚好就是Y的大小,可以直接按偏移量裁剪。void cropYuv420sp(char *yuv420sp, char *cropYuv420sp, int width, int height, int left,转载 2021-01-17 02:40:44 · 1415 阅读 · 0 评论 -
FFmpeg之yuv格式转换(二十)
####先介绍下转换中可能用到的一些函数:其中包括RGB和YUV的互换函数,源于网上流传较多的一些公式,以及经常重复用到的对齐函数// RGB、YUV互换int rgbToY(int r, int g, int b) { return (((66 * r + 129 * g + 25 * b + 128) >> 8) + 16);}int rgbToU(int r, int g, int b) { return (((-38 * r - 74 * g + 112转载 2021-01-17 02:39:07 · 1906 阅读 · 0 评论 -
FFmpeg之yuv旋转(十九)
一、 按像素点旋转图像假设有以下一张图像:Pixel1 Pixel2 Pixel3 Pixel4Pixel5 Pixel6 Pixel7 Pixel8其图像分辨率是widthxheight在顺时针旋转90度后,其内容将会变成:Pixel5 Pixel1Pixel6 Pixel2Pixel7 Pixel3Pixel8 Pixel4分辨率变成了heightxwidth也就是:原始数据第height - 1行第0列的像素点将会变成目...转载 2021-01-17 02:32:28 · 1748 阅读 · 0 评论 -
FFmpeg之yuv镜像(十八)
在开发相机相关程序时,由于人们习惯于看镜子,因此开发者们经常会遇到镜像显示预览数据的需求。各个手机厂家也了解这一点,因此一般手机打开相机切换到前置摄像头看到的画面都是镜像的。本文提供了一些常见YUV、RGB数据的水平镜像和垂直镜像方法。一、按像素点将图像镜像图像可按水平镜像和垂直镜像。假设有以下一张图像:Pixel1 Pixel2 Pixel3 Pixel4Pixel5 Pixel6 Pixel7 Pixel8在**水平镜像**后,新的镜像数据内容将会是:Pixel.转载 2021-01-17 02:02:09 · 673 阅读 · 0 评论 -
FFmpeg之YUV排列方式(十六)
一、图像颜色空间介RGB和YUV1.RGB颜色空间RGB颜色空间以Red、Green、Blue三种基本色,称之为"三原色"。常见的RGB格式有:RGB_565、RGB_888、ARGB_8888、ARGB_4444等。2.YUV颜色空间在YUV颜色空间中,Y用来表示亮度,U和V用来表示色度。常见的YUV格式:planar: Y、U、V全部连续存储,如I420、YV12packed: Y、U、V交叉存储,如YUYVsemi-planar: Y连续存储,U、V交叉存储,如NV21、NV12二原创 2021-01-17 01:19:32 · 627 阅读 · 0 评论 -
FFmpeg之libyuv使用(十五)
1.下载、编译、安装libyuv# git clone https://github.com/lemenkov/libyuv.git# cd libyuv# mkdir build# cd build# cmake ..# make -j4# sudo make install 2.demo.c原创 2021-01-16 21:09:42 · 1386 阅读 · 0 评论 -
FFmpeg之编译ffplay(十四)
问题: 若要ffmpeg源码编译出ffplay,需要先编译出SDL,安装到系统后,ffmpeg源码才能编译出ffplay.解决:一、编译SDL# wget http://libsdl.org/release/SDL2-2.0.14.tar.gz# tar zxvf SDL2-2.0.14.tar.gz# cd SDL2-2.0.14# mkdir build # cd build# cmake ..# make -j4# sudo make install二、编译ffmpeg.原创 2021-01-16 14:48:34 · 1499 阅读 · 0 评论 -
FFmpeg之视频/图片镜像旋转(十三)
//mp4向左旋转90度# ffmpeg -i input.mp4 -metadata:s:v rotate="90" -codec copy outut.mp4//mp4向右旋转90度# ffmpeg -i input.mp4 -metadata:s:v rotate="-90" -codec copy outut.mp4//mp4左右镜像翻转# ffmpeg -i input.mp4 -vf "hflip" outut.mp4//mp4上下镜像翻转# ffmpeg -i inp.原创 2021-01-15 23:23:08 · 4624 阅读 · 1 评论 -
FFmpeg之mp4转nv12(yuv420)(十二)
//将mp4转成nv12(yuv420)# ffmpeg -i guomei.mp4 -f rawvideo -s 864x486 -pix_fmt nv12 output.nv12//播放nv12# ffplay -f rawvideo -video_size 864x486 -pix_fmt nv12 output.nv12原创 2021-01-15 20:39:26 · 3941 阅读 · 0 评论 -
FFmpeg之wav/aac转pcm(十一)
1.wav转pcm# ffmpeg -i Young.wav -f s16be -ar 44100 -ac 2 -acodec pcm_s16be Young.pcm2.播放pcm# ffplay -ar 44100 -channels 2 -f s16be -i Young.pcm原创 2020-12-23 10:40:09 · 3258 阅读 · 0 评论 -
Win10使用FFmpeg操作Camera(十)
环境:本文以Win10为例。1.下载https://ffmpeg.zeranoe.com/builds/2.配置环境 ---->计算机 ---->属性 ----->高级系统设置 ----->系统变量 ----->Path ------->新建:添加路径即可:D:\installer\ffmpeg-4.3-win64-static\bin3.测试# ffmpeg -versionffmpe.原创 2020-09-12 21:27:18 · 606 阅读 · 0 评论 -
FFmpeg h264转h265命令(九)
1.裸流之间的转换# ffmpeg -i test.h264 test.hevc2.MO4封装h264转换到h265# ffmpeg -i input.mp4 -c:v libx265 output.mp4原创 2020-09-11 11:15:45 · 11118 阅读 · 1 评论 -
FFmpeg mp4转yuv播放/截取帧(八)
1.mp4转yuv# ffmpeg -i guomei.mp4 guomei.yuv2.播放# ffplay -f rawvideo -video_size 864x486 -i guomei.yuv注意:必须指定转码之前分辨率分辨率:864x4863.按时间截取前5秒帧视频# ffmpeg -ss 00:00:00 -i guomei.mp4 -to 00:00:10 -c copy out05.mp4...原创 2020-09-10 11:56:27 · 2958 阅读 · 1 评论 -
NDK-r17c编译FFmpeg4.3(支持硬编解码与neon)(七)
下载android-ndk-r17cNDK17之前版本报错,升级到NDK17,不要升级到NDK17以后版本,因为17以后版本GCC分离。原创 2020-07-25 16:58:07 · 821 阅读 · 0 评论 -
FFmpeg流媒体调试工具(六)
码流分析也是播放器开发中必备方法,可以帮助我们查看码流信息,确认码流是否正常,对问题分析起到事半功倍的作用。介绍些常用的分析工具及方法。1 编解码信息一般通过VLC或者mediainfo,选择工具–>编解码信息,即可查看码流编解码信息,包括编码格式,帧率,采样率。2 查阅每一帧eseye_u.exe工具 ,在获取到播放流之后,可以使用该工具查阅流每一帧的情况。该工具也可以直接导入ES流。1) 工具可以列处每一帧信息,并将其解码显示。例如图中这一个I帧,明显有残缺,那转载 2020-07-11 00:47:16 · 1433 阅读 · 0 评论 -
FFmpeg编解码过程(五)
下面我针对学习路线中的各部分单独做一下介绍视音频基础知识: 视频、图像、音频的格式。这里的“格式”是一个广义的概念,既包括MP4,FLV这样的封装格式,也包括H264,MPEG2这样的编码格式,还包括420 422 444这样的取样格式,甚至RGB,HSV,YUV这样的彩色空间也可以算作一种格式,将来在应用时还可能会遇到RTMP,HLS这样的流媒体传输协议或者其他的协议,都可以算作格式。这些纷繁复杂的格式就好比学英语时要背的单词,初学的时候可能觉得看不见摸不着,将来落实到代码上却是...原创 2020-07-06 19:31:03 · 406 阅读 · 0 评论 -
FFmpeg查看支持的封装、编解码器、滤镜(四)
ffmpeg在做音视频编解码时非常方便,所以在很多场景下转码使用的是ffmpeg,通过ffmpeg --help可以看到ffmpeg常见的命令大概分为6个部分,具体如下。ffmpeg信息查询部分 公共操作参数部分 文件主要操作参数部分 视频操作参数部分 音频操作参数部分 字幕操作参数部分ffmpeg信息查询部分的主要参数具体如下:通过ffmpeg --help查看到的help信息是ffmpeg命令的基础信息,如果想获得高级参数部分,那么可以通过使用ffmpeg --help long参数原创 2020-06-28 13:45:37 · 2557 阅读 · 1 评论 -
FFmpeg编码支持与定制(三)
1.FFmpeg编码支持与定制FFmpeg本身支持一些音视频编码格式、文件封装格式与流媒体传输协议,但是支持的数量依然有限,FFmpeg所做的只是提供一套基础的框架,所有的编码格式、文件封装格式与流媒体协议均可以作为FFmpeg的一个模块挂载在FFmpeg框架中。这些模块以第三方的外部库的方式提供支持,可以通过FFmpeg源码的configure命令查看FFmpeg所支持的音视频编码格式、文件封装格式与流媒体传输协议,对于FFmpeg不支持的格式,可以通过configure--help查看所需要的第三方原创 2020-06-28 11:29:13 · 567 阅读 · 0 评论 -
FFmpeg的编解码(二)
ffmpeg是FFmpeg源代码编译后生成的一个可执行程序,其可以作为命令行工具使用。本节将通过实际的示例分析,对ffmpeg编解码工具的使用方法进行详细的介绍。首先列举一个简单的例子: 1 ./ffmpeg -i input.mp4 output.avi 这条命令行执行过程输出如下:这是一条简单的ffmpeg命令,可以看到,ffmpeg通过-i参数将input.mp4作为输入源输入,然后进行转码与转封装操作,输出到output.avi中,这条命令主原创 2020-06-24 14:38:59 · 311 阅读 · 0 评论 -
FFmpeg的模块介绍(一)
1.FFmpeg的基本组成FFmpeg框架的基本组成包含AVFormat、AVCodec、AVFilter、AVDevice、AVUtil等模块库。下面针对这些模块做一个大概的介绍。(1)FFmpeg的封装模块AVFormatAVFormat中实现了目前多媒体领域中的绝大多数媒体封装格式,包括封装和解封装,如:MP4、FLV、KV、TS等文件封装格式, RTMP、RTSP、MMS、HLS等网络协议封装格式。FFmpeg是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。根据原创 2020-06-24 14:29:34 · 957 阅读 · 0 评论 -
视频编解码学习(六):YUV格式学习
1.YUV格式详解参考文章 :http://blog.youkuaiyun.com/linweig/article/details/5515928http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.htmlhttp://blog.youkuaiyun.com/leixiaohua1020/article/details/253461转载 2016-10-09 22:27:38 · 630 阅读 · 0 评论 -
Mac使用NDK编译FFmpeg4.0.2单独so库(验证可用)
ffmpeg下载1、修改ffmpeg-4.0.2源码下configure文件将该文件中的如下四行:SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)...原创 2018-08-22 18:59:10 · 890 阅读 · 2 评论 -
Ffmpeg框架结构解读
1、 FFMEPG结构说明 1.1》介绍 ffmpeg(Fast Forward Moving Pictures Experts Group)是音视频的分离,转换,编码解码及流媒体的完全解决方案,其中最重要的就是libavcodec库,是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。ffmpeg的开发是基于Linux操作系统,但是可以在大多数操作系转载 2016-09-29 18:18:41 · 546 阅读 · 0 评论 -
ffmpeg(5):SDL相关学习
转自:http://blog.youkuaiyun.com/oldmtn/article/details/20853117SDL学习资料1SDL在Wiki上的介绍:http://zh.wikipedia.org/wiki/SDLSDL新手例子入门:http://adolfans.github.io/sdltutorialcn/sdl-2-dot-0-tutorial-index/SDL转载 2016-10-09 22:26:28 · 431 阅读 · 0 评论