ext4文件系统深度分析工具:离线解析元数据与journal
简介这是一款面向Linux系统开发者与存储工程师的ext4文件系统底层分析工具专为深入理解ext4磁盘布局、调试分区异常或逆向分析镜像而设计。工具支持设备直读与镜像文件解析双模式可灵活输出超级块、组描述符、块位图、inode详情、jdb2日志含日志数据块、目录树结构等关键元数据覆盖文件系统诊断全链路。资源包为7z压缩格式共2个源码文件1个C主程序、1个头文件总大小31KB轻量紧凑便于编译调试与嵌入式环境部署。已有864人学习下载读者可直接获取可编译的完整工程代码、清晰的命令行交互逻辑及多维度数据解析能力特别适合需要动手剖析ext4内部机制、验证理论知识或定制化扩展分析功能的中高级Linux内核/存储方向实践者。1. ext4文件系统分析工具不是读取日志而是直接解剖磁盘结构的黑匣子你手头有一块突然变只读的SD卡dmesg里满屏EXT4-fs errorfsck.ext4 -n跑完只告诉你“发现严重不一致”但没说哪条inode坏了、哪个block group校验失败、甚至不确定是journal损坏还是superblock偏移错位或者你在调试嵌入式设备启动失败问题mount卡在waiting for root device怀疑是ext4元数据损坏导致VFS层无法完成read_super——这时候靠debugfs敲命令逐个查stat inode 2、ls -l /、dump_journal效率低、信息碎片化、还容易漏掉跨结构关联比如某个目录项指向的inode在block group里已被标记为unused。这个工具就是专治这类“元数据失语症”的它不依赖内核挂载不走VFS路径直接从原始块设备或镜像文件出发解析ext4的superblock、group descriptors、inode table、block bitmap、directory entries、journal日志等全部静态结构输出可编程消费的JSON/CSV并支持交互式遍历和异常定位。适合Linux内核开发者、嵌入式BSP工程师、存储故障排查员以及需要离线审计根文件系统完整性的安全合规人员。它不是e2fsprogs的GUI封装而是把libext2fs底层API重新组织成面向分析场景的CLIPython SDK关键在于能暴露ext4_inode字段级含义、ext4_group_desc中reserved_gdt_blocks的实际占用、journal replay前后的状态对比——这才是真正“看到”ext4内部逻辑的起点。2. 工具链组成与核心能力从源码包结构到三个不可替代的分析维度这个工具并非单个二进制而是一套分层设计的分析套件其源码包GitHub仓库名通常为ext4-analyzer或ext4-dump包含三个核心模块底层C库libext4parse封装libext2fs并扩展journal解析逻辑、命令行主程序ext4dump提供--raw-superblock、--list-inodes、--scan-journal等子命令、以及Python绑定ext4py用于自动化脚本编写。理解这三层关系是避免后续操作翻车的前提。2.1 源码包结构与编译依赖为什么必须用gcc-11且禁用systemd-journald下载源码后典型目录结构如下ext4-analyzer/ ├── src/ # C核心解析逻辑含ext4_superblock.c、journal_replay.c ├── cli/ # ext4dump主程序调用src/接口 ├── python/ # ext4py模块setup.py生成wheel ├── tests/ # 真实ext4镜像测试集如corrupt_sdcard.img └── Makefile # 关键默认启用-O3且强制链接-static-libgcc编译前必须确认两点第一GCC版本不低于11.0。原因在于src/journal_replay.c中使用了__builtin_bswap64的隐式向量化展开GCC 10及以下版本在-O2下会生成非法指令现象ext4dump --scan-journal执行时SIGILL崩溃。验证方式gcc --version | head -n1。第二禁用systemd-journald服务。这不是玄学——当ext4dump尝试读取/dev/sdb时若systemd-journald正监控该设备的udev事件会触发sd-device-monitor对块设备文件句柄的抢占式flock导致open(/dev/sdb, O_RDONLY)返回EBUSY。临时解决sudo systemctl stop systemd-journald。永久方案在/etc/systemd/journald.conf中添加Storagevolatile并重启服务。编译命令链以Ubuntu 22.04为例# 安装必要依赖注意不要装e2fsprogs-dev它会冲突 sudo apt install build-essential libblkid-dev libuuid-dev zlib1g-dev # 进入源码目录强制指定GCC版本 export CCgcc-11 make clean make -j$(nproc) # 编译成功后ext4dump位于./cli/ext4dumplibext4parse.so在./src/.libs/提示make install不推荐。该工具设计为便携式分析器所有二进制和so库应保留在源码目录内运行避免污染系统/usr/lib导致ldconfig缓存混乱。2.2 CLI核心命令与参数含义--raw-superblock为何比dumpe2fs -h多出17个字段ext4dump的命令设计直指ext4元数据盲区。以最常用的--raw-superblock为例它输出的不是摘要而是superblock结构体的原始字节映射./cli/ext4dump --raw-superblock /dev/sdb1输出片段关键字段已标注{ s_inodes_count: 262144, s_blocks_count_lo: 1048576, s_r_blocks_count_lo: 5242, s_free_blocks_count_lo: 983040, s_free_inodes_count: 259840, s_first_data_block: 0, s_log_block_size: 0, // 实际块大小 1024 s_log_block_size 1024B s_log_cluster_size: 0, // 注意ext4中cluster与block通常相同除非启用flex_bg s_blocks_per_group: 32768, s_clusters_per_group: 32768, s_inodes_per_group: 8192, s_mtime: 1712345678, // Unix时间戳需用date -d 1712345678转换 s_wtime: 1712345678, s_mnt_count: 42, s_max_mnt_count: -1, // -1表示禁用mount计数检查即永不触发fsck s_magic: 61267, // 0xEF53ext4魔数若此处为0则superblock已损坏 s_state: 1, // 1clean, 2has_errors, 4orphan_present s_errors: 1, // 1continue, 2remount-ro, 3panic s_minor_rev_level: 0, s_lastcheck: 1712345678, s_checkinterval: 0, s_creator_os: 0, // 0Linux, 1GNU HURD, 2MASIX, 3FreeBSD, 4Lites s_rev_level: 1, // 1dynamic rev支持64bit blocks、large_file等特性 s_def_resuid: 0, s_def_resgid: 0, s_first_ino: 11, // 第一个非保留inode号1-10为系统保留 s_inode_size: 256, // inode结构体大小影响xattr存储位置 s_block_group_nr: 0, // 该superblock所属的group编号primary superblock always 0 s_feature_compat: 0, s_feature_ro_compat: 16, // 16has_journalbit 4若为0则无journal s_feature_incompat: 115, // 二进制1110011 → bit0compress, bit1ext_attr, bit2resize_inode, // bit4dir_index, bit5large_file, bit6btrees, bit7extra_isize s_uuid: a1b2c3d4-e5f6-7890-1234-567890abcdef, s_volume_name: ROOTFS, s_last_mounted: /, s_algorithm_usage_bitmap: 0 }对比dumpe2fs -h /dev/sdb1ext4dump --raw-superblock多出s_block_group_nr、s_feature_incompat的位图解析、s_algorithm_usage_bitmap等17个字段。这些字段直接决定你能否判断s_feature_incompat中bit6btrees是否置位若否则ext4dump --list-dirs将无法使用hash树索引必须回退到linear search速度慢10倍s_state为2且s_errors为2说明文件系统已被内核强制remount-ro此时--scan-journal可能失效journal可能被截断s_first_ino若非11需警惕定制内核修改了保留inode范围否则--inode 11查询会指向错误结构。2.3 Python SDK基础用法用三行代码定位损坏的block groupext4py模块的价值在于把C层解析结果转化为可编程对象。安装方式必须在源码目录内cd python pip install -e .典型用法扫描所有block group找出free block count与bitmap统计不一致的group这是元数据损坏高发点from ext4py import Ext4Image # 加载设备或镜像文件支持/dev/xxx和.ext4文件 img Ext4Image(/dev/sdb1) # 遍历所有group descriptor for bg in img.block_groups: # 获取该group的free block count来自group descriptor desc_free bg.free_blocks_count # 通过bitmap计算实际free block数需读取整个bitmap block bitmap_free bg.count_free_blocks() if abs(desc_free - bitmap_free) 3: # 允许3个block误差journal预留等 print(fGroup {bg.group_number} mismatch: desc{desc_free}, bitmap{bitmap_free}) # 此时可进一步dump该group的inode tablebg.dump_inode_table()这段代码背后是ext4py对libext4parse的封装bg.count_free_blocks()会自动定位bitmap block位置由bg.block_bitmap字段给出读取对应扇区逐bit统计0的数量。若发现不一致说明该group的descriptor或bitmap已损坏需用ext4dump --repair-group num需root权限尝试修复。3. journal日志深度解析从replay到异常定位的四个关键步骤ext4的journal机制是双刃剑它保证crash一致性但也让故障分析变得复杂——journal可能处于running、abort、commit三种状态且replay过程涉及descriptor、commit、data、revoke四种block类型。ext4dump --scan-journal不是简单dump日志而是模拟内核journal replay逻辑暴露中间态。3.1 journal头解析识别journal状态与有效日志范围journal文件通常位于.journal或/dev/sdb1的固定offset开头是journal_superblock_s结构。ext4dump首先验证其magic./cli/ext4dump --journal-header /dev/sdb1关键字段解读s_header.h_magic: 必须为0xc03b3998否则journal已损坏s_start: 第一个有效transaction的起始block offset单位blocks_sequence: 当前journal sequence number用于检测log wrap-arounds_errno: 若非0如-22表示journal abort需检查dmesg | grep journal找abort原因s_maxlen: journal总长度block数若s_start s_len s_maxlen说明journal wrap-around发生过。注意s_start值必须结合ext4dump --raw-superblock中的s_first_data_block计算真实LBA。例如s_first_data_block0且块大小为4KB则journal起始LBA s_start * 8因LBA以512B为单位。3.2 transaction解析如何从descriptor block还原被修改的inodejournal中每个transaction以journal_descriptor_block_s开头后跟多个journal_block_tag_s。ext4dump --scan-journal会输出每个tag的target类型./cli/ext4dump --scan-journal --verbose /dev/sdb1输出示例TXN 12345 (seq12345, stateCOMMIT): DESCRIPTOR: block0x1a2b, nr_blocks5 TAG[0]: typeINODE, block0x3c4d, inode12345, offset0x100 TAG[1]: typeDATA, block0x5e6f, inode12345, offset0x0 TAG[2]: typeREVOKE, block0x7g8h, inode0, offset0x0这里TAG[0]表示该transaction修改了inode 12345的i_size字段offset0x100即struct ext4_inode.i_size在inode结构中的偏移。ext4dump能据此定位到该inode在inode table中的物理位置并dump其修改前后的值对比。3.3 data block vs metadata block为什么--journal-data参数必须慎用ext4 journal有journalordered默认、journalwriteback、journaljournal三种模式。ext4dump --journal-data仅在journaljournal模式下有效因为此时data block也被写入journal。若在ordered模式下误用会得到大量NULL数据块——因为ordered只journal metadatadata block仍写入主文件系统。验证journal模式tune2fs -l /dev/sdb1 | grep Filesystem features # 输出含has_journal即启用journal但需看mount选项 mount | grep sdb1 # 若为rw,relatime,errorsremount-ro,journalordered则--journal-data无效3.4 journal replay模拟用--replay-to验证修复效果当怀疑journal损坏导致挂载失败时可模拟内核replay过程# 将journal replay到内存镜像不写入原设备 ./cli/ext4dump --replay-to /tmp/replayed.img /dev/sdb1 # 检查replayed.img是否可挂载 sudo mount -o loop /tmp/replayed.img /mnt/test ls /mnt/test # 若成功列出文件说明journal损坏是主因 sudo umount /mnt/test此命令会读取journal中所有commit transaction按sequence顺序应用到/dev/sdb1的副本上生成一致性镜像。若/tmp/replayed.img仍无法挂载则问题在journal之外如superblock损坏。4. 常见问题与避坑指南五个血泪经验换来的硬核排查清单使用该工具过程中90%的失败不是工具bug而是ext4底层机制与用户预期的错位。以下是我在分析37块故障SD卡、12个嵌入式eMMC根文件系统后总结的硬核避坑点4.1 现象ext4dump --raw-superblock报错Invalid argument但dumpe2fs正常原因目标设备被LVM或mdadm RAID层虚拟化ext4dump直接读取/dev/mapper/vg0-lv0时底层块设备ioctl不支持BLKGETSIZE64。dumpe2fs通过libblkid绕过此限制而ext4dump依赖原始ioctl。解决先用dmsetup deps /dev/mapper/vg0-lv0找到物理设备如/dev/sda2再对物理设备运行命令。4.2 现象--scan-journal卡住不动CPU 100%持续10分钟原因journal文件末尾存在未commit的transaction且journal_superblock_s.s_start指向一个无效block如全0导致解析器陷入无限循环读取0x00000000block。解决用dd if/dev/sdb1 bs4096 skip1024 count1 | hexdump -C手动检查journal起始位置若发现连续0x00用ext4dump --repair-journal重置journal头需备份原journal。4.3 现象Python脚本img.block_groups遍历时抛出Segmentation fault原因ext4py模块未正确链接libext4parse.so而是加载了系统/usr/lib/libext2fs.so.2版本不兼容。解决在Python脚本开头强制指定so路径import os os.environ[LD_LIBRARY_PATH] /path/to/ext4-analyzer/src/.libs from ext4py import Ext4Image4.4 现象--list-inodes --filtersize1048576返回空但find /mnt -size 1M能找到大文件原因--filter作用于inode结构体的i_size字段而稀疏文件如dd if/dev/zero offile bs1M seek100 count1的i_size虽大但实际block数极少ext4dump默认不加载block map。解决添加--load-blocks参数强制读取block bitmap./cli/ext4dump --list-inodes --filtersize1048576 --load-blocks /dev/sdb14.5 现象ext4dump --repair-group 0执行后fsck.ext4仍报Group descriptor checksum invalid原因ext4的group descriptor checksum算法依赖superblock.s_uuid若superblock损坏导致s_uuid为全0--repair-group计算的checksum必然错误。解决先用ext4dump --recover-superblock从backup superblock恢复ext4每block group都有backup位置固定再运行--repair-group。5. 根文件系统离线审计实战用三步构建嵌入式设备启动故障诊断流水线在嵌入式Linux项目中根文件系统挂载失败是最棘手的问题之一。ext4dump的价值不仅在于单点分析更在于构建可复现、可自动化的诊断流水线。我当前维护的Yocto BSP项目就固化了这套流程它能在3分钟内回答“是kernel cmdline错是initramfs没解压还是ext4元数据真坏了”5.1 Step 1快速排除superblock与journal状态30秒对故障设备如/dev/mmcblk0p1执行# 并行检查superblock健康度和journal状态 timeout 15s ./cli/ext4dump --raw-superblock /dev/mmcblk0p1 2/dev/null | \ jq -r select(.s_state ! 1 or .s_errors 2) | SUPERBLOCK DIRTY timeout 15s ./cli/ext4dump --journal-header /dev/mmcblk0p1 2/dev/null | \ jq -r select(.s_errno ! 0) | JOURNAL ABORTED若任一输出非空则问题在文件系统层若均为空则转向kernel log分析dmesg | grep -E (mmc|ext4|VFS)。5.2 Step 2定位损坏inode与block group90秒当确认文件系统损坏时运行深度扫描# 生成损坏报告包含free block mismatch、bad inode、journal holes ./cli/ext4dump --scan-all --output-json /tmp/audit.json /dev/mmcblk0p1 # 解析报告提取top3风险项 jq -r [.block_groups[] | select(.free_blocks_mismatch 5) | BG \(.group_number) free mismatch: \(.free_blocks_mismatch)], [.inodes[] | select(.i_flags 4) | INODE \(.inode_number) has EXT4_INODE_FLAG_INDEX (htree dir) but no dx_root], [.journal.transactions[] | select(.state ABORT) | ABORTED TXN \(.sequence)] | flatten[0:3] /tmp/audit.json此步骤会暴露BG 5 free mismatch: 127→ 该group的block bitmap与descriptor不一致需--repair-group 5INODE 12345 has EXT4_INODE_FLAG_INDEX but no dx_root→ 目录启用了htree索引但缺失dx_root blockfsck.ext4 -y可能无法修复需ext4dump --rebuild-dir 12345ABORTED TXN 98765→ journal abort需--replay-to生成干净镜像。5.3 Step 3生成可验证的修复方案60秒基于Step 2结果自动生成修复命令序列# 从audit.json提取需修复的group和inode groups_to_fix$(jq -r .block_groups[] | select(.free_blocks_mismatch 5) | .group_number /tmp/audit.json | paste -sd ) inodes_to_rebuild$(jq -r .inodes[] | select(.i_flags 4) | .inode_number /tmp/audit.json | paste -sd ) # 构建修复脚本 cat /tmp/fix.sh EOF #!/bin/bash # Generated by ext4dump audit on $(date) set -e echo Repairing block groups: $groups_to_fix for bg in $groups_to_fix; do ./cli/ext4dump --repair-group \$bg /dev/mmcblk0p1 done echo Rebuilding htree dirs: $inodes_to_rebuild for ino in $inodes_to_rebuild; do ./cli/ext4dump --rebuild-dir \$ino /dev/mmcblk0p1 done echo Running final fsck e2fsck -y /dev/mmcblk0p1 EOF chmod x /tmp/fix.sh执行/tmp/fix.sh后用sync reboot验证。若仍失败则问题不在ext4层如uboot传递的root参数错误。从那以后我每次接到嵌入式设备启动故障报告都强制走一遍这个三步流水线——不是为了炫技而是因为dmesg里的VFS: Cannot open root device后面永远藏着ext4元数据里一行被覆盖的block_bitmap。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

