Windows 上 ffmpeg 批量转码实战:环境配置、参数调优与避坑指南

简介:这份资源是面向 Windows 平台的多媒体开发工具包,适合音视频处理爱好者、C++ 开发者以及需要集成编解码能力的工程人员使用。它基于 FFmpeg 4.2.1 的 win32-dev 版本,可用于音视频格式转换、流媒体推拉流、剪辑裁剪、滤镜特效以及自定义编解码逻辑的开发场景。压缩包内共 166 个文件,以 115 个 h 头文件和 23 个 c 源文件为核心,配合 8 个 lib、8 个 a、8 个 def 等库与链接文件,另有 makefile、readme 和说明文本,整体约 112.42MB,目录结构便于按模块查阅。资源中提供的开发库可直接用于 C++ 项目集成,通过包含头文件并链接对应库,即可调用 FFmpeg API 实现编码、解码、播放与录制等自定义处理。目前已有 532 人学习下载,适合希望深入掌握 Windows 下 FFmpeg 开发与命令行操作的读者参考。

1. Windows 上把 ffmpeg 用成日常工具:从“能跑”到“敢批量跑”

很多人第一次在 Windows 上装 ffmpeg,都是被一个具体需求逼的:录屏文件太大要压、监控视频要切片、一堆素材要统一转码、音频要批量提取。搜到命令复制进 PowerShell,结果要么提示“不是内部或外部命令”,要么跑完发现画质糊了、音画不同步、中文路径报错。ffmpeg 在 Windows 上的门槛从来不是命令本身,而是环境、路径、编码器和参数这四件事没对齐。

这篇笔记面向的是要在 Windows 上真正把 ffmpeg 用起来的从业者:做视频处理的、做自动化脚本的、需要批量转码归档的。我会按“先装对、再跑通、再批量、再排错”的顺序讲,命令都能直接抄,参数会解释为什么这么设。看完你应该能独立搭出一套稳定的 Windows ffmpeg 处理流程,而不是每次遇到新格式就重新搜一遍。

2. Windows 环境落地:装对版本比会敲命令更重要

2.1 为什么 Windows 上 ffmpeg 的“安装”是个坑

Linux 上一条包管理命令就完事,Windows 没有统一的包管理传统,于是出现了三种主流装法:手动下载压缩包解压、用包管理器(winget / scoop / choco)、以及被某个软件捆绑的旧版本。这三种装法带来的问题完全不同。

手动解压最常见的问题是版本老旧。网上很多教程链接指向的是几年前构建的包,里面的 libx264 版本低,遇到高分辨率或新编码参数会直接报错。更隐蔽的是,某些软件(比如一些录屏、播放器)会在自己的安装目录里塞一份 ffmpeg.exe,你在它的目录下能跑,换个目录就找不到,于是误以为“装好了”。

包管理器装法的好处是版本新、升级方便,但要注意 PATH 是否真的写进了当前终端会话。Windows 的环境变量修改后,已经打开的 PowerShell 不会自动刷新,必须重开窗口,这是新手最容易卡住的地方。

我的建议是:固定用一个包管理器装,并且记住它的安装路径,后续脚本里尽量用绝对路径或显式配置 PATH,不要依赖“碰巧能跑”。

2.2 用 winget 装 ffmpeg 并验证 PATH 的最小步骤

winget 是 Windows 10 1809 之后自带的包管理工具,不需要额外装东西。下面这套流程是我在干净系统上验证过的。

# 1. 确认 winget 可用,能输出版本号说明环境正常 winget --version # 2. 搜索 ffmpeg,确认来源是官方构建(Gyan.FFmpeg 是常见选择) winget search ffmpeg # 3. 安装。--accept-source-agreements 避免交互卡住 winget install --id Gyan.FFmpeg -e --accept-source-agreements --accept-package-agreements # 4. 关键一步:重开一个 PowerShell 窗口,再验证 ffmpeg -version ffprobe -version

逻辑说明:第 3 步的-e表示精确匹配 ID,避免装到同名的其他包。安装完成后,包管理器会把 ffmpeg 的 bin 目录写进用户级 PATH,但当前窗口读不到新 PATH,所以第 4 步必须新开窗口。如果新窗口里ffmpeg -version仍然报“不是内部或外部命令”,说明 PATH 没写成功,需要手动检查。

