ffmpeg服务器部署失败排查:动态库、编解码器与权限问题全解析
1. 从一次深夜告警说起ffmpeg 在服务器上为什么跑不起来凌晨两点监控面板突然弹出一串红色告警转码队列积压超过阈值任务处理延迟飙升。登录服务器一看ffmpeg进程反复启动又退出日志里只有一行模糊的报错。这种场景对做音视频后端的人来说并不陌生——本地开发环境跑得好好的命令一上服务器就各种水土不服。ffmpeg这个工具本身足够成熟命令行参数也早已被无数文档覆盖但部署失败这件事的根因往往不在ffmpeg本身而在它依赖的运行环境、权限模型、动态链接库、编解码器支持以及服务器资源限制上。换句话说你排查的不是一个软件的问题而是一整条工具链在特定服务器环境下的适配问题。这篇记录面向的是需要在服务器上部署ffmpeg做转码、切片、推流、截图等任务的开发和运维人员。不管你用的是物理机、云主机还是容器环境排查思路是相通的。我会把整个排查链路拆开讲清楚从最表层的命令报错到动态库依赖再到编解码器缺失、权限与资源限制最后给出可复现的验证方法。中间会穿插我自己踩过的坑和几个容易被忽略的细节希望能帮你少走几个小时的弯路。需要先说明一点ffmpeg的部署失败表现千奇百怪但绝大多数可以归到下面几类。先把分类建立起来排查时就不会像无头苍蝇一样乱撞。失败类型典型表现高频根因命令找不到command not foundPATH 未配置、安装未完成动态库缺失error while loading shared libraries依赖库未安装或版本不匹配编解码器不支持Unknown encoder/Decoder not found编译时未启用对应库权限问题Permission denied运行用户无读写/执行权限资源限制进程被 kill、卡死内存/CPU/文件句柄不足参数兼容性命令本地能跑服务器报错版本差异导致参数行为变化这张表建议先存下来。后面每一类我都会展开讲但排查时你要做的第一件事永远是看完整报错而不是凭经验猜。2. 别急着改配置先把报错信息读透2.1 完整报错比任何经验都值钱很多人一看到ffmpeg失败第一反应是去搜ffmpeg 部署失败怎么办然后照着别人的方案一通改。这是效率最低的做法。ffmpeg的报错信息其实相当具体只是经常被日志系统截断或者被忽略。我习惯的第一步是手动在服务器上跑一遍出问题的命令把标准错误完整打印出来ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4 21 | tee /tmp/ffmpeg_debug.log这里有几个细节值得说。21是把 stderr 重定向到 stdout因为ffmpeg的绝大多数关键信息都走 stderr。tee是为了既能在终端看到又留一份日志方便后续比对。如果你是在脚本或服务里调用务必确认你的日志采集没有把 stderr 丢掉——我见过不止一次服务框架默认只收集 stdout导致真正的错误信息根本没进日志。拿到完整报错后重点看三处报错发生的阶段初始化、打开输入、编码、写出、具体的库名或编码器名、以及退出码。ffmpeg的退出码也有含义比如非零退出通常伴随具体错误但不同版本退出码定义不完全一致所以退出码只能作为辅助报错文本才是主证据。2.2 用最小命令做二分定位如果完整命令报错信息很长不要一次性分析。用最小可复现命令逐步缩小范围。比如先只做读取输入这一步ffmpeg -i input.mp4 -f null -这个命令不做任何编码和输出只解码一遍然后丢弃。如果它能跑通说明输入解析和解码链路没问题问题在编码或输出环节。如果它都跑不通那问题在更底层——可能是ffmpeg本身、输入文件、或者解码器。再进一步如果连读取都失败可以试ffmpeg -version ffmpeg -codecs | head -50-version能确认二进制本身是否可执行、编译配置里带了哪些选项。-codecs能列出当前构建支持的编解码器。这两条命令是排查的体检基线任何ffmpeg部署问题都应该先跑一遍。提示ffmpeg -version输出里的configuration那一行信息量极大它列出了编译时启用的所有外部库。后面排查编解码器缺失时这一行是核心依据。2.3 区分本地能跑和服务器能跑的本质差异本地和服务器最大的差异通常集中在四点操作系统发行版与版本、ffmpeg的安装来源与编译参数、运行用户的权限、以及系统资源限制。很多人本地用的是包管理器装的全功能版本服务器上为了精简用了静态编译的精简版结果一跑就缺编码器。所以排查时第一件事是对比两边的ffmpeg -version输出。如果configuration行差异很大那问题基本就锁定在构建差异上了。这一步能省掉大量无谓的猜测。3. 动态链接库这道坎error while loading shared libraries的完整排查链路3.1 报错背后的加载机制error while loading shared libraries: libxxx.so.x: cannot open shared object file是服务器部署ffmpeg时最常见的一类报错。要理解它得先知道 Linux 加载动态库的流程程序启动时动态链接器会按照LD_LIBRARY_PATH、/etc/ld.so.cache、默认库目录如/lib、/usr/lib的顺序去找依赖库。找不到任何一个程序就直接起不来。ffmpeg依赖的库很多常见的有libavcodec、libavformat、libavutil、libswscale这些自带的还有libx264、libx265、libvpx、libfdk-aac、libmp3lame等外部库。如果你是自己编译或者用了第三方静态包这些库的路径很可能不在系统默认搜索范围内。3.2 用ldd把缺失的库一次性揪出来排查这类问题ldd是最直接的工具ldd $(which ffmpeg) | grep not found这条命令会列出所有找不到的依赖库。如果输出为空说明动态库依赖是完整的问题在别处。如果有输出那每一个not found都是一个待解决的依赖。拿到缺失库名后先确认系统里到底有没有这个库find / -name libx264.so* 2/dev/null如果找到了但ldd还是报 not found说明库存在但不在搜索路径里。这时候有两个选择把库所在目录加进LD_LIBRARY_PATH或者写进/etc/ld.so.conf.d/然后执行ldconfig。前者是临时的后者是持久的。# 临时方案仅当前会话有效 export LD_LIBRARY_PATH/opt/ffmpeg/lib:$LD_LIBRARY_PATH # 持久方案 echo /opt/ffmpeg/lib /etc/ld.so.conf.d/ffmpeg.conf ldconfig如果find完全找不到这个库那就是真的没装需要先安装对应的开发包或运行库。3.3 版本不匹配比缺失更隐蔽有一种情况比库找不到更难查库找到了但版本不对。报错可能是version LIBAVCODEC_XX not found或者干脆是段错误。这通常发生在你升级了ffmpeg主程序但系统里还留着旧版本的libav*库动态链接器加载了旧版本。排查方法是看实际加载的库路径和版本ldd $(which ffmpeg) | grep avcodec输出会显示实际加载的libavcodec.so的完整路径。对比ffmpeg -version里声明的版本如果对不上就说明加载错了库。解决办法是清理旧库或者用LD_LIBRARY_PATH强制指向正确版本。注意不要随意删除系统自带的libav*库很多系统组件可能依赖它们。更稳妥的做法是给ffmpeg单独准备一套库目录通过LD_LIBRARY_PATH或rpath隔离。3.4 编译时指定 rpath 一劳永逸如果你是自己编译ffmpeg可以在编译时通过--extra-ldflags指定rpath让二进制自己记住库的位置./configure --prefix/opt/ffmpeg \ --extra-ldflags-Wl,-rpath,/opt/ffmpeg/lib \ --enable-shared这样编译出来的ffmpeg启动时会优先去/opt/ffmpeg/lib找库不依赖环境变量。这是我在生产环境最推荐的方式因为它把依赖关系固化在二进制里迁移和部署时不容易出岔子。4. 编解码器缺失Unknown encoder到底缺了什么4.1 编码器不是装了 ffmpeg 就有很多人以为装上ffmpeg就自带所有编解码能力实际上ffmpeg只是一个框架具体的编码器如 H.264、H.265、AAC需要额外的库支持而且必须在编译时显式启用。如果你用的是发行版仓库里的ffmpeg它可能因为授权原因没有启用某些编码器。排查第一步是查当前构建支持哪些编码器ffmpeg -encoders | grep -i 264\|265\|aac如果libx264不在列表里那用-c:v libx264就会报Unknown encoder libx264。这时候你有两条路换一个已经编译好的全功能版本或者自己编译。4.2 自己编译时最容易漏的配置项自己编译ffmpeg时configure阶段的参数决定了最终支持哪些编码器。下面是我常用的一个配置模板覆盖了绝大多数常见场景./configure \ --prefix/opt/ffmpeg \ --enable-gpl \ --enable-nonfree \ --enable-libx264 \ --enable-libx265 \ --enable-libvpx \ --enable-libmp3lame \ --enable-libfdk-aac \ --enable-libopus \ --enable-shared \ --disable-static这里有几个坑要提醒。--enable-gpl是启用libx264、libx265这类 GPL 库的前提不加的话即使装了库也编不进去。--enable-nonfree是libfdk-aac需要的但要注意它和 GPL 的授权组合问题商用场景需要评估。--enable-shared和--disable-static决定生成动态库还是静态库服务器部署一般用动态库方便升级。编译前务必确认对应的开发包已经装好比如libx264-dev、libx265-dev。configure阶段如果找不到某个库它会静默跳过最后你才发现编码器没编进去。所以configure结束后一定要看输出末尾的汇总确认你想要的库都是yes而不是no。4.3 用-codecs和-encoders做交叉验证编译完成后别急着上线先做交叉验证ffmpeg -hide_banner -encoders | grep libx264 ffmpeg -hide_banner -codecs | grep h264-encoders列出的是可用的编码器-codecs列出的是编解码器能力。两者都确认存在才算真正可用。我遇到过-codecs里有 h264 但-encoders里没有libx264的情况那是因为只有解码器没有编码器这种细节不交叉验证很容易漏。4.4 硬件加速编码器的额外依赖如果你的场景需要硬件加速比如用 GPU 做转码那依赖会更复杂。以常见的硬件编码为例除了ffmpeg本身要启用对应选项还需要系统装好显卡驱动和对应的运行时库。这类问题的报错往往不是Unknown encoder而是初始化设备失败排查时要先确认驱动和库的版本匹配。硬件加速的排查思路和软件编码不同它涉及设备节点权限、驱动版本、库版本三方匹配。建议先用厂商提供的工具确认硬件本身可用再排查ffmpeg这一层。5. 权限、资源与运行环境那些不报错但跑不通的情况5.1 运行用户的权限边界ffmpeg需要读输入文件、写输出文件如果运行用户对相关目录没有权限就会报Permission denied。这类问题看似简单但在服务化部署里经常被忽略因为服务往往以专用低权限用户运行而测试时你是用 root 跑的。排查方法是确认运行用户身份然后逐项检查路径权限# 确认服务运行用户 ps -o user -p $(pgrep -f ffmpeg | head -1) # 检查目录权限 namei -l /path/to/output/dirnamei -l会逐级列出路径上每一层的权限比单纯ls -l更能定位是哪一层卡住了。常见坑是输出目录本身可写但它的父目录没有执行权限导致无法进入。5.2 文件句柄与进程数限制高并发转码场景下ffmpeg会打开大量文件句柄。如果系统的ulimit -n设置过低进程会在打开文件时失败。这类问题在低并发测试时完全看不出来一上量就崩。ulimit -n cat /proc/$(pgrep -f ffmpeg | head -1)/limits | grep open files如果限制偏低可以在服务启动脚本里调整或者修改系统的limits.conf。注意ulimit是 per-process 的改完要确认服务实际继承到了新值。5.3 内存与 OOM 的隐蔽性ffmpeg处理高分辨率视频时内存占用可能很高尤其是解码 4K 或多路并发时。如果进程被系统 OOM killer 干掉日志里可能只有一句Killed没有任何ffmpeg自己的报错。这种情况要查系统日志dmesg | grep -i killed process journalctl -k | grep -i oom确认是 OOM 后解决方向有三个降低并发、限制单进程内存如用-threads控制线程数、或者升级服务器内存。我一般会先用-threads 2之类的参数压一压观察内存曲线再决定。5.4 临时目录与磁盘空间ffmpeg在处理某些格式时会用到临时文件默认走/tmp。如果/tmp空间不足或者被挂载为noexec也会导致失败。排查时确认临时目录可写且有足够空间df -h /tmp mount | grep /tmp如果/tmp受限可以通过环境变量TMPDIR指定其他目录。这个细节很小但在容器环境里特别常见因为容器的/tmp经常被限制得很小。6. 一套可复用的排查清单与验证脚本6.1 从现象到根因的决策路径把前面的内容串起来实际排查时可以按这个顺序走每一步都能排除一批可能性跑ffmpeg -version确认二进制可执行、看编译配置。跑ldd $(which ffmpeg) | grep not found排除动态库缺失。跑ffmpeg -encoders确认需要的编码器存在。用最小命令ffmpeg -i input -f null -做二分定位。检查运行用户权限和路径权限。检查ulimit、内存、磁盘、临时目录。对比本地和服务器的ffmpeg -version差异。这个顺序的原则是从外到内、从简到繁先排除环境层面的问题再深入具体功能。6.2 一个自检脚本我把常用检查项写成了一个脚本部署新服务器时直接跑一遍能提前发现大部分隐患#!/bin/bash echo ffmpeg 版本与配置 ffmpeg -hide_banner -version | head -5 echo 动态库依赖检查 ldd $(which ffmpeg) 2/dev/null | grep not found || echo 依赖完整 echo 关键编码器检查 for enc in libx264 libx265 aac libvpx; do if ffmpeg -hide_banner -encoders 2/dev/null | grep -q $enc; then echo [OK] $enc else echo [MISSING] $enc fi done echo 资源限制 echo open files: $(ulimit -n) echo max processes: $(ulimit -u) echo 临时目录 df -h /tmp | tail -1这个脚本不复杂但覆盖了排查中最常出问题的几个点。建议把它纳入服务器初始化流程比出问题后再手忙脚乱地查要高效得多。6.3 几个我踩过的坑第一个坑是用 root 测试用普通用户上线。测试时一切正常上线就权限报错。后来我养成了习惯测试阶段就用和服务一致的用户身份跑命令。第二个坑是静态编译版本缺编码器。有次为了部署方便用了静态编译的ffmpeg结果发现它没带libx264因为编译者没启用。静态版本虽然省去了库依赖的麻烦但功能裁剪往往更严重用之前一定要确认编码器列表。第三个坑是环境变量在服务里不生效。我在 shell 里export LD_LIBRARY_PATH后测试正常但服务是通过系统服务管理器启动的根本不读我的 shell 环境。后来改成写ld.so.conf.d才彻底解决。这个坑的本质是交互式 shell 的环境和服务进程的环境是两回事。第四个坑是日志被截断。服务框架默认只收集 stdout而ffmpeg的关键信息在 stderr导致排查时看到的报错不完整。解决办法是在调用时显式重定向 stderr或者配置日志采集同时收集两个流。6.4 版本管理的一点经验最后说一个容易被忽视的点ffmpeg的版本管理。不同版本的参数行为可能有差异比如某些参数在新版本被废弃或语义改变。生产环境建议固定版本把编译好的二进制和依赖库一起打包避免因为系统升级导致ffmpeg行为变化。我通常会把ffmpeg装在一个独立目录如/opt/ffmpeg-version然后用软链接指向当前使用版本。升级时新建目录、测试通过后再切换软链接回滚也方便。这套做法在多台服务器上批量部署时尤其省心因为每台机器的环境完全一致不会出现这台能跑那台不能跑的情况。排查ffmpeg部署问题说到底是一个建立假设、逐层验证的过程。报错信息是唯一的真相来源工具ldd、-version、-encoders是验证手段而经验的价值在于知道该按什么顺序去验证。把上面这套流程走熟之后大部分问题都能在十几分钟内定位到根因。

相关新闻

大模型本地部署配置清单:显存、量化与硬件选型全解析

大模型本地部署配置清单:显存、量化与硬件选型全解析

1. 为什么我盯着这份配置清单看了一个月:本地部署大模型的真实门槛先说个结论:绝大多数想玩大模型本地部署的人,不是卡在买不起显卡,而是卡在不知道自己的需求该配到什么程度。满血版跑不动,量化版不会选;显…

2026/10/14 11:26:31 阅读更多 →
大模型本地化部署硬件配置指南:显存、量化与实测数据

大模型本地化部署硬件配置指南:显存、量化与实测数据

大模型本地化部署这两年讨论热度一直不减,但很多朋友上手时最头疼的不是模型本身,而是吃不准“我这台机器到底带不带得动”。网上参数贴多得是,可真正告诉你“7B模型实际要占多少G显存”“32B量化后CPU跑不跑得动”这种实测数据的反而不多。这…

2026/10/14 11:25:30 阅读更多 →
7B开源模型Qwen-Image-2.1本地部署:透明背景生成免抠图

7B开源模型Qwen-Image-2.1本地部署:透明背景生成免抠图

上个月我把生成式图像的日常主力模型换成了 Qwen-Image-2.1。最初吸引我的只是它 7B 的参数体量——这个级别的开源模型,在消费级显卡上跑不心疼。真正让我转正的,是它把“抠图”这回事从前处理挪进了生成阶段:提示词里写清楚透明背景&#x…

2026/10/14 11:25:30 阅读更多 →

最新新闻

亨得利客户服务中心官方网点分布一览:2026年全国多城门店地址与最新联系电话公布

亨得利客户服务中心官方网点分布一览:2026年全国多城门店地址与最新联系电话公布

亨得利客户服务中心2026年全国官方网点分布现已公布,涵盖多座重点城市的直营售后门店地址与最新联系电话。表友可通过亨得利全国统一服务电话:400-901-0695 进行维保预约、网点查询、故障咨询指导与服务解读报价,也可关注亨得利官方公众号&am…

2026/10/15 0:03:53 阅读更多 →
AI Coding时代的柔性之美:从静态软件到自演化软件,软件研发正在重新进化

AI Coding时代的柔性之美:从静态软件到自演化软件,软件研发正在重新进化

【摘要】本文来自奇点智能研究院首席技术咨询师王博撰写的《柔性的力量——写在〈AI 原生软件研发成熟度模型 AISMM 2026〉白皮书发布之际》。 文章以“柔性软件(Elastic Software)”为切入点,探讨 Agent 参与软件演进之后,软件形…

2026/10/15 0:03:53 阅读更多 →
Spring Boot项目Jacoco覆盖率统计实战:从配置到质量门禁

Spring Boot项目Jacoco覆盖率统计实战:从配置到质量门禁

1. 为什么要在Spring Boot项目里死磕覆盖率报告做过几年后端的人都有一个共识:单元测试这东西,写起来爽,维护起来要命。尤其是Spring Boot项目,业务逻辑一层套一层,Controller调Service,Service调Mapper&am…

2026/10/15 0:03:53 阅读更多 →
铝合金仿菠萝格木纹构件|复刻珍木肌理 以铝代木筑就恒久中式雅境

铝合金仿菠萝格木纹构件|复刻珍木肌理 以铝代木筑就恒久中式雅境

在中式院墅、古建廊道与高端商业中式营造中,菠萝格木素来以温润醇厚的棕红肌理、沉稳致密的质感著称,是檐廊、立柱、门楣、雀替等构件的优选名贵硬木。然而天然菠萝格造价高昂,户外应用易开裂变形、虫蛀腐朽,常年刷漆维护成本高,让许多项目难以兼得木韵质感与长久耐用。铝合金仿…

2026/10/15 0:02:51 阅读更多 →
影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成 一、技术背景 大模型(LLM)在通用场景下表现强大,但当我们将 GPT-4 或 Qwen 直接用于生成影刀RPA操作指令和 XPath 定位时,准确率通常只有 40%-60%。原因…

2026/10/15 0:02:51 阅读更多 →
2026钢铁行业AI转型系统选型对比:多基地排产、大宗原燃料采购与质量追溯,六家厂商能力差异在哪里

2026钢铁行业AI转型系统选型对比:多基地排产、大宗原燃料采购与质量追溯,六家厂商能力差异在哪里

2026钢铁行业AI转型系统选型对比:多基地排产、大宗原燃料采购与质量追溯,六家厂商能力差异在哪里钢铁企业的AI转型采购决策在2026年面对三项刚性约束:吨钢利润承压,要求AI直接作用于采购成本与排产效率;多基地、多产线…

2026/10/15 0:02:51 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →