新闻详情

新闻详情

首页 / 资讯中心 / 详情

FFmpeg mp4 与 m3u8 双向转换:切片、合并与排错实战

发布时间:2026/9/30 5:17:58来源:尧图网络
FFmpeg mp4 与 m3u8 双向转换:切片、合并与排错实战
前阵子帮朋友收拾一个视频项目的尾巴对方甩过来一个 m3u8 文件外加整整齐齐一个文件夹的 ts 切片说“你帮我把这些合成一个 mp4 吧”。我打开那个 m3u8前几行是 #EXTM3U、#EXT-X-VERSION、#EXT-X-TARGETDURATION往下每隔几行就是一个 #EXTINF 加一条切片路径几百行的纯文本。另一边我也遇到过完全相反的场景手里是一个规规矩矩的 mp4却要切成 m3u8 给网页做边下边播让首屏别等整个文件。这两个方向的需求用 FFmpeg 都能做而且绝大多数情况下一条命令就能跑通但真正落到项目里坑往往不在命令本身而在参数细节、关键帧、时间戳和编码格式这些看不见的地方。这篇就围绕FFmpeg 在 mp4 与 m3u8 之间的双向转换把 mp4 转 m3u8、m3u8 转 mp4 两条链路讲透包括命令的逐段拆解、参数为什么这么设、装环境时容易忽略的细节以及转换失败时怎么一步步定位根因。无论你是第一次接触 m3u8 切片的新手还是已经能背出常用命令、但总在边缘 case 上翻车的老手应该都能从里面找到能直接抄的配置和值得绕开的坑。1. 别急着敲命令先把 mp4 与 m3u8 的本质差异捋清楚很多人第一次做转换心理预期是“文件格式互转”就像把 png 存成 jpg。这个直觉在这里会带偏方向。mp4 和 m3u8 不是同一层的东西一个是装音视频数据的“盒子”另一个是告诉播放器“去哪拿、按什么顺序拿”的“清单”。搞不清这一点后面所有参数都会觉得莫名其妙。1.1 一个是封装容器一个是索引文本mp4 是一种封装容器格式它的职责是把已经编码好的视频轨、音频轨、字幕轨按一定的结构装进一个文件里并在文件头moov box记录每帧数据的位置、时长、时间戳。你打开一个 mp4播放器读一遍索引就知道整段视频多长、关键帧在哪、音视频怎么对齐。m3u8 则是一份播放列表本质是 UTF-8 编码的纯文本后缀来自 M3U 这种老播放列表格式。它本身不含任何音视频数据只记录一串切片文件的地址和每段的时长。真正的数据躺在那一堆.ts或 fmp4 分片.m4s里。所以你把 mp4 转成 m3u8严格说是“转成 m3u8 一堆切片”这一整套东西缺了切片m3u8 就是一张空头支票。提示拿到一个 m3u8 想转 mp4先确认切片文件是否齐全。很多人只保存了 m3u8 这一个文本结果转换时报一堆找不到文件的错问题不在 FFmpeg。1.2 m3u8 里那些 #EXT 开头的行在说什么看懂 m3u8 的内容排错时能省一半时间。下面是一个典型的点播列表#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:11 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:10.000000, segment_000.ts #EXTINF:10.000000, segment_001.ts #EXTINF:6.400000, segment_002.ts #EXT-X-ENDLIST#EXTM3U文件身份标识第一行必须有。#EXT-X-TARGETDURATION所有切片时长的向上取整最大值播放器用它预判缓冲。这个值如果和实际切片差太多某些播放器会报错。#EXT-X-MEDIA-SEQUENCE第一个切片的序号直播场景会变化。#EXT-X-PLAYLIST-TYPE:VOD标明这是可点播的完整列表不是直播。#EXTINF紧跟的那条切片的时长单位秒。#EXT-X-ENDLIST列表结束标记有它播放器才知道“播完了”。直播列表没有#EXT-X-ENDLIST还会不断滚动更新。这个差异直接决定了你拿到的 m3u8 能不能一次性合成 mp4——直播流如果不录完整合出来的视频只能覆盖你抓取的那段时间。1.3 为什么直接改后缀名绝对行不通有人图省事把.m3u8直接改名成.mp4或者把 mp4 改名成 m3u8。前者会得到一个播放器打不开的文本文件后者会让播放器把二进制数据当文本解析、直接报错。这类操作浪费的时间够你老老实实敲三条命令了。转换是重新封装或重新编码的过程不是改名字。真正要建立的认知是mp4 转 m3u8 是切片 建清单m3u8 转 mp4 是按清单顺序把切片拼回去。后面所有命令和参数都是围绕这两件事服务。2. 环境搭建FFmpeg 装在哪、怎么验证、不同系统要注意什么命令跑不起来八成是环境问题。FFmpeg 在 Windows 上最常见的问题是“装了但命令行找不到”在 Linux 服务器上则是“系统源里的版本太老、缺编解码器”。这一节把三个主流平台的安装思路和验证方法说清楚省得你在报错里绕圈。2.1 Windows 下的包选择与 PATH 配置Windows 用户直接去官网下载编译好的压缩包就行一般选带essentials字样的构建版体积小、常用编码器齐全解压后得到bin目录里面有ffmpeg.exe、ffprobe.exe、ffplay.exe三个可执行文件。想验证是否装好开一个新的命令行窗口敲ffmpeg -version能打印出版本信息和配置项就说明成功。关键坑在于 PATH很多人解压后直接双击 exe看着窗口一闪而过以为装好了其实命令行里根本找不到。正确做法是把bin目录的完整路径加到系统环境变量的 Path 里加完之后必须重开命令行窗口旧窗口读的还是旧环境变量。如果你坚持要放在中文路径或者带空格的目录下命令行里调用时记得用引号把路径包起来否则会被拆成多个参数。另外Windows 上做 m3u8 合并时如果切片路径里有中文或者空格建议先把整个文件夹放到一个纯英文短路径下比如D:\work\video能规避一大批莫名其妙的“文件找不到”。2.2 Linux 与服务器场景的安装方式Linux 上的选择更多也更容易踩版本坑。系统自带的包管理器apt/yum 系装的 FFmpeg 版本通常偏旧老版本对新编码格式、新参数支持不全做切片时可能报“Unknown option”。如果只是做普通的 h264 转封装老版本够用一旦涉及较新的编码或音轨格式建议用官方提供的静态构建版本解压即用不依赖系统库。在国产化操作系统环境里部署时要注意依赖库的完整性。某些精简系统镜像里缺少基础的多媒体库FFmpeg 编译时没链上对应模块会导致切片能生成但播放没声音。判断方法很简单ffmpeg -version输出里会列出它支持的编解码器和协议看到--enable-libx264、--enable-protocolhttps这类字样心里就有底了。注意服务器上如果只用-c copy做转封装不重新编码对 FFmpeg 的编解码能力要求其实很低老版本照样能跑。真正吃版本的是“需要重新编码”的场景。2.3 上命令前必须做的两项检查正式转换前先用ffprobe摸清楚输入文件的家底这一步能避免后面 90% 的意外ffprobe -v error -show_format -show_streams input.mp4重点看三样东西视频编码是不是 h264/hevc、音频编码是不是 aac、文件的时长和码率。为什么要看因为做切片时最常见的两个失败原因一个是视频不是 h264某些编码在 ts 封装里兼容性差另一个是音频用了不常见的编码转出来播放器没声音。第二项检查是文件完整性。如果 m3u8 指向的切片有缺失或者 ts 文件本身下载不完整合并出来的 mp4 会出现中间卡顿、花屏甚至播放器直接退出。检查办法是用ffprobe逐个探测切片或者干脆先跑一遍ffmpeg -v warning看有没有警告堆出来。这两项检查各花不到一分钟却能省掉后面半小时的排查。3. mp4 转 m3u8从整段视频到可点播的切片集合环境搞定、输入摸清终于到了正题。mp4 转 m3u8 有两种主流写法用segment复用器手动切片或者用内置的hls封装器一步到位。两种都能用适用场景不同下面分别拆开讲你可以根据要不要加密、要不要精细控制切片来选择。3.1 一条能跑通的完整命令以及逐段拆解先给最常用的 HLS 封装器写法它最省心ffmpeg -i input.mp4 \ -c copy \ -start_number 0 \ -hls_time 10 \ -hls_list_size 0 \ -hls_segment_filename output_%03d.ts \ index.m3u8逐段看-i input.mp4是输入-c copy表示不重新编码直接复制音视频流这是提速的关键一个几 GB 的文件几秒到几十秒就能切完-start_number 0让切片序号从 0 开始和很多播放器的默认预期一致-hls_time 10指定目标切片时长为 10 秒-hls_list_size 0表示列表里保留全部切片不设这个默认只保留几片合出来的列表是残缺的-hls_segment_filename定义切片命名模板%03d是三位补零的序号最后一个参数是输出的 m3u8 文件名。跑完之后你会得到一个index.m3u8和一堆output_000.ts、output_001.ts……这时候用浏览器打开 m3u8放到本地服务器上别直接双击浏览器对本地 m3u8 有跨域限制就能播放了。另一种segment复用器写法适合需要更强控制力的场景ffmpeg -i input.mp4 \ -c copy \ -bsf:v h264_mp4toannexb \ -map 0 \ -f segment \ -segment_time 10 \ -segment_format mpegts \ -segment_list index.m3u8 \ -segment_list_type m3u8 \ output_%03d.ts其中-bsf:v h264_mp4toannexb是个关键比特流过滤器它把 mp4 里 h264 的 AVCC 格式转换成 ts 需要的 Annex-B 格式。mp4 转 ts 时如果漏了这个参数产物往往播不了或者花屏这是最容易忽略的一步。而 HLS 封装器内部会自动处理这件事所以你用第一种写法时不用操心。3.2 关键帧对齐切片为什么必须落在 I 帧上你可能发现明明设了-hls_time 10切出来的片段时长却是 10.4 秒、8.7 秒这样不齐整的。这不是 bug而是因为FFmpeg 只能在关键帧I 帧处切。视频解码依赖帧间预测一个非关键帧单独拎出来是没法解码的所以切片必须从 I 帧开始。想切得整齐就得先让源视频的关键帧间隔配合目标切片时长。转码时可以用-g指定 GOP 长度或者用-force_key_frames强制在固定时间点插入关键帧ffmpeg -i input.mp4 \ -c:v libx264 -preset veryfast -crf 23 \ -force_key_frames expr:gte(t,n_forced*10) \ -c:a aac -b:a 128k \ -hls_time 10 -hls_list_size 0 \ -hls_segment_filename out_%03d.ts \ index.m3u8expr:gte(t,n_forced*10)的意思是“每当时间到达第 n 个 10 秒的整数倍就强制插一个关键帧”。这样切片时长基本能对齐到 10 秒整。代价是这里必须重新编码速度慢很多取决于 CPU。取舍很清楚只做转封装-c copy快但切片不齐重新编码慢但整齐可控。实操心得做点播视频时如果源文件本身就是按固定 GOP 编码的-c copy出来的切片时长通常也够整齐没必要重新编码。只有当切片时长抖动严重影响播放体验时才值得上-force_key_frames。3.3 加密切片与 key_info 文件的使用方式有些场景需要给切片加密比如付费内容防下载。HLS 支持 AES-128 加密FFmpeg 通过一个key_info文件来配置这个文件是三行结构key.bin key.bin https://your-domain.com/get_key第一行是加密密钥文件路径真实的 16 字节二进制密钥可用openssl rand 16 key.bin生成第二行是生成 IV 用的文件通常同第一行第三行是密钥的获取地址——播放器播放时会去这个地址拿密钥。命令里加上-hls_key_info_file即可ffmpeg -i input.mp4 -c copy \ -hls_time 10 -hls_list_size 0 \ -hls_key_info_file key_info \ -hls_segment_filename enc_%03d.ts \ index.m3u8这里有几个必须注意的点。第一key.bin 绝对不能放到切片同级的公开目录里哪怕你只是本地测试养成习惯把密钥放在 Web 根目录之外。第二第三行的密钥地址必须是播放器能访问到的 HTTPS 地址本地测试时如果你用file://很多播放器会直接拒绝加载。第三加密后的列表里会出现#EXT-X-KEY:METHODAES-128,URI...,IV...这一行看到它就说明加密生效了。还有一个经常被忽略的细节加密切片的合并比不加密麻烦一点点后面第 4 节会专门讲。3.4 参数微调切片时长、列表刷新与播放器兼容性切片时长没有一个绝对标准但有经验区间。HLS 规范建议每个切片不要超过TARGETDURATION太多主流选择是6 到 10 秒。切得太短比如 2 秒切片数量暴涨请求数多、服务器压力大列表文件也大切得太长比如 30 秒首屏起播慢跳转不精准。如果你要兼容比较老的播放器建议把-hls_version控制在 3并在列表里保留#EXT-X-PLAYLIST-TYPE:VOD明确告诉播放器这是完整点播内容。有些播放器对#EXT-X-ENDLIST缺失特别敏感会误判成直播一直等待导致“播完卡住不结束”。4. m3u8 转 mp4本地切片、远程地址、加密流的三种打法反方向的合并看起来更简单实则场景差异更大。切片是本地还是远程、加密还是不加密、时间戳连不连贯处理方式都不一样。这一节按三种典型情况展开。4.1 本地 ts 切片的合并与时间戳处理最简单的情况m3u8 和一堆 ts 都在本地同一个目录。直接ffmpeg -i index.m3u8 -c copy output.mp4FFmpeg 会解析列表、按顺序读切片、复用封装成 mp4。-c copy依旧是首选速度快且无损。但这里有个经典问题每个 ts 切片都从自己的时间戳 0 开始合并后时间戳会出现回绕比如第二个切片的时间戳突然跳回 0播放器表现为画面卡顿、音画不同步、进度条乱跳。解决办法是加-fflags genpts让它重新生成时间戳或者用-reset_timestamps 1用于 segment 场景。更稳的做法是走 concat 协议ffmpeg -i concat:seg_000.ts|seg_001.ts|seg_002.ts -c copy output.mp4或者用 concat 清单文件一个文本文件每行file seg_000.ts再ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4。-safe 0是为了允许路径里出现相对路径之外的内容。这三种方式我都试过切片数量少用 concat 协议最省事切片多、需要跨目录引用时用 concat 清单更灵活。如果合并后仍偶发不同步可以去掉-c copy让它对音频重新编码成 aac 并强制统一采样率-c:v copy -c:a aac -ar 48000。这算保底方案能救回大部分时间戳错乱的文件。4.2 直接吃远程 m3u8 地址要注意的协议与头部问题很多人希望直接给 FFmpeg 一个远程 m3u8 地址它就自动把整个视频下下来。可以但有两个前提地址必须是可直连的并且 FFmpeg 编译时开启了 https 协议支持。命令ffmpeg -user_agent Mozilla/5.0 \ -headers Referer: https://example.com/\r\n \ -i https://example.com/path/index.m3u8 \ -c copy output.mp4-user_agent和-headers用来伪造请求头。为什么要加因为不少服务器会校验 Referer 或 User-Agent裸奔的请求会被拒。加了这俩参数成功率能高一截。但这条路的不确定性很高。远程切片可能分布在多个域名下FFmpeg 默认不跟随跨域此时要在后面加上-allowed_extensions ALL或者在命令里显式指定-protocol_whitelist file,http,https,tcp,tls,crypto。另外网络抖动会导致某个切片拉取失败整段合并就可能中断所以远程合并建议加上超时和重试参数或者干脆用支持断点续传的下载工具先把切片全部拉到本地再用本地方式合并——后者虽然多一步但稳定性高得多。4.3 加密流合并时 key 和 IV 的处理如果 m3u8 里有#EXT-X-KEY行合并时 FFmpeg 需要拿到密钥才能解密切片。密钥地址URI如果是个 https 链接FFmpeg 会自己去拉如果是本地文件路径它会在当前目录找。这时候最容易出的问题有两个一是密钥地址失效付费内容经常带时效签名二是列表里的 URI 是相对路径、而你换目录了导致找不到。ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto \ -allowed_extensions ALL \ -i index.m3u8 -c copy output.mp4crypto这个协议一定要在 whitelist 里否则解密环节直接报Protocol not on whitelist。ALL允许列表引用任意后缀的切片文件。实测下来只要密钥能正常获取、切片完整加密流的合并和普通流没任何区别输出的 mp4 是明文可直接播放的。注意不要在公开分享的场景里传播带密钥的加密流抓取方法这里讲的都是你自己项目里的合法素材处理。涉及版权内容请遵守相关规定。4.4 什么时候不该用 FFmpeg 合并FFmpeg 很强但不是所有情况都适合它。比如切片数量达到几千个、每个切片只有一两秒的直播录制文件直接合并容易因为文件句柄或内存问题变慢这时先合并成若干大块再拼更稳。又比如切片本身就是 fmp4 格式.m4s需要-f mp4显式指定封装类型用默认参数会报错。再比如如果只是想把几个 ts 简单地首尾相接连成一个文件用系统自带的二进制拼接Linux 下的cat、Windows 下的copy /b也能出结果但产物不一定能被播放器正常识别因为 ts 头信息会重复出现。所以最终想拿到规范 mp4还是走 FFmpeg 转封装最稳妥。5. 转换失败的排查链路从报错信息倒推根因命令敲下去报一堆红字是新手最慌的时候。其实 FFmpeg 的报错相当有规律学会看第一行和最后几行就能快速锁定方向。这一节把四类高频故障的排查思路完整走一遍。5.1 Invalid data found / 流信息读不出来报错长这样Invalid data found when processing input。这类问题的根因通常是三种。第一输入文件根本不是音视频比如把 m3u8 文本误当 mp4 喂进去。第二文件下载不完整头部数据缺失。第三文件是某种特殊封装FFmpeg 版本太老识别不了。排查顺序先用file input.mp4看文件真实类型再用ffprobe尝试读取流信息。如果ffprobe也读不出来基本可以断定文件本身有问题先修复或重新获取源文件别在命令参数上瞎调。5.2 音画不同步与时间戳回绕合并后音画不同步是最常见也最让人头疼的问题。根因几乎都指向时间戳不连续。切片各自带独立时间戳时合并器会尽力猜测正确的对齐方式猜错就错位了。定位方法用ffprobe -show_packets看音视频包的时间戳如果出现大幅跳变或负数就是回绕。修复思路按优先级排先加-fflags genpts重新生成时间戳不行就换 concat 协议合并再不行就对音频重编码统一采样率实在救不回来考虑用-vsync cfr强制固定帧率输出。这几招叠加使用能把 95% 的同步问题解决。5.3 切片缺失、列表不完整导致的中途卡死表现是视频前半段正常播到某个点突然卡住或直接结束。根因一般是某个 ts 切片没下全或者 m3u8 列表是实时滚动的、你抓取时没抓完整。定位方法数一下列表里#EXTINF的数量跟实际切片数量对一下再用ls -l看每个切片大小异常小的那个多半是残缺的。这种情况 FFmpeg 其实会在日志里给出警告注意看-v warning的输出。发现缺片后先补齐缺失的切片再合并不要指望从残缺列表里重建出完整的视频。5.4 编码格式不支持造成的转封装失败当视频编码是 h265/HEVC、AV1 这类较新格式时转成 ts 或从 ts 合并时可能报codec not supported in container。根因是某些封装格式对编码有白名单。解决办法是重新编码把视频转到 h264ffmpeg -i input.mp4 \ -c:v libx264 -preset medium -crf 22 \ -c:a aac -b:a 128k \ -hls_time 10 -hls_list_size 0 \ index.m3u8这样做速度慢但兼容性最好几乎所有播放器都能播。判断是否需要重新编码的依据很简单看目标播放环境支持什么通用性要求高就转 h264 aac这是目前最保险的组合。6. 落到项目里的取舍前端播放、批量处理与稳定性命令会敲只是第一步真正决定项目体验的是工程层面的选择。这一节聊几个实际做过之后才明白的点都是踩过之后总结出来的。6.1 前端播放 m3u8 与直接给 mp4 的区别网页里播放 m3u8本质上依赖浏览器对 HLS 的支持。桌面端 Chrome 原生不支持需要引入hls.js这类库去解析 m3u8 并喂给video标签Safari 则原生支持。这也是为什么很多人发现同一段视频在 Safari 能播、在 Chrome 白屏——不是视频坏了是没引入解析库。import Hls from hls.js const video document.querySelector(video) const src /videos/index.m3u8 if (video.canPlayType(application/vnd.apple.mpegurl)) { video.src src } else if (Hls.isSupported()) { const hls new Hls() hls.loadSource(src) hls.attachMedia(video) }m3u8 的优势在于首屏快、支持自适应码率、便于分段缓存和加密mp4 的优势在于兼容性无敌、单文件好管理、哨兵式下载简单。选择取决于场景长视频、需要边下边播选 m3u8短视频、要兼容所有环境选 mp4。实际项目中经常两者并存同一份素材转出两种形态。6.2 批量转换脚本与自动化落地单文件转换手动敲命令没问题但一个目录几十上百个视频就得脚本化。核心思路是遍历目录、对每个 mp4 调一次转换、把产物放进对应名字的子目录顺手做错误捕获和日志记录。下面是一个 Bash 的骨架#!/bin/bash set -e for f in ./input/*.mp4; do name$(basename $f .mp4) mkdir -p ./output/$name ffmpeg -y -i $f -c copy -hls_time 10 -hls_list_size 0 \ -hls_segment_filename ./output/$name/seg_%03d.ts \ ./output/$name/index.m3u8 2./convert.log echo $name done done几个实战要点-y覆盖已存在文件、避免脚本卡在交互提示日志统一追加到文件出问题好回溯set -e让脚本在单条失败时停下避免错误扩散。如果是 Windows 环境用 PowerShell 或 Python 的subprocess更顺手尤其处理带空格的路径时。另外提醒一句批量转换时别把所有任务同时跑满。转封装还好一旦涉及重新编码就会吃满 CPU并发几十个直接卡死机器。用任务队列串行或限制并发数比如 2 到 4 个更稳。6.3 我踩过的几个坑和省下来的时间最后分享几条文档里不太会写、但实际能省事的经验。第一转换前先复制一份原始文件。做过一次 m3u8 转 mp4中途磁盘写满导致输出文件损坏原始切片也恰好被我上一步操作覆盖了只能重新抓。后来养成习惯重要的素材先备份再动手。第二输出文件名尽量不含中文和特殊符号。FFmpeg 对部分环境下的非 ASCII 路径支持不稳定尤其在 Windows 命令行和某些 Linux locale 下会出现写文件失败或者切片命名乱码。实在需要中文名先输出成英文再改回来。第三m3u8 转 mp4 前先本地起个静态服务器。直接传本地文件路径给 FFmpeg 有时能行但在加密或相对路径引用时容易翻车。用python -m http.server起一个换成http://127.0.0.1:8000/index.m3u8再转路径解析更规范也顺便验证了播放器能否正常加载。第四别迷信一次成功。一个几 GB 的文件合并动辄十几分钟中途因为一个切片失败就前功尽弃很常见所以命令尽量写成可重复执行的产物路径固定失败了修好输入直接重跑不用清理中间文件。第五善用-v error和-v warning。默认输出信息太杂加-v error只看错误排查时用-v warning看警告。有时候合并“成功”了但日志里全是警告播放出来才发现问题养成看日志的习惯能提前发现问题。这套流程我在好几个视频处理的项目里反复用到从最初的“命令能跑就行”到后来固定下来一套参数模板和排查顺序中间踩的坑基本上都在这篇里了。真正用顺手之后你会发现mp4 与 m3u8 之间的互转难点从来不在 FFmpeg 本身而在于你有没有把切片、关键帧、时间戳这几件事想明白。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

STM32F103 流水灯三种写法对比 + HAL 库按键中断控制(暂停/恢复) 2026/9/30 11:28:40

STM32F103 流水灯三种写法对比 + HAL 库按键中断控制(暂停/恢复)

STM32F103 流水灯三种写法对比 HAL 库按键中断控制(暂停/恢复) 写在前面:这次要交的是"用 HAL 库 按键中断控制流水灯"。 但在动手之前,我把同一个流水灯用三种方式各写了一遍 —— 直接操作寄存器、调用标准外设库、…

阅读更多 →
ESXi 7.0 服务器虚拟化部署全流程:从U盘引导到管理网络配置 2026/9/30 11:28:25

ESXi 7.0 服务器虚拟化部署全流程:从U盘引导到管理网络配置

简介:这是一份面向服务器运维、虚拟化管理员与IT基础架构人员的PDF技术资料,聚焦VMware vSphere ESXi 7.0从零开始的完整安装部署流程。读者可据此在物理服务器上快速搭建裸金属虚拟化平台,并掌握管理网络、IPv4地址等基础配置,适…

阅读更多 →
生产排产PMC的4种经典算法:最短工期、最早交货期、Slack、CR值 2026/9/30 11:28:18

生产排产PMC的4种经典算法:最短工期、最早交货期、Slack、CR值

很多PMC每天最头疼的,不是不会排计划,而是所有人都觉得自己的订单最急。 销售说客户催得厉害,老板说这个客户不能丢,生产说换线太频繁,采购说关键料还没到,仓库说半成品堆不下。 最后PMC夹在中间&#xff0…

阅读更多 →
合并两个有序链表:迭代、递归与原地合并的面试全攻略 2026/9/30 11:28:18

合并两个有序链表:迭代、递归与原地合并的面试全攻略

1. 这道题为什么值得反复刷:合并有序链表的本质与常见误区 如果只让我推荐三道链表入门题,LeetCode 21“合并两个有序链表”一定在其中。它的题干极短:给定两个升序链表 list1 和 list2 ,把它们合并成一个新的升序链表并返回。…

阅读更多 →
RL-10-赵-Actor-Critic03:DPG03【Deterministic Actor-Critic】【梯度优化:θₜ₊₁=θₜ+αᶿ∇ᶿμ(sₜ)(∇ₐqᵤ(sₜ,a))|a=μ(sₜ)】 2026/9/30 11:28:11

RL-10-赵-Actor-Critic03:DPG03【Deterministic Actor-Critic】【梯度优化:θₜ₊₁=θₜ+αᶿ∇ᶿμ(sₜ)(∇ₐqᵤ(sₜ,a))|a=μ(sₜ)】

二、The algorithm of deterministic actor-critic 基于policy gradient,the gradient-ascent algorithm就可以最大化 J ( θ ) J(\theta)

阅读更多 →
【从零写一个CAD 03】三个 double 值得单独一个类吗:把视图变换抽成 View 2026/9/30 11:28:11

【从零写一个CAD 03】三个 double 值得单独一个类吗:把视图变换抽成 View

🫧 励志不掉头发的内向程序员:个人主页✨️ 个人专栏: 《C语言》《Linux学习》🌅偶尔悲伤,偶尔被幸福所完善 👓️博主简介: 文章目录前言一、先看看这几个数现在住在哪二、这三个数的问题不是"多"&#xff0…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