参数说明:--accept-source-agreements和--accept-package-agreements是自动化场景必备,否则脚本会停在交互确认上。ffprobe是 ffmpeg 套件里的媒体信息探测工具,后面排查编码参数全靠它,一定要一起验证。

如果 winget 不可用(比如系统版本太老),退而求其次用 scoop:先装 scoop,再scoop install ffmpeg。原理一样,都是把 bin 目录加进 PATH。

2.3 验证安装是否真的可用:三个必跑命令

装完不要急着转码,先跑这三个命令,能过再往下走。

# 命令一:看版本和编译配置,确认关键编码器在不在 ffmpeg -version # 命令二:看某个编码器是否被编译进来,比如 libx264 ffmpeg -hide_banner -encoders | Select-String "libx264|libx265|aac" # 命令三:探测一个真实文件,确认能读 ffprobe -v error -show_format -show_streams "D:\test\sample.mp4"

逻辑说明:命令一输出里会带--enable-libx264这类编译选项,没有就说明这个构建不带该编码器,后面转 H.264 会失败。命令二用Select-String过滤,比肉眼翻几百行编码器列表快得多。命令三用-v error把日志级别压到只报错,输出干净,适合脚本里解析。

参数说明:-hide_banner去掉版权横幅,让输出更紧凑;-show_format -show_streams分别输出容器层和流层信息,码率、帧率、像素格式、编码器全在这里。中文路径在这个命令里通常没问题,但如果路径带空格,记得整体加引号。

3. 转码与压缩:参数怎么设才不糊、不卡、不爆盘

3.1 先搞懂 CRF、码率和预设这三个旋钮

ffmpeg 转码画质控制的核心是三个参数,理解它们比背命令重要。

CRF(Constant Rate Factor)是恒定质量模式,取值 0 到 51,数字越小画质越好、文件越大。x264 的常用区间是 18 到 28,18 接近视觉无损,23 是默认值,28 已经能看出压缩痕迹。CRF 的好处是同一套参数在不同视频上都能得到相对稳定的观感,适合批量处理。

码率模式(-b:v)是固定码率或平均码率,适合对文件大小有硬性要求的场景,比如要卡在某个上传限制内。缺点是复杂画面会糊、简单画面浪费空间。

预设(-preset)控制编码速度和压缩效率的权衡,从 ultrafast 到 veryslow 共九档。越慢的预设同画质下文件越小,但耗时成倍增加。批量处理时我一般用 medium 或 fast,追求归档质量才上 slow。

3.2 一个能直接抄的 H.264 压缩命令

下面这条命令是我处理录屏和普通视频的默认模板,兼顾画质和体积。

ffmpeg -i "input.mp4" ^ -c:v libx264 -crf 23 -preset medium ^ -profile:v high -level 4.1 ^ -c:a aac -b:a 128k -ac 2 ^ -movflags +faststart ^ "output.mp4"

逻辑说明:-c:v libx264指定视频编码器;-crf 23是质量基准;-preset medium平衡速度;-profile:v high -level 4.1保证兼容主流播放器和硬件解码;-c:a aac -b:a 128k -ac 2把音频统一成双声道 AAC,避免源音频是 5.1 时播放器出问题;-movflags +faststart把索引移到文件头,网页播放和拖动进度条更顺。

参数说明:Windows 的 cmd 用^换行,PowerShell 用反引号`,这是两个终端最容易搞混的地方。如果不想纠结,直接写成一行也行。-crf想更清晰就降到 20,想更小就升到 26,每次调 2 到 3 比较合理,别一次跳太多。

3.3 批量转码:用 PowerShell 循环处理整个目录

单文件命令会了之后,真正的效率来自批量。下面这段脚本把一个目录下所有 mp4 转成统一规格,输出到另一个目录。

# 批量转码脚本:遍历源目录,统一转 H.264 + AAC $srcDir = "D:\videos\raw" $dstDir = "D:\videos\out" New-Item -ItemType Directory -Force -Path $dstDir | Out-Null Get-ChildItem -Path $srcDir -Filter *.mp4 -File | ForEach-Object { $outFile = Join-Path $dstDir ($_.BaseName + "_h264.mp4") Write-Host "处理中: $($_.Name)" ffmpeg -hide_banner -loglevel error -y -i $_.FullName ` -c:v libx264 -crf 23 -preset fast ` -c:a aac -b:a 128k -ac 2 ` -movflags +faststart ` $outFile if ($LASTEXITCODE -ne 0) { Write-Warning "失败: $($_.Name)" } }

逻辑说明:Get-ChildItem -Filter *.mp4 -File只取文件不取目录;Join-Path拼输出路径,避免手写反斜杠出错;-loglevel error让 ffmpeg 只在出错时输出,日志干净;$LASTEXITCODE是上一个外部命令的退出码,非 0 就是失败,用它做失败标记,方便事后重跑。

参数说明:-y表示输出文件已存在时直接覆盖,批量场景下必须加,否则会卡在交互询问。$_.BaseName是不带扩展名的文件名,$_.FullName是完整路径。如果源目录里有中文名文件,PowerShell 默认能处理,但要注意脚本文件本身保存为 UTF-8 with BOM,否则中文可能乱码。

4. 避坑与排查:Windows 上最容易翻车的五件事

4.1 中文路径和空格路径报错

现象:命令在英文路径下正常,换成D:\我的视频\测试.mp4就报 “No such file or directory”。

原因:ffmpeg 本身支持 Unicode,但 Windows 终端和脚本传参时,如果路径没加引号,空格会被当成参数分隔符;中文在某些旧版终端里编码不一致。

解决:路径一律用双引号包起来,脚本里用变量拼接而不是手写。如果仍然报错,把源文件复制到纯英文短路径下测试,能跑通就说明是路径问题而非文件问题。

4.2 提示编码器不存在

现象:命令里写了-c:v libx265,运行报 “Unknown encoder 'libx265'”。

原因:你装的 ffmpeg 构建没有编译进这个编码器。不同来源的构建包含的编码器不同,手动下载的旧包尤其容易缺。

解决:用ffmpeg -encoders查实际支持的编码器。缺 H.265 就换一个带 libx265 的构建,或者改用-c:v libx264先跑通。不要盲目复制网上的命令,先确认自己的构建支持什么。

4.3 音画不同步

现象:转码后视频和音频对不上,越到后面偏得越多。

原因:常见于源文件是可变帧率(VFR),比如手机录屏、直播录制,转码时帧率处理不当导致时间轴漂移。

解决:转码时显式指定帧率-r 30(按源实际帧率填),或者用-vsync cfr强制恒定帧率。先用ffprobe看源文件的r_frame_rate和avg_frame_rate是否一致,不一致就是 VFR,需要处理。

4.4 输出文件比源文件还大

现象:压了半天,输出反而更大。

原因:源文件已经是高压缩比的 H.265 或 AV1,你用 CRF 23 转 H.264,编码效率下降,体积自然涨。或者源文件码率本来就很低,CRF 23 对它来说太“奢侈”。

解决:先ffprobe看源码率和编码器。如果源已经是高效编码,转码意义不大,除非为了兼容性。真要压,把 CRF 提到 26 到 28,或者改用-b:v限制码率。

4.5 批量脚本跑到一半卡死

现象:脚本处理几十个文件后停住,不报错也不继续。

原因:某个文件损坏或格式异常,ffmpeg 卡在读取阶段;或者输出目录磁盘满了。

解决:给 ffmpeg 加超时控制,PowerShell 里可以用Start-Process配合-Wait和超时逻辑,或者简单点,在循环里加-t限制处理时长做测试。同时监控磁盘剩余空间,输出目录单独放一个盘。日志里记录每个文件的开始和结束时间,卡住时能定位到具体文件。

5. 进阶技巧:用 ffprobe 做自动化质检和参数决策

前面讲的都是“怎么转”,但真正让流程稳定的是“转之前先判断”。ffprobe 能输出结构化信息,配合脚本可以做自动决策,这是把 ffmpeg 从手动工具变成流水线的关键。

5.1 用 ffprobe 提取关键参数并做条件分支

下面这段脚本读取每个视频的编码器、分辨率和码率,根据条件决定用哪套转码参数。

# 质检 + 条件转码:根据源参数选择策略 Get-ChildItem "D:\videos\raw" -Filter *.mp4 -File | ForEach-Object { # 用 ffprobe 输出 JSON,再解析 $json = ffprobe -v error -select_streams v:0 ` -show_entries stream=codec_name,width,height,bit_rate ` -of json $_.FullName | ConvertFrom-Json $codec = $json.streams[0].codec_name $width = $json.streams[0].width $height = $json.streams[0].height Write-Host "$($_.Name) -> 编码:$codec 分辨率:${width}x${height}" # 决策:已经是 H.265 且分辨率不高,跳过转码 if ($codec -eq "hevc" -and $width -le 1920) { Write-Host " 跳过:已是高效编码" return } # 否则统一转 H.264 $out = "D:\videos\out\" + $_.BaseName + "_h264.mp4" ffmpeg -hide_banner -loglevel error -y -i $_.FullName ` -c:v libx264 -crf 23 -preset fast ` -c:a aac -b:a 128k -ac 2 ` -movflags +faststart $out }

