news 2026/9/4 5:22:28

技术视频制作全流程:从脚本撰写、FFmpeg剪辑到发布涨粉实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
技术视频制作全流程:从脚本撰写、FFmpeg剪辑到发布涨粉实战

嗨,各位 CSDN 的读者朋友,好久不见。

最近收到不少同学私信问我:平时写技术博客的人,到底是怎么把那些干货内容变成“最新视频”的?为什么有些博主发一条内容就能收获关注,而自己更新却没几个人看?趁着这次创作复盘,我整理了从录屏、剪辑到发布、涨粉的完整实操流程,全部基于我日常做视频教程和图文笔记的真实经验。

这篇文章会把“最新视频上线,求关注”这件事拆成一个标准化流水线:内容策划、脚本转化、录制环境、FFmpeg 剪辑、封面制作、多端发布、粉丝沉淀和数据分析。无论你是刚开始做技术账号的新手,还是已经产出了大量图文内容想拓展视频方向,都能直接对照着落地,少踩一半坑。

1. 背景与核心概念:为什么要把技术内容做成“视频上线”

先冷静聊一个问题:我们做技术博客、开源项目、编程笔记,为什么要额外做视频?

答案不是“视频行情好”,而是不同用户的信息接收习惯差异非常大。有人习惯在遇到 Bug 时快速搜索文字,有人则想在通勤路上听你讲完一个模块的原理。同一份内容,图文和视频是不同的消费形态。

从开发者的角度看,一次完整的“最新视频上线”其实包含三个阶段:

  1. 生产阶段:脚本草拟、环境录制、画面剪辑、字幕处理;
  2. 发布阶段:标题优化、封面制作、多平台分发、代码仓库同步关联;
  3. 运营阶段:读者评论互动、粉丝沉淀、数据分析与下一期选题规划。

很多技术人做视频失败,不是因为不会讲,也不是因为技术不够深,而是把“发布视频”当成了一个动作,而不是一条流程。最终的结果就是:视频传上去了,但标题、封面、说明文案、评论引导都没跟上,播放量自然也不理想。

这里有一个需要区分开来的概念:所谓“求关注”,并不是在视频结尾喊一句口号,而是在整条内容链路里,不断让读者感受到“关注你能持续获得什么价值”。这种价值可以是新知识、实战项目代码,也可以是避坑经验。

所以,本文不会教你花哨的营销话术,而是重点解决三个核心问题:

  • 如何把已有的技术经验流畅地变成视频内容;
  • 如何用最低成本完成视频的录制、剪辑与发布;
  • 如何建立一套可持续获取关注和反馈的运营流程。

2. 环境准备与版本说明

在正式开工前,我们需要搭建一套“够用但不发烧”的内容生产环境。很多初学者一上来就买昂贵的麦克风、相机,其实完全没有必要。技术视频的核心是屏幕操作和代码讲解,清晰度和同步率远比画质重要。

2.1 硬件与软件清单

下面是本文示例使用的基础环境。不同设备的操作路径会有差异,但整体流程是一致的。

类别推荐工具作用说明
操作系统Windows 10/11、macOS、主流 Linux 发行版需要支持录屏工具和 FFmpeg
录屏软件OBS Studio开源免费,支持窗口捕获和麦克风输入
剪辑命令行FFmpeg视频裁剪、转码、抽取音频和字幕合成
字幕编辑记事本 / VS Code手写 SRT 字幕文件,便于校对
封面制作Python + Pillow用代码生成统一风格的文字封面
博客发布CSDN 编辑器 / Markdown图文笔记与视频互相引流
代码管理Git + GitHub/Gitee保存脚本、模板和示例代码

版本方面不做强制要求。FFmpeg 建议使用最新稳定版,因为老版本对 H.264、AAC 等编码器的支持不够完善。OBS 同样使用官方最新版本即可。本文示例代码大多不依赖特定版本,如果你的环境不同,核心思路完全适用。

2.2 示例项目目录

为了不让视频素材散落得到处都是,建议先建立统一目录。这里我给出一套我长期使用的目录结构:

