音视频之ffmpeg
文章平均质量分 83
开源软件ffmpeg在音视频领域的地位无可撼动,需要我们好好学习
WenCoo
擅长linux下软件开发,qt,ffmpeg音视频二次开发。
展开
-
ffmpeg学习日记5-使用ffmpeg进行h264解码
ffmpeg学习日记5-使用ffmpeg进行h264解码文章目录首先解惑几个专业术语:解码步骤函数解释项目环境介绍编码中的报错释义报错1ubuntu安装libx264ubuntu下将libx264编译进ffmpeg报错2安装新版本后的编译环境项目完整代码如下参考后记当我们确定一个视频的编码格式是使用h264进行编码的,那么就可以进行对应的解码,将视频解码之后,解码数据才可以进行相应的渲染,加特效的操作,下面学习如何对视频进行解码。首先解惑几个专业术语:YUV数据YUV:视频像素格式 YUV数原创 2022-02-10 20:26:40 · 6881 阅读 · 0 评论 -
ffmpeg学习日记1-ffmpeg的基本介绍(相关概念理解,资料收集)
ffmpeg学习日记1-ffmpeg的基本介绍(相关概念理解,资料收集)文章目录ffmpeg的背景介绍ffmpeg下载地址ffmpeg 基本用法H264介绍Linux-centos安装ffmpegLinux-ubuntu安装ffmpegubuntu安装qt安装ffmpegwin安装ffmpegffmpeg解压缩264ffmpeg下载地址ffmpeg的背景介绍FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频原创 2022-02-10 20:10:27 · 386 阅读 · 0 评论 -
ffmpeg学习日记4-使用ffmpeg获取视频文件属性值
ffmpeg学习日记4-使用ffmpeg获取视频文件属性值文章目录项目完整代码如下参考:avcodec_get_name 函数获取视频编码格式 h264项目完整代码如下建立qt项目outputInfo,pro内容如下:TEMPLATE = appCONFIG += console c++11CONFIG -= app_bundleCONFIG -= qtSOURCES += \ main.cppwin32 {INCLUDEPATH += $$PWD/../incl原创 2022-02-10 20:22:03 · 2025 阅读 · 0 评论 -
ffmpeg学习日记2-新建工程打印ffmpeg版本
ffmpeg学习日记2-新建工程打印ffmpeg版本。原创 2022-02-10 20:11:53 · 1635 阅读 · 0 评论 -
ffmpeg学习日记8-YUV的几个知识点
ffmpeg学习日记8-YUV的几个知识点介绍yuv相关的文章有很多,其中找到的相关概念我就不在这里介绍了,我在这里记录几点我作为新手是琢磨了很久才理解几个点。YUV420P的存储读写问题frame结构中存储的就是yuv数据,yuv三种数据在内存中是连续的,当pix_fmt=PIX_FMT_YUV420P时,data中的数据是按照YUV的格式存储的,也就是:data -->YYYYYYYYYYYYYYUUUUUUUUUUUUUVVVVVVVVVVVV^ ^ ^| | |data[0] d原创 2022-02-10 20:28:26 · 1085 阅读 · 0 评论 -
ffmpeg学习日记3-视频格式和视频编码的关系
ffmpeg学习日记3-视频格式和视频编码的关系最近开始接触音视频方面,之前一点也没有接触过,现在是一头雾水,需要摸着石头过河。首先来了解一下平时见到的rmvb,mp4,等等格式,和我最近了解的h264是什么关系?概念介绍首先来了解3个基础概念:视频文件格式(简称:文件格式),视频封装格式(简称:视频格式),视频编码方式(简称:视频编码)一. 视频文件格式(简称:文件格式):我们知道Windows系统中的文件名都有后缀,例如1.doc,2.wps,3.psd等等。Windows设置后缀名的目的是让原创 2022-02-10 20:17:52 · 1214 阅读 · 2 评论 -
ffmpeg学习日记21-缓存AVPacket数据
ffmpeg学习日记21-缓存AVPacket数据avpacket中存储的是压缩过后的数据,数据量并不是很大,在合成视频之前,需要将该部分数据存在内存中,待合成使用。创建一个存储器std::list<AVPacket *> deque;av_read_frame函数读出来avpacket,此处可以将avpacket结构中的数据单独存起来,也可以将整个avpacket结构存储起来,我选择后者的实现方式 while (av_read_frame(&(*ctx->fmt_ct原创 2022-02-10 20:52:19 · 967 阅读 · 0 评论 -
ffmpeg学习日记701-报错-co located POCs unavailable
报错-co located POCs unavailable原创 2022-11-11 11:50:28 · 4010 阅读 · 0 评论 -
ffmpeg学习日记17-获取MP4视频流的帧率
ffmpeg学习日记17-获取MP4视频流的帧率参考各位大佬的文章,终于磕磕绊绊的理解,写出了获取MP4视频流的帧率等信息的代码win10系统下运行代码如下:getMp4FrameNum.proTEMPLATE = appCONFIG += console c++11CONFIG -= app_bundleCONFIG -= qtSOURCES += \ main.cppwin32 {INCLUDEPATH += $$PWD/../includeLIBS += $原创 2022-02-10 20:31:16 · 4521 阅读 · 0 评论 -
ffmpeg学习日记19-判断AVPacket中的一帧数据是否为关键帧
ffmpeg学习日记19-判断AVPacket中的一帧数据是否为关键帧从视频转到h264,其264数据存放结构是AVPacket,所以要利用AVPacket结构中的数据来判断关键帧,关键帧就是I帧。方法一:通过数据解析协议来判断最简单的办法是找0x65或0x25(I frame启始位),或者去找0x67或0x27(SPS)和0x68或0x28(PPS)后面的完整包。SPS和PPS后面必然跟着I frame。方法二:通过AVPacket中的标志来判断如何判断当前AVPacket是否为关键帧呢?答原创 2022-02-10 20:47:27 · 3712 阅读 · 0 评论 -
ffmpeg学习日记509-源码-从ffmpeg 源码提取编码的流程分析
目标通过前面对源码的分析,写出了源码分析501,502,503三遍文章,算是初步了解了ffmpeg源码的运行流程,可以是我们在网上查找资料发现,网上提供的编解码流程很是清晰明了,似乎是提取提炼过得,所以我们接下来比对网上提供的编解码流程,来查看源码,在源码中找到提炼的痕迹。已总结好的编解码流程avformat_open_input 打开媒体文件avformat_find_stream_info 初始化AVFormatContext_匹配到视频流的indexavcodec_find原创 2022-05-21 22:45:04 · 329 阅读 · 0 评论 -
ffmpeg学习日记503-源码-transcode()函数分析
ffmpeg学习日记503-源码-transcode()函数分析接着继续main分析://获取基准时间,合成要用current_time = ti = get_benchmark_time_stamps(); if (transcode() < 0) exit_program(1); if (do_benchmark) { int64_t utime, stime, rtime; current_time = get_benchma原创 2022-03-31 00:18:37 · 3218 阅读 · 0 评论 -
ffmpeg学习日记506-源码-av_image_copy()函数分析及功能
ffmpeg学习日记506-源码-av_image_copy()函数分析及功能实现文件av_image_copy()实现在libavutil/imgutils.c中函数原型void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], const uint8_t *src_data[4], const int src_linesizes[4], enum AVPi原创 2022-05-21 22:43:41 · 1182 阅读 · 0 评论 -
ffmpeg学习日记504-源码-readme汉化
FFmpeg自述文件=============FFmpeg是处理多媒体内容的库和工具的集合例如音频、视频、字幕和相关元数据。图书馆*'libavcodec’提供了更广泛编解码器的实现。*libavformat实现流协议、容器格式和基本I/O访问。*libavutil包括哈希器、解压器和其他实用程序函数。*'libavfilter’提供了一种通过过滤器链改变解码音频和视频的方法。*libavdevice提供了一个访问捕获和回放设备的抽象。*libswresample实现音频混合和重采样例程翻译 2022-03-31 00:14:49 · 200 阅读 · 0 评论 -
ffmpeg学习日记502-源码-ffmpeg_parse_options()函数分析
源码分析一分析到了parse_loglevel(),继续往下,接下来代码如下://argv[1]中包含”-d”,则进入if逻辑,回调log_callback_null函数内容是空的,ffmpeg的指令中也没有单独找到”-d”的选项,都是与”n”结合的,所以,这里的代码是什么意思,没有想明白if(argc>1 && !strcmp(argv[1], "-d")){ run_as_daemon=1; av_log_set_callback(log_cal原创 2022-03-31 00:22:50 · 1302 阅读 · 0 评论 -
ffmpeg学习日记11-使用ffmpeg将视频格式转换为视频编码h264格式
ffmpeg学习日记11-使用ffmpeg将视频格式转换为视频编码h264格式前言将一种视频格式,例如mp4的视频,转换成对饮的视频编码h264格式的文件,实现功能的方式有两种,一种是调用ffmpeg工具,通过命令行进行转换,另一种是通过调用ffmpeg的函数,自己写代码进行转换,我们现在的要用第二种实现来完成这个功能。ffmpeg工具源码分析ffmpeg源码版本:4.1通过全文检索,确定生成ffmpeg工具的Makefile是在/fftools/Makefile中,makefile的内容比较简单原创 2022-02-10 20:30:28 · 6230 阅读 · 0 评论 -
ffmpeg学习日记508-源码-ffmpeg --help 汉化
$ ffmpeg --helpffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers built with gcc 9 (Ubuntu 9.3.0-10ubuntu2) configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --in原创 2022-05-21 22:44:27 · 462 阅读 · 0 评论 -
ffmpeg学习日记501-源码-parse_loglevel()函数
ffmpeg学习日记501-源码-parse_loglevel()函数文章目录ffmpeg 输出视频的YUV420原始数据 指令:note打开fftools/ffmpeg.c查看main入口函数进行分析:options定义如下:parse_loglevel(argc, argv, options);定义如下:locate_option定义如下:find_option定义如下:OptionDef 定义如下:av_strstart定义如下:check_options定义如下:av_assert0定义如下:参考原创 2022-03-31 00:16:34 · 2456 阅读 · 4 评论 -
ffmpeg学习日记702-报错-包含‘PRId64‘的报错
报错-包含'PRId64'的报错原创 2022-11-11 11:51:17 · 551 阅读 · 0 评论 -
ffmpeg学习日记22-内存读取avio_alloc_context函数的内存释放问题
ffmpeg学习日记22-内存读取avio_alloc_context函数的内存释放问题在开发内存读写数据过程中,遇到了内存泄露的问题,泄漏点围绕着avio_alloc_context函数,在内存中读写数据参考雷神文章ffmpeg 从内存中读取数据(或将数据输出到内存),在雷神的文章中,只讲述了如何实现内存读写的功能,没有讲到内存释放,或许这根本就不是问题。 // Input if (!(ifmt_ctx_v = avformat_alloc_context())) { s原创 2022-02-11 14:55:43 · 1714 阅读 · 0 评论 -
ffmpeg学习日记612-指令-转换视频格式
转换视频格式原创 2022-12-03 21:19:37 · 638 阅读 · 0 评论 -
ffmpeg学习日记601-指令-视频裁剪,添加bgm合成mp4
# 实现功能:1. 截取视频片段2. 将截取的视频合成视频3. 将视频添加bgm,合成成品mp4原创 2022-12-03 21:14:26 · 573 阅读 · 0 评论 -
ffmpeg学习日记122-视频-获取视频的解码器,yuv格式名称,理解编码格式,封装格式,yuv格式的关系
所以,我想要将png图片直接封装成mp4是不可以的,需要解码,解码之后得到的是png的yuv格式数据,需要将png格式的yuv数据(带透明通道)转换成yuv420的格式数据,才能够将编码封装成的mp4正确播放,否则生成的mp4播放内容是错误的。原创 2023-05-25 17:59:00 · 633 阅读 · 0 评论 -
ffmpeg学习日记604-指令-将视频格式转为H264格式
将视频格式转为H264格式原创 2022-12-03 21:16:38 · 5958 阅读 · 0 评论 -
ffmpeg学习日记607-指令-将mp4视频转yuv
将mp4视频转yuv原创 2022-12-03 21:18:53 · 792 阅读 · 0 评论 -
ffmpeg学习日记101-视频-MP4提取YUV数据,每一帧保存为pgm图片
ffmpeg学习日记101-视频-MP4提取YUV数据,每一帧保存为pgm图片。原创 2023-05-18 10:43:23 · 702 阅读 · 0 评论 -
ffmpeg学习日记606-指令-将视频转为全I帧
将视频转为全I帧原创 2022-12-03 21:18:30 · 681 阅读 · 0 评论 -
ffmpeg学习日记29-使用vscode调试ffmpeg源码
disable-stripping 注意一定要加–disable-stripping, 如果不加此选项,ffmpeg在编译时,会使用strip去掉符号信息。ffmpeg版本ffmpeg-4.1.10。–enable-debug 设置调试级别。创建launch.json文件,内容如下。在源码中打断点,查看是否进入调试模式。原创 2023-05-30 22:31:42 · 1279 阅读 · 0 评论 -
ffmpeg学习日记512-源码-ubuntu20.04下源码编译
重新编译,由于我知道ffmpeg,所以禁用ffplay和ffprobe。提示缺少pkg-config。编译完成,执行命令验证。到此,源码编译完成。原创 2023-05-04 09:57:46 · 265 阅读 · 0 评论 -
ffmpeg学习日记122-视频-获取视频的解码器,yuv格式名称,理解编码格式,封装格式,yuv格式的关系
所以,我想要将png图片直接封装成mp4是不可以的,需要解码,解码之后得到的是png的yuv格式数据,需要将png格式的yuv数据(带透明通道)转换成yuv420的格式数据,才能够将编码封装成的mp4正确播放,否则生成的mp4播放内容是错误的。原创 2023-05-30 22:28:51 · 503 阅读 · 0 评论 -
ffmpeg日记1011-过滤器-语法高阶,逻辑,函数使用
实现的是2秒后logo从左到右移动,参数释义if(gte(t\,2)\,((t-2)*80)-w\,NAN) : 对水印坐标x的处理80 移动的距离,单位像素从这条命令中,可以看到,控制logo移动的重点设置在x的值设置,很明显,这其中涉及到特定的语法,本文的重点,就是来看这个特定的语法到底是如何定义的,怎样使用。有些过滤器支持通用的启用选项。对于支持时间轴编辑的过滤器,可以将此选项设置为在向过滤器发送帧之前求值的表达式。如果评估值非零,过滤器将被启用,否则帧将被原封不动地发送到过滤器图中的下一个过滤器。原创 2023-05-19 20:52:24 · 619 阅读 · 1 评论 -
ffmpeg学习日记614-指令-获取文件时长
ffmpeg学习日记614-指令-获取文件时长。原创 2023-12-04 22:13:11 · 1089 阅读 · 0 评论 -
ffmpeg学习日记612-指令-转换视频格式
ffmpeg学习日记612-指令-转换视频格式。原创 2022-12-16 21:13:54 · 740 阅读 · 0 评论 -
ffmpeg学习日记619-指令-透明通道视频相关指令
只能封装为webm,argb数据转yuva420后编码。只能封装为mov,不可以封装为mp4。可以封装为 mp4、mov等。原创 2023-12-04 22:15:01 · 2166 阅读 · 0 评论 -
ffmpeg日记4001-原理介绍-视频切割原理
这里的操作是将一种视频格式切割,之后生成的视频是同样的格式,所以直接是参数的复制即可,如果要生成另一种格式的视频,应该要单独设置设置输出视频格式的参数。原创 2024-03-11 11:26:27 · 527 阅读 · 0 评论 -
ffmpeg学习日记603-指令-获取视频分辨率
获取视频分辨率原创 2022-12-03 21:15:54 · 2265 阅读 · 0 评论 -
ffmpeg学习日记602-指令-转换视频的分辨率
指令-转换视频的分辨率原创 2022-12-03 21:15:32 · 848 阅读 · 2 评论 -
ffmpeg学习日记121-视频-各种图片转yuv
这其中有一个功能点需要注意,不同的图片格式封装算法不同,所以解码使用的解码器也不同,我现在不清楚什么格式对应什么解码器,所以采用通过id的方式来查找解码器,是一种靠谱的行为。图片的解码方式和视频解码是一样的,因为视频是由一副一副的图片组成的,只不过视频的帧会前后参考,而图片是单独的一帧的格式封装。使用ffplay进行播放查看,需指定格式。原创 2023-06-19 10:59:55 · 1038 阅读 · 0 评论 -
ffmpeg学习日记605-指令-获取视频的总帧数
获取视频的总帧数原创 2022-12-03 21:17:09 · 2071 阅读 · 0 评论 -
ffmpeg学习日记513-源码-configure_filtergraph()函数分析及功能
template_tagsffmpeg-4.1.10fftools/ffmpeg_filter.c参数释义fg:传入过滤图的结构体指针返回值:正确返回0,失败返回原创 2023-05-04 10:02:00 · 774 阅读 · 0 评论