逻辑说明:-select_streams v:0只取第一条视频流,避免多流文件解析混乱;-show_entries stream=...精确指定要哪些字段,输出小、解析快;-of json输出 JSON,PowerShell 的ConvertFrom-Json直接转成对象,比正则匹配文本可靠得多。条件分支里,已经是 HEVC 且分辨率不高的文件直接跳过,省时间也避免二次压缩损失。

参数说明:codec_name返回的是h264、hevc、av1这类标准名,不是libx264。bit_rate有时为空,取决于容器是否写入,所以判断逻辑里不要强依赖它,用分辨率和编码器更稳。

5.2 把常用参数固化成配置表

批量处理时,不同来源的视频适合不同参数。与其每次改命令,不如把策略写成表,脚本读表执行。

场景视频编码CRF预设音频附加参数
录屏归档libx26420slowaac 128k+faststart
快速预览libx26428ultrafastaac 96k无
兼容老设备libx26423mediumaac 128k-profile:v main -level 3.1
仅提取音频无--复制或转 mp3-vn

这张表的价值在于把“经验”变成“可复用配置”。脚本里可以用哈希表存这些策略,按文件名前缀或目录名选择。比如raw\archive\下的用归档策略,raw\preview\下的用预览策略。这样新人接手时不用问“该用哪个参数”,看目录就知道。

5.3 一个我踩过的坑:别在循环里反复启动 ffmpeg 做小操作

早期我写过一段脚本,对每个文件先调一次 ffmpeg 提取音频,再调一次转视频,再调一次合并。结果处理几百个文件时,进程启动开销比实际编码还大,整体慢了一倍多。

后来改成一条命令里用-map同时处理多路流,或者用 filter_complex 一次完成,速度明显提升。血泪经验是:ffmpeg 的进程启动在 Windows 上不算便宜,能合并的操作就合并,别把命令行当函数调用。

# 一次完成:转视频 + 统一音频 + 加封面,避免多次启动 ffmpeg -i "input.mp4" -i "cover.jpg" ^ -map 0:v:0 -map 0:a:0 -map 1:v:0 ^ -c:v libx264 -crf 23 -preset fast ^ -c:a aac -b:a 128k -ac 2 ^ -c:v:1 mjpeg -disposition:v:1 attached_pic ^ -movflags +faststart "output.mp4"

逻辑说明:-map显式指定取哪些流,第一个输入的视频和音频,第二个输入的图片作为封面;-disposition:v:1 attached_pic把第二路视频标记为封面图。这样一条命令搞定,比拆成三步再合并稳定得多。

参数说明:-map 0:v:0表示第 0 个输入的第 0 条视频流,冒号分隔的索引要写清楚,多输入时尤其容易搞混。封面图建议用 jpg,尺寸和视频一致,否则某些播放器不认。

这套流程跑顺之后,Windows 上的 ffmpeg 就不再是“每次都要搜命令”的负担,而是一个能嵌进自动化脚本的稳定组件。我的习惯是:任何新场景先写单文件命令验证,再包进循环,最后加 ffprobe 做前置判断。三步走下来,翻车概率会低很多。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

Altium Designer 15 常见问题排查与优化实战指南

Altium Designer 15 常见问题排查与优化实战指南

1. 从一次深夜报错说起:AD15到底卡在了哪里 如果你也在用Altium Designer 15(圈内一般直接叫AD15)画板子,大概率经历过下面这些瞬间:原理图画到一半,元件库突然加载不出来;PCB走线走到关键处&am…

2026/10/20 23:03:14 阅读更多 →
欧莱雅CES发布LED光能面膜:家用光疗技术解析与选购指南

欧莱雅CES发布LED光能面膜:家用光疗技术解析与选购指南

开头今年CES的展馆里,大部分媒体都挤在芯片、汽车和显示面板那几个区域抢首发参数。我反倒是在美容健康区待了一整个下午,欧莱雅集团这次带来的LED光能面膜,是现场讨论热度最高的护肤品类产品。它本质上是一张集成了柔性LED光源的“脸型面罩”…

2026/10/20 23:03:14 阅读更多 →
ThinkPHP+Laravel双框架实战:智慧社区缴费报修平台核心设计

ThinkPHP+Laravel双框架实战:智慧社区缴费报修平台核心设计

做了这么些年 Web 项目,我越来越觉得“智慧社区”这四个字真正落地的价值,不是靠堆砌硬件设备,而是看它能不能把物业、业主、维修工这三方拉回同一个节奏里干活。传统社区里,缴费靠贴通知单、报修靠打前台电话、催缴靠物业大姐挨家…

2026/10/20 23:03:14 阅读更多 →

最新新闻

AF_XDP 实战指南:Ubuntu 24.04 上基于 eBPF 的高性能包处理

AF_XDP 实战指南:Ubuntu 24.04 上基于 eBPF 的高性能包处理

1. 项目概述:AF_XDP 到底解决什么问题碰上 AF_XDP 这个技术点的人,多半是已经在 Linux 上做高性能包处理,或者被 DPDK 的运维成本折腾过之后,想在内核生态里找个折中方案。AF_XDP 不是一个框架,而是 Linux 内核提供的地…

2026/10/20 23:41:33 阅读更多 →
用Unity打造桌面精灵:透明窗口、鼠标穿透与动画实战

用Unity打造桌面精灵:透明窗口、鼠标穿透与动画实战

简介:这是一份基于Unity引擎开发桌面精灵的完整工程资源,面向希望实现类似QQ宠物透明浮动桌面形象的Unity开发者。资源围绕窗口无边界设置、透明材质渲染、UI布局、Animator动画控制以及鼠标交互事件等关键技术点组织,适合有一定Unity基础、想…

2026/10/20 23:41:33 阅读更多 →
GLSL变量与类型系统详解:从标量到矩阵的Shader避坑指南

GLSL变量与类型系统详解:从标量到矩阵的Shader避坑指南

如果你写过一段时间的着色器,大概率遇到过这种时刻:shader编译失败,错误信息指向某个变量,你盯着那一行看了很久,愣是没发现哪里有问题。我印象最深的一次是在某个延迟渲染demo里,片元着色器把法线数据当成…

2026/10/20 23:41:33 阅读更多 →
C语言是什么?从底层原理到上手路径的全面解析

C语言是什么?从底层原理到上手路径的全面解析

编程这行干久了,总会被外行朋友或刚入行的新人问到同一个问题:“C语言到底是什么?” 每次被问到,我都会愣一下,因为这个问题看似简单,真要一两句话说清楚还挺难。它不像Java能“写安卓APP”,也不…

2026/10/20 23:41:33 阅读更多 →
好写作AI如何用游戏化设计破解写作恐惧,养成写作习惯

好写作AI如何用游戏化设计破解写作恐惧,养成写作习惯

1. 好写作AI到底在做什么:把“写作”变成“练级”1.1 它解决了什么问题:写作恐惧不是懒,是“防御”我见过太多人说自己“不会写”“写不出来”,包括我自己也曾是这样。面对一个空白文档,光标一开一合,脑子里…

2026/10/20 23:41:33 阅读更多 →
华三AC WX5560H AP信道优化实战:解决信号满格却卡顿

华三AC WX5560H AP信道优化实战:解决信号满格却卡顿

前阵子在某园区处理无线投诉时,我碰到一个很典型的场景:AP 装了一堆、信号显示也是满格,但视频会议就是动不动卡成 PPT。当时很多人第一反应是带宽不够,可跑到华三 AC WX5560H 上一看,控制器负载很低,出口带…

2026/10/20 23:40:32 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →