ffmpeg新手入门的两大天坑,都是泪呀!

避坑指南:解决Docker容器内OpenCV+FFmpeg Nvidia硬解码的‘驱动版本不匹配’天坑 本文深度解析Docker容器中OpenCV+FFmpeg硬解码的版本兼容性问题,特别是Nvidia驱动版本不匹配的常见陷阱。通过实战案例,提供从宿主机环境检测到容器内库文件注入的完整解决方案,帮助开发者实现GPU视频硬解码的高效部署。 阅读详情

前天准备使用ffmpeg来做个视频文件的解析程序,由于,一直没有关注过这个库,就以opencv的使用习惯去用这个库,结果,坑了整整两天。

一、头文件需要extern “C”

先上ffmpeg的头文件正确include的写法:

extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
}

如果,不加extern “C”,编译不报错,就是链接失败,一大堆的
error LNK2001: 无法解析的外部符号:

1>main.obj : error LNK2001: 无法解析的外部符号 "int __cdecl avformat_open_input(struct AVFormatContext * *,char const *,struct AVInputFormat const *,struct AVDictionary * *)" (?avformat_open_input@@YAHPEAPEAUAVFormatContext@@PEBDPEBUAVInputFormat@@PEAPEAUAVDictionary@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "int __cdecl avcodec_receive_packet(struct AVCodecContext *,struct AVPacket *)" (?avcodec_receive_packet@@YAHPEAUAVCodecContext@@PEAUAVPacket@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "struct AVCodec const * __cdecl avcodec_find_decoder(enum AVCodecID)" (?avcodec_find_decoder@@YAPEBUAVCodec@@W4AVCodecID@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "int __cdecl av_read_frame(struct AVFormatContext *,struct AVPacket *)" (?av_read_frame@@YAHPEAUAVFormatContext@@PEAUAVPacket@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "struct SwsContext * __cdecl sws_getContext(int,int,enum AVPixelFormat,int,int,enum AVPixelFormat,int,struct SwsFilter *,struct SwsFilter *,double const *)" (?sws_getContext@@YAPEAUSwsContext@@HHW4AVPixelFormat@@HH0HPEAUSwsFilter@@1PEBN@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "int __cdecl sws_scale(struct SwsContext *,unsigned char const * const * const,int const * const,int,int,unsigned char * const * const,int const * const)" (?sws_scale@@YAHPEAUSwsContext@@QEBQEBEQEBHHHQEBQEAE2@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "int __cdecl avcodec_parameters_to_context(struct AVCodecContext *,struct AVCodecParameters const *)" (?avcodec_parameters_to_context@@YAHPEAUAVCodecContext@@PEBUAVCodecParameters@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "void __cdecl av_packet_free(struct AVPacket * *)" (?av_packet_free@@YAXPEAPEAUAVPacket@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "void __cdecl av_frame_free(struct AVFrame * *)" (?av_frame_free@@YAXPEAPEAUAVFrame@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "int __cdecl avcodec_send_frame(struct AVCodecContext *,struct AVFrame const *)" (?avcodec_send_frame@@YAHPEAUAVCodecContext@@PEBUAVFrame@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "int __cdecl avcodec_receive_frame(struct AVCodecContext *,struct AVFrame *)" (?avcodec_receive_frame@@YAHPEAUAVCodecContext@@PEAUAVFrame@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "int __cdecl avcodec_open2(struct AVCodecContext *,struct AVCodec const *,struct AVDictionary * *)" (?avcodec_open2@@YAHPEAUAVCodecContext@@PEBUAVCodec@@PEAPEAUAVDictionary@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "struct AVCodec const * __cdecl avcodec_find_encoder(enum AVCodecID)" (?avcodec_find_encoder@@YAPEBUAVCodec@@W4AVCodecID@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "struct AVCodecContext * __cdecl avcodec_alloc_context3(struct AVCodec const *)" (?avcodec_alloc_context3@@YAPEAUAVCodecContext@@PEBUAVCodec@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "struct AVPacket * __cdecl av_packet_alloc(void)" (?av_packet_alloc@@YAPEAUAVPacket@@XZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "int __cdecl avcodec_send_packet(struct AVCodecContext *,struct AVPacket const *)" (?avcodec_send_packet@@YAHPEAUAVCodecContext@@PEBUAVPacket@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "void __cdecl av_packet_unref(struct AVPacket *)" (?av_packet_unref@@YAXPEAUAVPacket@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "int __cdecl av_frame_get_buffer(struct AVFrame *,int)" (?av_frame_get_buffer@@YAHPEAUAVFrame@@H@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "int __cdecl avformat_find_stream_info(struct AVFormatContext *,struct AVDictionary * *)" (?avformat_find_stream_info@@YAHPEAUAVFormatContext@@PEAPEAUAVDictionary@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "struct AVFrame * __cdecl av_frame_alloc(void)" (?av_frame_alloc@@YAPEAUAVFrame@@XZ)

二、avformat_open_input的中文路径

这个就是更加了,也不知我的VS哪里设置有问题,我折腾了整整一天,avformat_open_input函数一直返回失败。直到后面,我把视频文件放到非中文路径,读取成功,我才怀疑路径字符的编码问题。
解决办法,加u8:

const char* url = u8"D:/DataSet/自制素材/20241230/VID_20241230_134824.mp4";

如果,大家有别的解决方案,可以在评论区留言讨论。

三、小结下

算法搞多了,动手编码的能力下降了,程序员的基本素养得提高。

FFmpeg音视频开发避坑指南:从环境配置到第一个C程序 本文为Windows平台下使用Visual Studio进行FFmpeg音视频开发的实战指南。详细讲解了从获取正确开发包、配置Visual Studio项目环境,到编写并运行第一个验证程序的全过程,重点解析了环境配置中的常见陷阱与解决方案,并初步介绍了FFmpeg的核心数据结构和API,帮助开发者快速搭建开发环境并入门。 阅读详情

相关推荐

FFmpeg实战:drawtext滤镜进阶应用与中文水印疑难解析

本文深入解析FFmpeg drawtext滤镜在添加中文水印与动态文本时的进阶应用与疑难问题。针对中文显示乱码、字体路径设置、动态时间戳生成及多水印叠加等核心痛点,提供了从命令行到API编程的完整解决方案与排查指南,帮助开发者高效实现专业视频水印处理。

weixin_29207533的博客 275

avformat_open_input 调用失败的原因

如果你要打开的文件格式不支持,就会导致打开文件失败。你需要确保要打开的文件格式被 FFmpeg 支持,并且已经注册过相应的输入格式。是 FFmpeg 库中的一个函数,用于打开音视频文件或网络流并进行解封装操作,返回值为一个表示打开的文件或流的 AVFormatContext 结构体指针。的第一个参数是文件路径或 URL,如果路径或 URL 错误、不存在或者无法访问,就会导致打开文件失败。函数不能重复打开同一个文件或网络流,这会导致打开文件失败。如果忘记了调用此函数,就会导致打开文件失败。

开挂的熊猫 7422

Ubuntu环境下OpenCV与FFmpeg集成Nvidia GPU硬解码的完整实践指南

本文详细介绍了在Ubuntu环境下如何集成OpenCV与FFmpeg以支持Nvidia GPU硬解码的完整实践指南。从驱动安装、CUDA配置到FFmpeg和OpenCV的深度定制编译,提供了详细的步骤和避坑技巧,帮助开发者高效实现视频硬解码加速,显著提升视频处理性能。

weixin_27017211的博客 137

FFmpeg问题梳理

FFmgeg初学问题梳理

成功的方式只有一个,按自己的方式,度过人生。欢迎共赴知识与乐趣的探索之旅! 2655

深入解析avformat_open_input阻塞优化:timeout与interrupt_callback实战

本文深入解析了FFmpeg中avformat_open_input函数阻塞问题的优化方案。针对流媒体应用卡顿痛点,详细对比并实战演示了通过设置timeout参数与实现interrupt_callback回调机制两种核心方法,有效控制连接与读取超时,提升应用响应速度与稳定性。

weixin_28452161的博客 325

Python实战:基于OpenCV与MoviePy的视频水印与字幕智能去除方案

在多媒体内容处理领域,视频编辑与修复是常见的工程需求,其核心原理涉及计算机视觉与图像处理技术。通过分析视频帧的像素特征,利用图像修复算法可以智能地移除画面中的干扰元素。这项技术的价值在于实现了本地化、可定制化的自动化处理,避免了依赖在线工具带来的隐私与画质风险。典型的应用场景包括自媒体素材清理、教学视频整理及个人视频库优化。本文以Python为工具,结合OpenCV和MoviePy库,详细解析了针对固定水印与硬字幕的检测与去除方案,涵盖了从环境搭建、原理剖析到实战代码的完整流程,并提供了处理豆包视频去水印等

weixin_34079177的博客 282

C++如何通过调用ffmpeg接口对H264文件进行编码和解码

以上是一个简单的例子,实际使用中还需要进行一些错误处理和内存管理等操作。因此建议参考FFmpeg的官方文档和示例代码进行开发。C++可以通过调用FFmpeg的API来对H264文件进行编码和解码。下面是一个简单的例子。

学无止尽,谨言慎行! 4380

科研人必备!用WisPaper搭建个人文献知识库的完整指南(附Zotero联动技巧)

本文详细介绍了如何利用WisPaper搭建高效的个人文献知识库,包括文件命名标准化、文件夹结构设计、语义搜索技巧及与Zotero的深度联动方法。通过智能标签系统和知识图谱功能,科研人员可以快速定位关键文献,提升研究效率。特别适合需要管理大量学术文献的研究者。

weixin_30823001的博客 266

无法解析的外部符号 _avcodec_register_all

error LNK2019: 无法解析的外部符号 _avcodec_register_all,该符号在函数 _main 中被引用 1>Pcm2Aac.obj : error LNK2019: 无法解析的外部符号 _avcodec_register_all,该符号在函数 _main 中被引用 1>Pcm2Aac.obj : error LNK2019: 无法解析的外部符号 _av_register_all,该符号在函数 _main 中被引用 1>D:\Program Files (..

hongzhuxuke的专栏 1723

实测对比:DECIMER、Img2Mol、MolScribe,哪个化学结构识别工具更靠谱?

化学结构识别(CSR)工具的核心任务是将分子结构图像转换为SMILES(Simplified Molecular Input Line Entry System)表示。这一过程需要克服图像质量差异、绘制风格变化以及特殊基团识别等挑战。三款工具采用不同的技术路线:DECIMER:基于EfficientNetV2+Transformer架构,优势在于处理标准期刊文献中的分子图示Img2Mol。

weixin_32576389的博客 341

保姆级教程:在RK3568上搞定PR2100K+GC2385双摄(从DTS配置到HAL层补丁)

本文详细介绍了在RK3568平台上调试PR2100K+GC2385双摄系统的完整流程,从DTS配置到HAL层补丁。涵盖硬件连接、媒体控制器拓扑验证、Camera3配置、HAL层特殊补丁及性能优化等关键步骤,帮助开发者快速解决双摄调试中的常见问题,提升嵌入式视觉系统开发效率。

weixin_28724661的博客 195

编译链接过程中出现“无法解析的外部符号”,原因及解决办法总结

1、错误为:error LNK2019: 无法解析的外部符号 ___report_rangecheckfailure,该符号在函数 _OBJ_create_objects 中被引用 原因:__report_rangecheckfailure是用来检查堆栈缓存溢出的,如果编译的时候打开GS(project property--》Configuration properties--》c/c++......

fanzirong_的博客 12万+

银河麒麟V10 SP3离线安装Nginx1.21.5全记录(附11个rpm包下载清单)

本文详细记录了在银河麒麟V10 SP3操作系统上离线安装Nginx 1.21.5的全过程,包括11个必备rpm包的下载清单。通过分步骤的实战指南,帮助用户在国产化环境中高效部署Nginx服务,涵盖安装、配置、调优及故障排查等关键环节,特别适合金融、政务等对安全性要求高的场景。

weixin_30872337的博客 602

OpenCV4.7.0、FFmpeg5.1 Nvidia GPU视频硬解码

OpenCV4.7.0、FFmpeg5.1 2080TI视频硬解码

洪流之源 9503

SPICE仿真软件:Ngspice_(2).安装与配置

在Netlist文件中直接定义模型。V1 1 0 5R1 2 0 1k* Analysis库文件中可以包含多种电路元件模型和参数。

kkchenjj的博客 1585

《民机适航入门指南:从法规学习到项目实践的全面解析》

适航(Airworthiness)是指航空器、其发动机、螺旋桨和其他部件在规定条件下,能够安全飞行并满足有关航空法规规定的条件。简而言之,适航代表了航空器在任何时候都能安全运营的状态。适航在民用航空领域尤为关键,因为飞机必须经过严格的适航认证才能投入商用。这些认证的目标是确保飞机能够在广泛的运行条件下保持飞行安全,从而保护乘客、机组和地面人员的生命财产安全。适航法规覆盖了飞机的整个生命周期,包括设计、制造、测试、运营、维护和报废。

qq_41854911的博客 992

易百纳 海思3516 UDP推流 WiFi 安卓端 FFMPEG解码 低延时 手把手写安卓Jni项目 <一>

易百纳 海思3516 UDP推流 WiFi 安卓端 FFMPEG解码 低延时 手把手写安卓Jni项目

zunly的博客 1547

10、数据挖掘与轨迹生成技术:FSSEMiner与CondTraj - GAN的探索

本文介绍了两种先进的数据处理技术:FSSEMiner算法用于从动态属性图中挖掘频繁顺序子图演化模式,揭示如交通流和疾病传播等复杂系统的演化规律;CondTraj-GAN是一种端到端的条件生成对抗网络,能够生成高质量的合成车辆轨迹,解决真实轨迹数据因隐私问题难以获取的挑战。通过实验评估与真实数据集验证,两种技术在可扩展性、实用性及生成质量方面均表现出色,并在交通管理、城市规划、自动驾驶研发等领域具有广泛应用前景。

grafana8visual的博客 86

Ubuntu 20.04 FFmpeg 源码编译终极保姆级教程

Ubuntu 系统自带的虽然简单,但出于版权原因,它(比如没有最好用的 AAC 音频编码器)。更重要的是,默认安装不会提供给 C/C++ 调用的.so动态库。为了未来的代码开发,我们必须亲自动手。请打开终端,保持网络畅通,按顺序即可。

weixin_55914576的博客 292

Android 10.0 kenel中修改rom系统内部存储的大小

在10.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分的值最好了,接下来分析下计算rom容量的 相关代码,然后做出修改

安卓兼职framework和app工程师的博客 1403

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

记录一个搭流媒体服务器时遇到的天坑:ffplay的buffer设置

以上10080是SRS默认的SRT端口号,使用ZLMediaKit时换成9000,ip_address换成服务端地址。用SRS和ZLMediaKit分别都搭建过一个局域网的流媒体服务端,流协议使用SRT,只推音频。此时,在本机执行拉流+推流指令,并开始读秒,发现延时高达8秒左右!各种在服务端差延时,看日志,均未发现服务端延时会达到这么高。最后发现竟然是ffplay的问题。设备:MacBook。

weixin_42277430的博客 628

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

视频编码硬件加速原理

不过说真的,N家那个API的破文档写得跟天书一样,我严重怀疑写文档的人当时是不是喝了假酒!哎不对,刚才说岔了,回来回来。反正你们记住,只要上了GPU加速,速度直接起飞,但是同码率下画质会稍微糊那么一丢丢。CPU就像个老教授,啥复杂的逻辑都会算,但是你让他去搬砖,他磨磨唧唧能把你急死。当年为了搞懂这套破玩意,我发际线至少往后挪了两厘米,现在你们倒好,张嘴就要现成的。警告你们啊,这玩意儿跑起来大概率会有点小毛病,但我懒得改了。之前做过压测,1080P的视频,CPU软解软编,风扇转得能起飞,FPS撑死跑到30。

weixin_46577695的博客 204

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

一道关于 rtmp、rtsp、mpeg-dash 视频提取的流量分析题

这道题是参加企赛中出现的一道题,当时感觉不难而且主办方也放出了足够多的提示,但是没做出来有点遗憾。后来踩了无数天坑,终于前后花了五天时间把它做出来了。 这道题很好没有脑洞,而且都是基础知识,因此做题的过程中学到了视频流相关的基础知识,即使是在现实中也非常的实用。记录一下,分享给大家。 题目中提示该流量包中包含三种不同类型的视频,对应的协议分别为RTMP、RTSP、MPEG-DASH。 RTMP 查阅相关资料,该协议流量主要通过 tcp 传输。 先看 rtmp2flv 的使用说明,要用到 tcpflow,这

weixin_40729354的博客 2321

windows10下opencv_cuda版本的编译安装

3. cmake的configure和generate都成功,注意仔细看看记录有没有error,然后进入build_cuda_cv-4.8.1文件夹,用visual studio 2019打开OpenCV.sln,然后依次点击生成-》配置管理器,打勾install,注意release要和上面一致,然后解决方案生成,等待2~3个小时,结束。,于是我把这个ffmpeg.cmake改名了,改为了ffmpeg_version.cmake,成功解决。

点我 956

高效获取高清动图并完美嵌入Markdown的实用指南

本文提供了一套高效获取高清动图并完美嵌入Markdown的完整工作流。针对GIF模糊、体积大的痛点,重点推荐使用ScreenToGif等工具进行直接录制与编辑,确保画质清晰、文件可控。同时详细讲解了动图在Markdown中的嵌入语法、图床选择及文件体积优化等最佳实践,助你轻松制作专业演示素材。

kubernetes8ctl的博客 238

Int8量化语音模型部署避坑指南:SenseVoice-Small ONNX常见错误解决

本文介绍了如何在星图GPU平台上自动化部署⚡ SenseVoice-Small ONNX语音识别工具,并解决Int8量化模型部署中的常见问题。该平台简化了部署流程,用户可快速搭建本地语音识别环境,轻松应用于会议录音转写、视频字幕生成等场景,实现高效、隐私安全的语音文字转换。

weixin_34885746的博客 1115
上一篇: FFmpeg视频处理入门级教程
下一篇: RTSP协议简要说明(小白级)
深图智能
博客等级 码龄3年 1036粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深图智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值