video-project/ ├── draft/ # 脚本草稿和 Markdown 文案 ├── assets/ # 图片、代码截图、图标素材 ├── record/ # OBS 原始录制文件 ├── output/ # FFmpeg 剪辑后的视频文件 ├── srt/ # 字幕文件 ├── cover/ # 生成的视频封面 └── publish/ # 平台发布说明和链接记录

这个结构的最大好处是:当你做了十期视频后,想回头找某一期的素材,一分钟就能定位,不至于翻遍硬盘。

3. 内容转化:把一篇技术文章拆成分镜脚本

技术视频最大的误区,是直接把图文教程念一遍。文字适合表达细节,而视频适合展示过程。比如讲“Spring Security 登录流程”,图文可能是大段代码和配置;视频则应该先画一条简化的请求链路,再打开浏览器演示一次实际跳转,最后贴出关键配置。

3.1 从文本到分镜的拆解方法

我习惯把一篇 3000 字左右的技术文章拆成 8 到 12 个分镜脚本。每个分镜只讲一个核心点。分镜表格可以这样做:

镜头编号时间范围画面内容口播/讲解词字幕提示
100:00-00:30片头 + 项目效果演示先展示最终运行效果,告诉观众学完能做什么本期成品演示
200:30-02:00需求分析页面什么问题需要解决,为什么选这个方案需求边界
302:00-05:00IDE 代码编写过程核心类结构和关键代码含义关键代码
405:00-06:30运行与测试操作启动服务并验证结果运行验证
506:30-07:00收尾引导总结要点,提醒关注后续内容下期预告

你会注意到,一个 7 分钟视频的脚本里,真正讲解代码的时间可能只有 3 分钟。这很正常。视频的价值是带观众走一遍问题解决路径,而不是把文档搬上屏幕。

3.2 控制视频节奏的两个指标

在脚本阶段,请提前估算两个数字:总字数和视频时长。

正常人说话语速大约每分钟 200 到 240 字。如果你是第一次录制,语速可能会偏慢。因此,一个 7 分钟视频的口播稿控制在 1400 到 1800 字之间比较合适。

如果脚本明显超过了这个范围,我建议拆分主题,而不是强行压缩。这也是为什么很多视频更新频繁的博主,反而会刻意把单期视频控制在 5 到 8 分钟。短视频时代,观众需要的是“可预期的收获时间”。

3.3 技术文的 Markdown 转脚本模板

下面是一个可以直接复用的脚本模板片段,适合放到项目目录的draft/文件夹中。

# 视频主题:最新视频上线,求关注!—— 技术视频制作全流程 ## 目标观众 - 正在学习后端 / 前端开发,希望提高技术输出能力的开发者 ## 本期核心收获 1. 学会把图文教程拆成分镜脚本 2. 掌握 OBS + FFmpeg 的基本用法 3. 知道如何通过视频获取精准关注 ## 分镜列表 - 镜头1(00:00-00:30):展示成品效果 - 镜头2(00:30-02:00):说明为什么要做视频内容 - 镜头3(02:00-05:00):演示录制和剪辑 - 镜头4(05:00-06:30):演示发布流程和互动技巧 - 镜头5(06:30-07:00):要点总结与关注引导

这个模板不是给你交作业用的,而是帮你建立一个“先想清楚再说”的习惯。技术视频不要求你有很强的表演能力,但要求你逻辑清楚,每个镜头都有明确目的。

4. 录制实操:OBS 设置与 FFmpeg 剪辑入门

脚本定稿以后,下一步是录制。很多初学者在录制阶段反复失败,往往是因为两个问题:一是录屏软件设置不正确,二是没有掌握最基础的格式知识。

4.1 使用 OBS 录制高质量屏幕内容

OBS Studio 是免费开源的录屏软件,几乎支持所有主流操作系统。打开后需要先做几个关键设置:

  1. 在“设置 -> 输出”中,录像格式选择 MKV,而不是 MP4。因为 MKV 在录制中断时也能保留已经录制的部分,不会导致整段视频损坏;
  2. 录像质量选择“ indistinguishable quality, large file size”或接近无损的选项。我们后期会用 FFmpeg 压缩,所以录制阶段宁可文件大一些,也不要让画面糊掉;
  3. 在“来源”中添加“显示器采集”或“窗口采集”。如果只是录制代码窗口,推荐使用“窗口采集”,避免录制到无关通知;
  4. 音频输入选择你的麦克风。建议先在 OBS 里测试一次音量,保证说话音量的峰值在 -12dB 到 -6dB 之间。

录制过程中,我会先对着脚本安静地念一遍,确保没有明显卡顿,再开始正式录制。不要心疼录制次数,前期多录几遍,剪辑时的痛苦会少很多。

4.2 用 FFmpeg 完成视频裁剪与压缩

录制好的 MKV 文件通常很大。一个 10 分钟的 1080P 视频,原始素材可能超过 2GB。此时 FFmpeg 就是最好的压缩工具。

先看视频基础信息:

ffmpeg -i input.mkv

这个命令会输出视频的编码格式、分辨率、帧率等元数据。如果信息太长,也可以在命令末尾加上2>&1 | grep -E "Duration|Stream"来只看关键行:

ffmpeg -i input.mkv 2>&1 | grep -E "Duration|Stream"

确认视频信息没问题后,把 MKV 转成压缩后的 MP4 文件:

ffmpeg -i input.mkv -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k output.mp4

命令参数解释如下:

  • -c:v libx264:视频编码器使用 H.264。
  • -preset medium:编码速度预设。越慢压缩率越高,但耗时更长。
  • -crf 23:画质控制参数。CRF 越小画质越好,文件越大。技术视频推荐 18 到 23 之间。
  • -c:a aac:音频编码为 AAC。
  • -b:a 128k:音频码率 128kbps。

如果你的视频需要裁掉开头和结尾,可以使用-ss-to参数:

ffmpeg -i input.mp4 -ss 00:00:30 -to 00:07:30 -c:v libx264 -crf 20 -c:a aac cut.mp4

这里-ss表示从第 30 秒开始,-to表示到第 7 分 30 秒结束。注意,-ss放在-i之前是快速跳转,放在-i之后是精确切割但速度更慢。对于普通技术视频,推荐把-ss放在-i之前。

4.3 给视频添加字幕文件

字幕是技术视频的刚需。因为很多代码名词和英文发音容易听错,有字幕可以大幅降低理解门槛。我们不需要使用复杂的剪辑软件,用手写 SRT 文件就能实现基础字幕。

SRT 文件的格式如下:

1 00:00:01,000 --> 00:00:04,000 大家好,欢迎来到本期视频。 2 00:00:04,500 --> 00:00:08,000 今天我们来解决技术视频制作过程中的常见问题。

保存为subtitle.srt,然后通过 FFmpeg 把字幕烧录到视频画面中:

ffmpeg -i cut.mp4 -vf "subtitles=subtitle.srt" -c:v libx264 -crf 20 -c:a copy output_srt.mp4

需要特别提醒的是,FFmpeg 的 subtitles 滤镜对字幕文件路径中的中文和特殊符号比较敏感。如果你在命令执行时报错“Unable to open”,可以把 SRT 文件放到视频同目录,并将文件名改为英文。

4.4 批量处理脚本示例

如果你一次录制了多段视频,可以使用 Bash 脚本逐个压缩。下面是适合 macOS 和 Linux 的示例脚本,Windows 用户可以在 Git Bash 中执行:

#!/bin/bash for file in ./record/*.mkv; do base=$(basename "$file" .mkv) echo "正在处理: $file" ffmpeg -y -i "$file" -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k "./output/${base}.mp4" done echo "批量转换完成,输出目录:./output"

写完后,先给脚本添加执行权限:

chmod +x convert.sh ./convert.sh

这段脚本没有做异常中断处理,适用于本地个人使用。如果你把它放到自己的服务器上做定时转码,一定还要加上日志输出和失败重试机制。

5. 发布准备:封面、标题与配套图文

视频制作完成只是第一步。所谓“最新视频上线”,更多时候考验的是发布环节的细节,尤其是封面和标题。

5.1 用 Python Pillow 生成封面

技术类视频的封面不需要很炫,但必须信息明确:主题、核心关键词、代码语言或框架 Logo 对应文字,都可以直接做成封面元素。

用 Python 生成封面的好处是模板化。每期视频只要更换标题文字,就可以批量生成风格统一的封面。

安装依赖:

pip install pillow

下面是生成一张 1280 x 720 封面图的示例代码,文字内容可以按需修改。

# 文件路径:cover/make_cover.py from PIL import Image, ImageDraw, ImageFont def make_cover(text, output_name): width, height = 1280, 720 image = Image.new("RGB", (width, height), "#1e293b") draw = ImageDraw.Draw(image) try: font = ImageFont.truetype("SentyZoo.ttf", 80) except OSError: font = ImageFont.truetype("STZHONGS.TTF", 80) # 标题自动换行处理 lines = [] current_line = "" for char in text: current_line += char if len(current_line) >= 8: lines.append(current_line) current_line = "" if current_line: lines.append(current_line) y_start = 300 line_height = 90 for line in lines: # 让文字尽量居中,简单估算宽度 bbox = draw.textbbox((0, 0), line, font=font) text_width = bbox[2] - bbox[0] x = (width - text_width) // 2 draw.text((x, y_start), line, fill="#f8fafc", font=font) y_start += line_height image.save(f"cover/{output_name}.png") print(f"封面已生成:cover/{output_name}.png") if __name__ == "__main__": make_cover("最新视频上线|视频制作全流程", "video_cover")

这个示例中用到了本地字体,如果你没有中文字体文件,可以把ImageFont.truetype的路径改成自己系统中的字体文件。在 Windows 中常见字体路径是C:/Windows/Fonts/msyh.ttc

5.2 标题里如何自然地出现“求关注”

很多平台会统计视频标题的点击率。“求关注”这三个字作为口语化表达,放在标题不同位置效果并不一样。如果标题写成“最新视频上线,求关注!”,信息太泛,路人不知道你做了什么内容。如果把主题放进去,再配合频道 IP,效果会好很多。

我常用的标题格式是:

【频道名】主题关键词:具体解决方案 | 实战演示

例如:

【烩面大王DW】视频制作全流程:从脚本撰写到发布拉新,完整实战

这样做的逻辑是:频道名树立 IP 识别度,核心关键词保证搜索可见,冒号后的副标题给出内容承诺。当观众在信息流里刷到视频时,能迅速判断“这个视频对我有没有用”。

5.3 视频与图文配套发布

CSDN 平台目前对图文和视频都有很好的分发场景。我的建议是视频上传后,同步发布一篇配套图文博客。不要只丢一个视频链接,而是把视频里涉及的技术要点、代码、排错命令完整写出来。

这样做的原因有两个:

  1. 搜索引擎和站内搜索对文字内容更友好,视频里的口播无法被完整检索;
  2. 观众看完视频后,通常需要一份文字版笔记来对照练习。视频负责建立整体认知,图文负责提供回头查阅的深度资料。

在图文里放视频链接时,可以加一句简短引导,例如:

如果你更习惯看视频讲解,可以点击文末视频链接观看完整操作过程。视频中包含实际运行演示,适合上下班通勤时快速了解全流程。

这种引导不要写得太硬,自然带过即可。

6. 获取关注与粉丝沉淀的可行方法

粉丝增长不是一次发布的瞬间效果,而是每次发布后长期互动积累的结果。下面我从技术博主视角拆解几种低风险、可持续的运营动作。

6.1 建立稳定的更新预期

“最新视频上线”对于老粉丝是一种信号:创作者还在持续输出,没有断更。对平台来说,稳定的更新频率意味着内容账号的活跃度更高。

具体到执行,建议你给自己定一个“可完成”的频率,比如每周更新一期视频 + 两篇图文。不要为了追求频率牺牲内容质量,更不要在某个时间段集中批量发布。稳定的长期输出,要远好过一个月爆发一次然后消失。

6.2 在评论区做技术答疑

视频发出后,真正的运营才刚刚开始。评论区出现的每一个问题,都代表一次拉近关系的可能。

我的建议是:前 48 小时尽量高频查看评论,回复技术细节问题。对于被问得比较多的问题,可以直接补一条置顶评论说明,或者收集到下一期视频的选题中。

这里要注意一个原则:不要为了回复而回复,更不要复制粘贴“感谢支持”这种话术。技术类观众的耐心有限,他们更希望你直接指出错误原因或给出排查方向。

例如,有人问“我按你的 FFmpeg 命令执行,为什么提示 No such file or directory?”,你应该先让他检查当前路径下有没有对应文件,然后再建议使用绝对路径。这种回答才能真正帮助对方。

6.3 用内容互链形成关注闭环

关注不是一次性动作,而是观众对“持续价值”的判断。为了让更多人从单篇内容沉淀为忠实读者,你需要主动搭建内容互链结构。

常见做法有:

  • 每一期视频结尾预告下一期主题;
  • 在博客文章底部分组推荐相关阅读;
  • 视频中的示例代码统一托管到开源仓库;
  • 建立标题关键词体系,例如统一使用“避坑”“实战”“原理”等类型词。

这些方式会慢慢形成内容矩阵。当一个新读者看到你的一篇干货后,他能顺着你的归类找到更多同类内容,关注行为就变得自然而然。

6.4 避免私信轰炸与刷量行为

我见过一些技术新人,为了快速增长粉丝,采用互关群、刷播放量甚至私信群发广告的方式。这些方法短期可能带来数字上升,但长期会劣化账号标签,并且违背平台规则,严重的还可能被限制推荐。

技术内容粉丝的价值远高于普通泛娱乐粉丝。一个能看懂你代码、愿意在评论区提问的粉丝,可能在未来成为你的合作者、内推人,或者开源项目的贡献者。为了这些长期价值,不值得用捷径换虚假繁荣。

7. 常见问题与排查思路

视频内容制作过程中,几乎每个环节都有高频报错。下面整理了我自己踩过的坑和排查清单。

问题现象常见原因解决思路
OBS 录制视频文件损坏直接录制为 MP4,录制中断导致不可播放录制时选择 MKV,录制完成后再转 MP4
FFmpeg 提示No such file or directory文件路径中包含中文或特殊字符切换到视频目录后使用相对路径,或把文件路径改成纯英文
FFmpeg 字幕烧录失败SRT 文件编码不是 UTF-8使用 VS Code 重新保存为 UTF-8 编码
视频文件过大无法上传CRF 值过低或码率过高提高 CRF 值到 23 以上,检查音频码率
视频播放不清晰录制时没有选择清晰度,或平台二次压缩录制时选择高分率窗口,剪辑后再用-crf 20压缩
视频有回声或者噪音系统声音和麦克风同时收录,麦克风增益过高录制前在 OBS 中单独调节音频轨道,使用降噪插件
封面文字位置偏移不同字体对应的文字宽度不一致在脚本中输出textbbox,动态计算文字宽度
发布视频后平台没有推荐标题信息不明确,内容过短检查标题是否包含具体主题关键词,视频长度尽量不低于 5 分钟

这些问题的共同规律是:多半出在“环境细节”而不是“技术难度”上。当你遇到一个奇怪的报错,不要急着改代码,先检查文件路径、编码格式和软件版本这三项。

8. 数据分析与持续优化

发布视频不是终点,数据复盘才是下一期内容的起点。虽然不建议过度迷信数据,但几个关键指标能帮你判断选题方向是否正确。

8.1 主要关注的五个指标

指标含义观察重点
播放量视频被打开的次数和封面、标题强相关
完播率看完整条视频的观众比例反映内容节奏是否拖沓
平均观看时长观众平均看了多久如果前 30 秒流失高,片头太长
互动率评论、点赞、收藏总数与播放量比值反映内容是否引发行动
涨粉量新增关注数量反映内容长期价值和 IP 认知

观察数据的正确方式,不是只看绝对数字。一个 2000 播放但收藏率极高的视频,可能比 2 万播放但无人收藏的视频更有长期价值。收藏和评论说明观众真的认为内容有用,至少未来会再次查找。

8.2 根据数据调整下一期内容

如果你连续做了五期视频,发现播放量最高的一期是“环境搭建类”内容,而代码原理类内容评论区提问更多,那就说明两类内容的流量定位不同。前者适合拉新,后者适合提升粉丝粘性。

比较合理的策略是:在每个内容周期的前三期用“场景痛点类”选题拉新,中间穿插“原理源码类”选题筛选深度读者,最终形成一个互补循环。这样既不会因为太难吓跑新人,也不会因为太浅留不住老粉。

关于工具,你可以用简单的表格记录每期数据。长期坚持后,你会慢慢找到属于自己的节奏,而不是被单期数据牵着走。

9. 账号冷启动期的三个实用经验

内容创作做到最后,真正拉开差距的往往不是某一项能力,而是持续产出和正反馈循环。这里分享三条适合技术开发者的冷启动经验,希望能帮你少走弯路。

第一,优先做你已经解决过的真问题。不要为了蹭热点而写自己不熟悉的话题。技术创作有一个很奇妙的特点:真实踩坑经历写出来,读者是能感受到的。哪怕这个话题很小,比如“Spring Boot 读取配置乱码”,只要你把前因后果、报错信息、完整解决方案写清楚,它依然能持续获得搜索流量。

第二,每次发布都维护一张“选题-素材-发布记录”表。技术创作者最怕的不是没灵感,而是忘了自己之前讲过什么。当你准备出第二期“XX实战”时,先翻一下之前的记录,可以避免内容重复,还能顺手做一期续集,让老读者有追更的期待感。

第三,保持“发布不是结束”的思维。视频上线后的 1 到 7 天,本身就是内容的一部分。每天花一点时间看评论、补充图文笔记、修正代码仓库,这些动作会让一篇普通内容慢慢变成一份可持续复用的技术资产。

如果你正在准备自己的第一期视频,不用等到设备齐全再动手。用手机录屏,用 OBS 免费版,用 FFmpeg 基础命令,用最简单的脚本模板,把第一个视频发出去,你就能跑通整个流程。祝你早日做出自己的代表作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 5:21:32

从零构建高并发电竞赛事平台后端:Spring Boot与WebSocket实战

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

作者头像 李华
网站建设 2026/9/4 5:21:27

多系统引导(Multiboot):Linux 与 Windows 共存

多系统引导(Multiboot):Linux 与 Windows 共存 本篇是前面《UEFI 双盘双系统(双Windows、双 Linux、Windows Linux)》的外篇——具体实操及细节示例。 本文实操示例:Ubuntu 22.04 与 Windows 10 双系统搭建…

作者头像 李华
网站建设 2026/9/4 5:21:17

第十三讲:点亮LED

大家好,接下来的一段时间我将开始学习野火的Linux系统课程并将学习到的干货逐步更新到我的CSDN博客中。没时间刷课的同学可以把我的博客喂给AI突击一下连接好电源线USB1./sys/class讲解/sys是sysfs 虚拟文件系统(内存里,重启消失)…

作者头像 李华
网站建设 2026/9/4 5:20:46

SpringBoot校园二手交易平台:从架构设计到毕业实践全解析

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

作者头像 李华
网站建设 2026/9/4 5:20:35

深入C标准库源码:从黑盒调用到白盒实现的系统编程精要

简介:本资源是经典著作《标准C库》(P.J. Plauger著,1992年Prentice Hall出版)配套的完整源代码实现,面向C语言中高级学习者、嵌入式开发者及标准库原理研究者,用于深入理解C标准库各模块的设计逻辑与底层实…

作者头像 李华
网站建设 2026/9/4 5:20:10

MTK平台Bootloader解锁与刷机实战:从原理到救砖全解析

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

作者头像 李华