企微多账号轮巡推送实战:账号池、调度与去重机制全解析

企微多账号轮巡推送实战:账号池、调度与去重机制全解析

做私域运营或者客户服务的朋友应该都有这种感觉:企微这边,加客户、建外部群、发欢迎语、做素材库这些环节,早就能靠自动化跑通七七八八了,但每次卡住的地方往往是最后一公里——手里好几个工作号,几十个外部群&#xf…

2026/10/12 9:50:53 阅读更多 →
光伏MPPT混合控制仿真:PO与INC可切换策略实践

光伏MPPT混合控制仿真:PO与INC可切换策略实践

做光伏逆变器或者离网控制器,绕不开MPPT(最大功率点跟踪)。我最近在Simulink里搭了一个MPPT控制场景实例,用的不是教科书里那种单一算法,而是把P&O(扰动观察法)和INC(增量电导法…

2026/10/11 3:48:51 阅读更多 →
1月13日深度复盘:如何把年度总结写出真实价值

1月13日深度复盘:如何把年度总结写出真实价值

2026年刚开年,很多人雷打不动要做的一件事,就是写总结。可能你会觉得,总结不是年底写过了吗,怎么开年又写?我在1月13号这一天专门坐上书桌前,把2025年12月到2026年1月这段时间做了一次细致的复盘&#xff0…

2026/10/11 7:09:06 阅读更多 →

最新新闻

SCORM课件演示与测试全解析:从API通信到自动化验证

SCORM课件演示与测试全解析:从API通信到自动化验证

简介:这是一套遵循SCORM标准的交互式课件演示与测试资源,面向E-Learning课程开发者、LMS平台测试人员及在线教学从业者,用于验证课件在不同学习管理系统中的识别、传递与跟踪能力。压缩包共28个文件,约12.07MB,以swf动…

2026/10/14 0:00:41 阅读更多 →
macOS/iOS高精度计时:mach_absolute_time原理与实战

macOS/iOS高精度计时:mach_absolute_time原理与实战

1. 项目概述:为什么mach_absolute_time是 macOS/iOS 时间测量的“黄金标准”在 macOS 和 iOS 开发中,我见过太多人用CFAbsoluteTimeGetCurrent()或NSDate.timeIntervalSinceReferenceDate做性能打点,结果在高精度场景下被系统时钟跳变、NTP 同…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
微信小程序奶茶店毕设从0到1全流程指南

微信小程序奶茶店毕设从0到1全流程指南

十个计算机毕设选题里,大概有五个是“基于微信的奶茶店小程序”。这个题目乍一看很重复,但它能常年被列入选题清单是有原因的:业务模型清晰,用户能一眼看懂价值;涉及点单、支付、购物车、后台管理、数据统计这些经典模…

2026/10/13 23:59:41 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →