[{"data":1,"prerenderedAt":1487},["ShallowReactive",2],{"content:\u002F2026\u002Fthings-about-compression":3,"surround:\u002F2026\u002Fthings-about-compression":1476},{"id":4,"title":5,"body":6,"categories":1447,"date":1449,"description":1450,"draft":1451,"extension":1452,"image":1453,"meta":1454,"navigation":1456,"path":1457,"permalink":1453,"published":1453,"readingTime":1458,"recommend":1453,"references":1463,"seo":1467,"sitemap":1468,"stem":1469,"tags":1470,"type":1474,"updated":1449,"__hash__":1475},"content\u002Fposts\u002F2026\u002FThings-About-Compression.md","视频压制指南",{"type":7,"value":8,"toc":1410},"minimark",[9,12,16,29,45,49,54,57,62,66,76,93,100,103,113,116,134,137,143,177,180,183,201,208,211,214,217,270,274,278,287,290,297,303,306,309,312,343,347,350,353,359,374,381,388,392,395,401,404,407,413,426,429,435,438,447,453,456,481,485,525,531,537,547,551,558,561,564,837,840,853,859,862,903,906,915,942,948,954,963,969,978,986,1139,1142,1146,1155,1167,1171,1175,1178,1181,1189,1194,1198,1204,1208,1212,1219,1227,1231,1235,1296,1300,1320,1324,1327,1380,1388,1392,1395,1402,1405],[10,11,5],"h1",{"id":5},[13,14,15],"h2",{"id":15},"引言",[17,18,19,20,24,25,28],"p",{},"在完成视频翻译和字幕打轴后，最后一步就是「压制」。硬字幕的压制是个漫长的话题。压制的核心目的是在",[21,22,23],"strong",{},"文件体积","和",[21,26,27],{},"画面质量","之间找到最佳平衡，并将字幕（尤其是带有卡拉 OK 等复杂效果的 ASS 特效字幕）永久烧录进视频画面中。",[17,30,31,32,35,36,40,41,44],{},"本文档将首先从音视频处理领域的底层架构 ——",[21,33,34],{},"FFmpeg 命令行开源程序","入手，深度解析转码的核心逻辑、关键参数与工业级滤镜调用；随后，针对不同应用场景下的效率需求，对主流的图形用户界面（GUI）前端套件（如高度现代化的 ",[37,38,39],"code",{"code":39},"HandBrake"," 与经典的 x264 封装器 ",[37,42,43],{"code":43},"小丸工具箱","）进行操作说明。",[13,46,48],{"id":47},"一ffmpeg-入门","一、FFmpeg 入门",[50,51,53],"h3",{"id":52},"_1ffmpeg-引言","1.FFmpeg 引言",[17,55,56],{},"FFmpeg 是一个伟大的工具，无需多言。它是整个音视频处理领域的基石，绝大多数视窗化压制软件的底层都依赖它。掌握基础的命令行压制，可以为你提供最高的自定义程度和批处理效率。",[58,59],"pic",{"caption":60,"src":61},"图片毫不夸张地解释了FFmpeg对于现代互联网基础设施的重要性","https:\u002F\u002Fimg.gnix807.cn\u002F%E4%B8%8B%E8%BD%BD%20(2).png",[63,64,65],"h4",{"id":65},"安装",[67,68,70],"alert",{"type":69},"info",[17,71,72],{},[73,74,75],"em",{},"注：本小节的内容以 Windows 用户为例。",[17,77,78,79,86,87,92],{},"前往 FFmpeg 官网建议的 ",[80,81,85],"a",{"href":82,"rel":83},"https:\u002F\u002Fwww.gyan.dev\u002Fffmpeg\u002Fbuilds\u002F#release-builds",[84],"nofollow","Windows 版本的已编译文件 (gyan.dev)"," 进行下载，或者在 ",[80,88,91],{"href":89,"rel":90},"https:\u002F\u002Fffmpeg.org\u002Fdownload.html#build-windows",[84],"FFmpeg 官网下载页"," 选择其他编译版本。一般在下载时选择 release 版本、 标记组件为 full 的版本进行下载。",[17,94,95,96,99],{},"下载完成后，将内容解压到你的硬盘某处，例如：",[37,97,98],{"code":98},"C:\\FFmpeg","。如果之前安装过独立的 FFmpeg，可以覆盖到老版本的文件夹。之后，将安装路径添加到系统的 Path 环境变量。",[17,101,102],{},"最后，检查是否能从命令行正常启动。打开 PowerShell，输入：",[104,105,111],"pre",{"className":106,"code":108,"language":109,"meta":110},[107],"language-powershell","ffmpeg\n","powershell","",[37,112,108],{"__ignoreMap":110},[17,114,115],{},"来查看返回的版本号是否与你下载的一致。",[117,118,119,127],"ul",{},[120,121,122,123,126],"li",{},"如果你的电脑上安装了多个 FFmpeg（有时候其他软件会安装 FFmpeg 作为基础组件），可以通过 ",[37,124,125],{"code":125},"(Get-Command ffmpeg).source"," 来查看被调用的 FFmpeg 路径，以确认是否调用了希望调用的 FFmpeg。",[120,128,129,130,133],{},"如果 ",[37,131,132],{"code":132},"ffmpeg"," 命令调用了别处的 FFmpeg，你可以考虑将刚安装的 FFmpeg 的路径移动到 Path 环境变量列表中的靠前的位置，使 Windows 在查找设备上的 FFmpeg 时优先寻到这个版本。",[63,135,136],{"id":136},"基本视频概念",[17,138,139,140],{},"在介绍 FFmpeg 的工作命令之前，我们首先对视频文件内部的一些概念做一个通俗的说明。注意： ",[73,141,142],{},"以下的说明可能存在不准确之处，仅作大致理解用。",[117,144,145,171],{},[120,146,147,150,151],{},[21,148,149],{},"流","（stream）：通常的视频文件中最易见的是视频流与音频流两个流。部分视频文件（多为 mkv 文件）还有字幕流，即内挂字幕。注意，有的视频将字幕嵌入到了视频流中（内嵌字幕），这类视频没有字幕流，也无法提取出字幕文件。至于数据流，本文不作介绍。\n",[117,152,153,159,165],{},[120,154,155,158],{},[21,156,157],{},"码率 \u002F 比特率","（bitrate）：衡量流的数据量的标准。高码率的视频、音频携带了比低码率更多的数据，在压制时（允许的）损失较小，因此它们的质量一般更高。例如，128 kbps 的 MP3 音频的听感效果一般比 64 kbps 的好。",[120,160,161,164],{},[21,162,163],{},"分流 \u002F 混流","（mux\u002Fdemux）：将多个流从一个视频文件中对应地抽取出来，称为分流。反之，将多个流整理后写入某个文件，称为混流。",[120,166,167,170],{},[21,168,169],{},"容器","（container）：可以粗略地理解为某种扩展名类型的视频文件。比如 MP4 是一种容器，MKV 是另一种容器。",[120,172,173,176],{},[21,174,175],{},"编码 \u002F 解码","（encode\u002Fdecode）：将流用某种格式或规范记录下来并存储，称为编码；将编码后的流，根据格式或规范来逆向实现编码的过程，从而将流还原出来，称为解码。我们最经常听到的规范大概是 H.264，最常见到的编码器可能是 libx264。",[63,178,179],{"id":179},"色深与色度采样",[17,181,182],{},"在很长的一段时间内，8 bit 色深、4:2:0 色度采样是最常见的视频像素格式。",[117,184,185,191],{},[120,186,187,190],{},[21,188,189],{},"色深位","（bit）：该概念与图片中颜色分级的位概念一致。在很长一段时间内，最广泛使用的颜色分级会把纯黑到纯白的灰阶分成 256 级，因此叫 8 位（因为 2^8=256）色深。8 bit 的视频也是最广为使用的。我们预期 10 bit 将继任；但目前 10 bit（甚至更高）色深主要在录制设备上应用，而在播放设备（显示屏等）上的普及尚远。",[120,192,193,196,197,200],{},[21,194,195],{},"色度采样","（chroma sampling）：视频在录制或编码时，我们常逐个记录像素的明度、而采样式地（非逐个）记录像素的色度，以此减小视频大小。这种方式称为 YCrCb，其中 Y 表示明度，Cr 与 Cb 用于记录色度（红色与蓝色的偏移量）。",[198,199],"br",{},"色度采样方式常常使用 x:y:z 的方式来表示，如 4:2:0。这种记法表示在 4 个像素宽、2 像素高的区域中，每行对 x 个像素进行亮度采样。x 通常是 4，也就是全像素亮度记录。而 y 与 z 分别代表第一行与第二行的采样数。例如，4:2:2 表示在两行中均只对 2 个像素采样色度（剩余像素的色度由采样速度推断），因此实际只使用了这 8 个像素中 4 个像素的色度信息，即丢失了 50% 的色度。同理，4:2:0 在第一行对 2 像素色度采样、不在第二行色度采样，因此丢失了 75% 的色度信息。最后，4:4:4 表示对全像素记录色度。",[17,202,203,204,207],{},"在 FFmpeg 中，可以使用 ",[37,205,206],{"code":206},"ffmpg -pix_fmts"," 来查看 FFmpeg 支持的所有像素格式。",[63,209,210],{"id":210},"常用的编码格式",[17,212,213],{},"FFmpeg 支持基本所有的主流编码格式。",[17,215,216],{},"常用的视频编码格式有：",[218,219,220],"card-list",{},[117,221,222,234,246,254],{},[120,223,224,229,230,233],{},[80,225,228],{"href":226,"rel":227},"https:\u002F\u002Ftrac.ffmpeg.org\u002Fwiki\u002FEncode\u002FH.264",[84],"H.264"," 是上一代最广为使用的视频编码格式，始于 2003 年，当之无愧的一代霸主。在 FFmpeg 中可由 ",[37,231,232],{"code":232},"libx264"," 编码器支持。",[120,235,236,241,242,245],{},[80,237,240],{"href":238,"rel":239},"https:\u002F\u002Ftrac.ffmpeg.org\u002Fwiki\u002FEncode\u002FH.265",[84],"H.265"," （或称 HEVC） 是 H.264 的接任者，于 2013 年正式面世。它在同等视频质量下提供了相比 H.264 而言可达 50% 的体积缩减。 ",[37,243,244],{"code":244},"libx265"," 编码器对该编码格式提供了支持。",[120,247,248,253],{},[80,249,252],{"href":250,"rel":251},"https:\u002F\u002Ftrac.ffmpeg.org\u002Fwiki\u002FEncode\u002FVP9",[84],"VP9"," 经历了从 VP3 起漫长的版本迭代，VP 系列解码器的开发公司 On2 被谷歌收购。谷歌在 2013 年左右推出了取代上一代 VP8 编码的 VP9，主要为旗下的互联网视频平台 YouTube 所采用。",[120,255,256,261,262,265,266,269],{},[80,257,260],{"href":258,"rel":259},"https:\u002F\u002Ftrac.ffmpeg.org\u002Fwiki\u002FEncode\u002FAV1",[84],"AV1"," (AOMedia Video 1) 是 H.265 的免版税竞争者，极大地基于 VP9 的技术，并在 VP9 的基础上提供了惊人的压缩比率。其开发联盟由诸多互联网公司支持，并受到主流浏览器 Chrome 与 Firefox 的积极推动。它在 FFmpeg 中由 ",[37,263,264],{"code":264},"libsvtav1","（以及原来的 ",[37,267,268],{"code":268},"libaom-av1"," ）编码器对该编码格式提供支持。",[58,271],{"caption":272,"src":273},"AV1、x265、VP9 等主流编码器的平均压缩比","https:\u002F\u002Fimg.gnix807.cn\u002FCompare.png",[50,275,277],{"id":276},"_2ffmpeg-实用命令","2.FFmpeg 实用命令",[17,279,280,281,286],{},"FFmpeg 的",[80,282,285],{"href":283,"rel":284},"https:\u002F\u002Fffmpeg.org\u002Fffmpeg.html",[84],"官方文档","简洁有力，但它的排版逻辑是技术文档而不是工具书或问答，因此可能并不是一个好的参阅选择。",[17,288,289],{},"本文将以实际用例为主。毕竟照搬 FFmpeg 的文档实在没有什么意义。本文主要集中于视频压制方面的用例，是由浅入深的，不过如果读者没有任何的 FFmpeg 使用经验，仍然建议按顺序依次浏览。",[17,291,292,293,296],{},"在开始之前，先介绍一个全局参数 ",[37,294,295],{"code":295},"-hide_banner","；它可以阻止 FFmpeg 在每次执行时开头打印的那一堆版本信息文本。例如，在展示 FFmpeg 的许可证时，隐藏这部分默认打印的版本信息：",[104,298,301],{"className":299,"code":300,"language":109,"meta":110},[107],"ffmpeg -hide_banner -L\n",[37,302,300],{"__ignoreMap":110},[63,304,305],{"id":305},"字幕操作",[17,307,308],{},"FFmpeg 可以将字幕内挂到封装容器内，也可以内嵌到视频流中。",[17,310,311],{},"一些注意事项：",[117,313,314,317],{},[120,315,316],{},"独立的字幕文件请使用 UTF-8 编码。",[120,318,319,320,323,324,327,328],{},"Windows 系统可能缺少一个字体接口，需要自己配置一份 ",[37,321,322],{"code":322},"fonts.conf"," 文件，并放在 ",[37,325,326],{"code":326},"%FONTCONFIG_PATH%"," 这个环境变量对应的路径下。\n",[117,329,330,337],{},[120,331,332,333,336],{},"如果用户没有该变量，请新建一个；其默认值一般是 ",[37,334,335],{"code":335},"C:\\Users\\用户名\\"," 。",[120,338,339,340,342],{},"关于 ",[37,341,322],{"code":322}," 文件，请参考本文末尾的附录。",[344,345,346],"h5",{"id":346},"内挂字幕",[17,348,349],{},"内挂字幕是一种相对于外挂字幕的称呼。外挂字幕是指将字幕存放在一个独立的字幕文件中，在播放视频时，通过视频播放器来加载这个字幕文件。而内挂字幕，是将这样一个独立的「字幕文件」，封装在了视频文件内部作为独立的字幕数据流。这样既能按需开启或关闭字幕，也免去了字幕文件丢失、匹配等烦恼。",[17,351,352],{},"内挂字幕的本质是将字幕文件单独作为字幕流封装，因此不需要对视频流进行编码。因此，将字幕文件内挂到指定的视频一般非常快：",[104,354,357],{"className":355,"code":356,"language":109,"meta":110},[107],"ffmpeg -i input.mp4 -i input.srt -c:v copy -c:a copy -c:s ass output.mkv\n",[37,358,356],{"__ignoreMap":110},[17,360,361,362,365,366,369,370,373],{},"这里面 ",[37,363,364],{"code":364},"input.mp4"," 是未添加字幕的视频的名字（以及路径），",[37,367,368],{"code":368},"input.srt"," 文件是所要挂载的字幕，",[37,371,372],{"code":372},"output.mkv"," 是输出视频的文件名。",[17,375,376,377,380],{},"在封装时，一般需要选择 ",[37,378,379],{"code":379},"-c:s ass"," 这个字幕转码器。上例中使用了早年间非常流行的内挂字幕容器 mkv，实际上 mp4 容器也可以进行内挂操作。",[17,382,383,384,387],{},"要从有字幕流的视频文件中移除字幕，可以使用 ",[37,385,386],{"code":386},"-sn"," 参数，在此不做赘述。",[389,390,391],"h6",{"id":391},"内挂字幕的元数据操作",[17,393,394],{},"FFmpeg 支持以元数据（metadata）的形式指定流的信息，这也包括字幕流（内挂字幕）。其中，比较常用的元数据可能是指定字幕的语言。下例向一个无字幕的视频文件中添加了一个 ass 字幕文件，并指定其语言为中文（语言码应遵循 ISO639-2 标准的三位代码，例如英文 eng、日文 jpn）：",[104,396,399],{"className":397,"code":398,"language":109,"meta":110},[107],"ffmpeg -i input.mp4 -i input.ass -c:v copy -c:a copy -c:s ass -metadata:s:s:0 language=chi output.mkv\n",[37,400,398],{"__ignoreMap":110},[344,402,403],{"id":403},"内嵌字幕",[17,405,406],{},"内嵌字幕（或称硬字幕）是指将字幕与原视频图像混叠的一种字幕，它直接嵌入到图像中，因此无法关闭，也无法调整字幕的大小、字体等样式。内嵌字幕的本质是将字幕作为图像输出，因此需要对视频流进行编码，往往速度慢：",[104,408,411],{"className":409,"code":410,"language":109,"meta":110},[107],"ffmpeg -i input.mp4 -vf subtitles=input.srt output.mp4\n",[37,412,410],{"__ignoreMap":110},[17,414,361,415,417,418,421,422,425],{},[37,416,364],{"code":364}," 是未添加硬字幕的视频的名字（以及路径），",[37,419,420],{"code":420},"input.srt\u002Fass"," 文件是所要压制的字幕，",[37,423,424],{"code":424},"output.mp4"," 是输出的硬字幕视频的文件名。",[17,427,428],{},"如果字幕以字幕流的形式存在于另一个视频文件中，可以直接调用，无需将字幕流先提取成文件：",[104,430,433],{"className":431,"code":432,"language":109,"meta":110},[107],"ffmpeg -i input.mkv -vf subtitles=input.mkv output.mp4\n",[37,434,432],{"__ignoreMap":110},[63,436,437],{"id":437},"压制与码率",[67,439,441,444],{"type":440},"tip",[17,442,443],{},"备注",[17,445,446],{},"在大多数压制场合，CRF 都是更受欢迎的，也是保持画面质量的一选。如果要严格限制文件大小，那么就使用二压；如果要严格限制视频码率，才会考虑使用定限码率压制（或者二压）。",[67,448,450],{"type":449},"warning",[17,451,452],{},"本节以下的例子将以 libx264 编码器为例，并只是进行了粗略的介绍。关于编码器的更多详细内容，请参阅官方文档。",[17,454,455],{},"视频的压制主要有 CRF（Constant Rate Factor，恒定率系数）与二压（2Pass）两种常用的方法，以及定限码率压制这种相对不常用的方法（不太推荐）：",[117,457,458,475,478],{},[120,459,460,463,464],{},[21,461,462],{},"在编码器 libx264\u002Flibx265 中（vp9 等其他编码器中的情形并不同）"," ，CRF（Constant Rate Factor）指定一个 0~51 的数值作为视频质量标准值（FFmpeg 中，libx264 默认 23，常用范围是 17~28；libx265 默认 28）。CRF 的数值越小，恒定率系数越好，压缩率也越低。恒定律系数的视频码率是根据画面动态调整的，与恒定码率（CBR）恰好是对立的。\n",[117,465,466,469,472],{},[120,467,468],{},"CRF 为 0 表示无损，51 表示 FFmpeg 所能达到的最差效果。",[120,470,471],{},"如果设置一个小于默认值 23 的值，那么输出视频的画面会（从视觉观感上）保留较好的效果，但同时文件的体积也较大；如果设置一个大于 23 的值，那么输出的视频大小会被压缩，但会在画面观感上有一定损失。",[120,473,474],{},"对于 H.264 编码，CRF 在 17 左右时，输出的视频损失就非常小了，因此选择比 17 更小的 CRF 意义不大；类似地，CRF 如果大于 28，其效果相比于原视频可能就会出现明显的损失，因此通常也不建议选择大于 28 的数值，",[120,476,477],{},"二压（2Pass）是需要生成固定大小文件时的压制方法，顾名思义，需要编码两次（因此较慢）。用户可能需要自行计算视频码率限值。",[120,479,480],{},"定限码率（Limited bitrate）压制是仅在网络上传有严苛要求时才使用的方法，并不是画面质量的第一选择。",[344,482,484],{"id":483},"恒定率系数crf","恒定率系数（CRF）",[17,486,487,488,491,492,495,496,499,500,499,503,499,506,499,509,499,512,499,515,499,518,499,521,524],{},"除 ",[37,489,490],{"code":490},"-crf"," 外，CRF 的压制中还有一个参数，称为预案 ",[37,493,494],{"code":494},"-preset"," 。较慢的预案能够更好地发挥压制的效果，按压制后质量从低到高分为 ",[37,497,498],{"code":498},"ultrafast"," , ",[37,501,502],{"code":502},"superfast",[37,504,505],{"code":505},"veryfast",[37,507,508],{"code":508},"faster",[37,510,511],{"code":511},"fast",[37,513,514],{"code":514},"medium",[37,516,517],{"code":517},"slow",[37,519,520],{"code":520},"slower",[37,522,523],{"code":523},"veryslow"," 这 9 种。预案越慢，压缩效果（指视频质量与文件体积之比）越好，或者说同等视频质量下输出文件的体积越小。",[17,526,527,528,530],{},"下例中使用了 ",[37,529,517],{"code":517}," 预案来进行压制，即期望得到较好的压缩效果。视频编解码器设置为 libx264，设定了一个恒定率系数优于默认的 CRF 值（设定的 20 比默认的 23 小，即效果优于默认转码），并对音频流进行复制：",[104,532,535],{"className":533,"code":534,"language":109,"meta":110},[107],"ffmpeg -i video.mp4 -c:v libx264 -preset slow -crf 20 -c:a copy out.mp4\n",[37,536,534],{"__ignoreMap":110},[17,538,539,540,542,543,546],{},"编码器 ",[37,541,232],{"code":232}," 还提供了一个 ",[37,544,545],{"code":545},"-qp"," 参数，即量化参数（Quantization Parameter）。它可以取 -1 以上的整数值（默认值 -1 表示自动）。简单地理解，CRF 就是自动根据画面中运动的多与少来调整 QP ，来达到好的压缩效果。通常情况下，用户都应当选择 CRF，而不是 QP 参数。",[344,548,550],{"id":549},"二压2pass","二压（2Pass）",[67,552,553,555],{"type":440},[17,554,443],{},[17,556,557],{},"通常只在强制要求文件大小时使用二压。",[17,559,560],{},"设想一个针对哔哩哔哩平台的二压规避场景：你需要将一期 15 分钟（900 秒）长的视频，精确压制到 500 MB 以内，以确保处于平台最优先的处理权重区间。同时，为了保证原声与特效音的清晰度，需保持音频码率在 192 kbps。",[17,562,563],{},"首先计算压制后视频流的比特率值。已知 1 MB = 8192 kbit，下式的第一项即为目标总文件的理论平均比特率，减去第二项音频流的比特率，即可推导出视频流的可用比特率上限：",[565,566,569],"span",{"className":567},[568],"katex-display",[565,570,573,638],{"className":571},[572],"katex",[565,574,577],{"className":575},[576],"katex-mathml",[578,579,582],"math",{"xmlns":580,"display":581},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML","block",[583,584,585,633],"semantics",{},[586,587,588,607,610,613,616,619,621,623,626,629],"mrow",{},[589,590,591,604],"mfrac",{},[586,592,593,597,601],{},[594,595,596],"mn",{},"500",[598,599,600],"mo",{},"×",[594,602,603],{},"8192",[594,605,606],{},"900",[598,608,609],{},"−",[594,611,612],{},"192",[598,614,615],{},"≈",[594,617,618],{},"4551",[598,620,609],{},[594,622,612],{},[598,624,625],{},"=",[594,627,628],{},"4359",[630,631,632],"mtext",{}," kbit\u002Fs",[634,635,637],"annotation",{"encoding":636},"application\u002Fx-tex","\\frac{500 \\times 8192}{900} - 192 \\approx 4551 - 192 = 4359\\ \\text{kbit\u002Fs}",[565,639,643,757,778,797,815],{"className":640,"ariaHidden":642},[641],"katex-html","true",[565,644,647,652,748,751,754],{"className":645},[646],"base",[565,648],{"className":649,"style":651},[650],"strut","height:2.0074em;vertical-align:-0.686em;",[565,653,656,661,744],{"className":654},[655],"mord",[565,657],{"className":658},[659,660],"mopen","nulldelimiter",[565,662,664],{"className":663},[589],[565,665,669,735],{"className":666},[667,668],"vlist-t","vlist-t2",[565,670,673,730],{"className":671},[672],"vlist-r",[565,674,678,692,703],{"className":675,"style":677},[676],"vlist","height:1.3214em;",[565,679,681,686],{"style":680},"top:-2.314em;",[565,682],{"className":683,"style":685},[684],"pstrut","height:3em;",[565,687,689],{"className":688},[655],[565,690,606],{"className":691},[655],[565,693,695,698],{"style":694},"top:-3.23em;",[565,696],{"className":697,"style":685},[684],[565,699],{"className":700,"style":702},[701],"frac-line","border-bottom-width:0.04em;",[565,704,706,709],{"style":705},"top:-3.677em;",[565,707],{"className":708,"style":685},[684],[565,710,712,715,720,724,727],{"className":711},[655],[565,713,596],{"className":714},[655],[565,716],{"className":717,"style":719},[718],"mspace","margin-right:0.2222em;",[565,721,600],{"className":722},[723],"mbin",[565,725],{"className":726,"style":719},[718],[565,728,603],{"className":729},[655],[565,731,734],{"className":732},[733],"vlist-s","​",[565,736,738],{"className":737},[672],[565,739,742],{"className":740,"style":741},[676],"height:0.686em;",[565,743],{},[565,745],{"className":746},[747,660],"mclose",[565,749],{"className":750,"style":719},[718],[565,752,609],{"className":753},[723],[565,755],{"className":756,"style":719},[718],[565,758,760,764,767,771,775],{"className":759},[646],[565,761],{"className":762,"style":763},[650],"height:0.6444em;",[565,765,612],{"className":766},[655],[565,768],{"className":769,"style":770},[718],"margin-right:0.2778em;",[565,772,615],{"className":773},[774],"mrel",[565,776],{"className":777,"style":770},[718],[565,779,781,785,788,791,794],{"className":780},[646],[565,782],{"className":783,"style":784},[650],"height:0.7278em;vertical-align:-0.0833em;",[565,786,618],{"className":787},[655],[565,789],{"className":790,"style":719},[718],[565,792,609],{"className":793},[723],[565,795],{"className":796,"style":719},[718],[565,798,800,803,806,809,812],{"className":799},[646],[565,801],{"className":802,"style":763},[650],[565,804,612],{"className":805},[655],[565,807],{"className":808,"style":770},[718],[565,810,625],{"className":811},[774],[565,813],{"className":814,"style":770},[718],[565,816,818,822,825,829],{"className":817},[646],[565,819],{"className":820,"style":821},[650],"height:1em;vertical-align:-0.25em;",[565,823,628],{"className":824},[655],[565,826,828],{"className":827},[718]," ",[565,830,833],{"className":831},[655,832],"text",[565,834,836],{"className":835},[655],"kbit\u002Fs",[17,838,839],{},"在工程实践中，由于封装容器（如 MP4 的 Metadata 头部信息）会产生微小的额外体积开销，且 2Pass 在处理极复杂动态画面时仍有极小概率发生码率微小上浮。因此，必须在上式 4359 kbit\u002Fs 的基础上预留安全余量，通常建议向下取整，例如将其设置为 4300 kbit\u002Fs。",[67,841,842],{"type":449},[17,843,844,845,848,849,852],{},"如果 first pass 后的文件出现了问题，请使用 ",[37,846,847],{"code":847},"-vsync cfr"," 代替 ",[37,850,851],{"code":851},"-an","。",[104,854,857],{"className":855,"code":856,"language":109,"meta":110},[107],"# 对于 H.264 二压，使用 -pass 参数。请注意首行行尾的续行。\nffmpeg -y -i video.mp4 -c:v libx264 -b:v 4300k -pass 1 -an -f null NUL && `\nffmpeg -i video.mp4 -c:v libx264 -b:v 4300k -pass 2 -c:a aac -b:a 192k out.mp4\n\n# 对于 H.265 二压，则应使用 -x265-params 参数。同样，请注意首行行尾的续行。\nffmpeg -y -i video.mp4 -c:v libx265 -b:v 4300k -x265-params pass=1 -an -f null NUL && `\nffmpeg -i video.mp4 -c:v libx265 -b:v 4300k -pass 2 -c:a aac -b:a 192k out.mp4\n",[37,858,856],{"__ignoreMap":110},[17,860,861],{},"大部分参数比较好理解，需要说明的是这几个参数：",[117,863,864,870,895],{},[120,865,866,869],{},[37,867,868],{"code":868},"-y"," 是一个全局参数，表示覆盖文件时不询问。",[120,871,872,875,876],{},[37,873,874],{"code":874},"NUL"," 表示二压的第一步不输出，而行尾的符号表示续行。\n",[117,877,878,885],{},[120,879,880,881,884],{},"如果使用 CMD 而不是 Powershell，请使用 ",[37,882,883],{"code":883},"^"," 代替首行行尾的续行符。",[120,886,887,888,891,892,884],{},"在 Linux 系统上，请使用 ",[37,889,890],{"code":890},"\u002Fdev\u002Fnull"," 代替 NUL，并使用 ",[37,893,894],{"code":894},"\\",[120,896,897,899,900,852],{},[37,898,851],{"code":851}," 表示忽略音频流。同理还有 ",[37,901,902],{"code":902},"-vn\u002Fsn\u002Fdn",[344,904,905],{"id":905},"定限码率压制",[17,907,908,909,914],{},"定限码率压制并不考虑文件大小，而是只限制文件码率；这多见于网络上传视频（或者流媒体传输受到网络条件限制）的场合（参考 ",[80,910,913],{"href":911,"rel":912},"https:\u002F\u002Ftrac.ffmpeg.org\u002Fwiki\u002FLimiting%20the%20output%20bitrate",[84],"Limiting the output bitrate","）。以 libx264\u002Flibx265 编码器为例，有以下几种码率限制参数：",[117,916,917,926,936],{},[120,918,919,922,923,925],{},[37,920,921],{"code":921},"-b:v"," 目标平均码率，也即希望得到的输出文件的平均码率（单位 bit\u002Fs）。该参数也在二压中被使用。",[198,924],{},"值得说明的是，输出视频的码率总是大于指定的平均码率的。这是由于容器本身还需要记录元数据等内容（可能占用数百 KB），因此我们总是需要对传入码率参数进行调低。这个码率超出问题在压制短时长视频压制时比较明显，请特别注意。",[120,927,928,931,932,935],{},[37,929,930],{"code":930},"-maxrate"," 最大码率，需要与 ",[37,933,934],{"code":934},"-bufsize"," 参数同时使用。",[120,937,938,941],{},[37,939,940],{"code":940},"-minrate"," 最小码率。这个较少使用。",[17,943,944,945,947],{},"只给定平均码率 ",[37,946,921],{"code":921}," 是一种比较粗糙的码率控制方法。正如上面所说，它会使得输出文件的码率总是略高于指定值。",[104,949,952],{"className":950,"code":951,"language":109,"meta":110},[107],"ffmpeg -i input -c:v libx264 -b:v 8M output.mp4\n",[37,953,951],{"__ignoreMap":110},[17,955,956,957,959,960,962],{},"相对的，利用最大码率参数 ",[37,958,930],{"code":930}," 与缓冲区参数 ",[37,961,934],{"code":934}," 可以更严格地控制码率上限。它会完成一段缓冲区大小就检验一次码率是否符合要求，因此在缓冲区设置上也存在一些技巧。通常，我们将缓冲区设置为与码率值相同。你也可以增大缓冲区，直到发现码率输出开始大幅度高于或低于目标值的临界点，然后以略低于该临界点的值作为缓冲区大小；当然，这需要更多的时间去尝试。",[104,964,967],{"className":965,"code":966,"language":109,"meta":110},[107],"ffmpeg -i input -c:v libx264 -b:v 8M -maxrate 8M -bufsize 8M output.mp4\n",[37,968,966],{"__ignoreMap":110},[17,970,971,972,977],{},"关于如何兼顾质量与文件体积，很难对「合适」的码率作出一个精确的定义。在这里只简单引用一下 ",[80,973,976],{"href":974,"rel":975},"https:\u002F\u002Fsupport.google.com\u002Fyoutube\u002Fanswer\u002F1722171?hl=en#zippy=%2Cbitrate",[84],"YouTube 码率建议表","供大家参考：",[117,979,980,983],{},[120,981,982],{},"表中码率的推荐值基于 H.264 编码。",[120,984,985],{},"表中推荐高帧率视频使用同规格低帧率 1.5 倍的码率，而 HDR 使用 SDR 1.25 倍的码率。",[987,988,989,1008],"table",{},[990,991,992],"thead",{},[993,994,995,999,1002,1005],"tr",{},[996,997,998],"th",{},"规格",[996,1000,1001],{},"帧率",[996,1003,1004],{},"推荐码率（SDR）",[996,1006,1007],{},"推荐码率（HDR）",[1009,1010,1011,1026,1039,1052,1064,1077,1089,1102,1114,1127],"tbody",{},[993,1012,1013,1017,1020,1023],{},[1014,1015,1016],"td",{},"8K",[1014,1018,1019],{},"24~30",[1014,1021,1022],{},"80 - 160 Mbps",[1014,1024,1025],{},"100 - 200 Mbps",[993,1027,1028,1030,1033,1036],{},[1014,1029,1016],{},[1014,1031,1032],{},"48~60",[1014,1034,1035],{},"120 - 240 Mbps",[1014,1037,1038],{},"150 - 300 Mbps",[993,1040,1041,1044,1046,1049],{},[1014,1042,1043],{},"4K (2160p)",[1014,1045,1019],{},[1014,1047,1048],{},"35 - 45 Mbps",[1014,1050,1051],{},"44 - 56 Mbps",[993,1053,1054,1056,1058,1061],{},[1014,1055,1043],{},[1014,1057,1032],{},[1014,1059,1060],{},"53 - 68 Mbps",[1014,1062,1063],{},"66 - 85 Mbps",[993,1065,1066,1069,1071,1074],{},[1014,1067,1068],{},"2K (1440p)",[1014,1070,1019],{},[1014,1072,1073],{},"16 Mbps",[1014,1075,1076],{},"20 Mbps",[993,1078,1079,1081,1083,1086],{},[1014,1080,1068],{},[1014,1082,1032],{},[1014,1084,1085],{},"24 Mbps",[1014,1087,1088],{},"30 Mbps",[993,1090,1091,1094,1096,1099],{},[1014,1092,1093],{},"1080p",[1014,1095,1019],{},[1014,1097,1098],{},"8 Mbps",[1014,1100,1101],{},"10 Mbps",[993,1103,1104,1106,1108,1111],{},[1014,1105,1093],{},[1014,1107,1032],{},[1014,1109,1110],{},"12 Mbps",[1014,1112,1113],{},"15 Mbps",[993,1115,1116,1119,1121,1124],{},[1014,1117,1118],{},"720p",[1014,1120,1019],{},[1014,1122,1123],{},"5 Mbps",[1014,1125,1126],{},"6.5 Mbps",[993,1128,1129,1131,1133,1136],{},[1014,1130,1118],{},[1014,1132,1032],{},[1014,1134,1135],{},"7.5 Mbps",[1014,1137,1138],{},"9.5 Mbps",[17,1140,1141],{},"YouTube 的音频码率推荐则为单声道 128 Kbps、环绕声 384 Kbps 以及 5.1 声道 512 Kbps.",[63,1143,1145],{"id":1144},"附录fontsconf","附录：fonts.conf",[17,1147,1148,1149,1154],{},"本文件来源于 ",[80,1150,1153],{"href":1151,"rel":1152},"https:\u002F\u002Fgithub.com\u002FFiveYellowMice\u002Fhow-to-convert-videos-with-ffmpeg-zh\u002Fblob\u002Fmaster\u002Fetc\u002Ffontconfig-windows\u002Ffonts.conf",[84],"FiveYellowMice\u002Fhow-to-convert-videos-with-ffmpeg-zh"," 仓库。",[1156,1157,1159],"folding",{"title":1158},"展开 fonts.conf 完整内容",[104,1160,1165],{"className":1161,"code":1163,"language":1164,"meta":110},[1162],"language-xml","\u003C?xml version=\"1.0\"?>\n\u003Cfontconfig>\n\n\u003Cdir>C:\\WINDOWS\\Fonts\u003C\u002Fdir>\n\n\u003Cmatch target=\"pattern\">\n\u003Ctest qual=\"any\" name=\"family\">\u003Cstring>mono\u003C\u002Fstring>\u003C\u002Ftest>\n\u003Cedit name=\"family\" mode=\"assign\">\u003Cstring>monospace\u003C\u002Fstring>\u003C\u002Fedit>\n\u003C\u002Fmatch>\n\n\u003Cmatch target=\"pattern\">\n\u003Ctest qual=\"all\" name=\"family\" compare=\"not_eq\">\u003Cstring>sans-serif\u003C\u002Fstring>\u003C\u002Ftest>\n\u003Ctest qual=\"all\" name=\"family\" compare=\"not_eq\">\u003Cstring>serif\u003C\u002Fstring>\u003C\u002Ftest>\n\u003Ctest qual=\"all\" name=\"family\" compare=\"not_eq\">\u003Cstring>monospace\u003C\u002Fstring>\u003C\u002Ftest>\n\u003Cedit name=\"family\" mode=\"append_last\">\u003Cstring>sans-serif\u003C\u002Fstring>\u003C\u002Fedit>\n\u003C\u002Fmatch>\n\n\u003Calias>\n\u003Cfamily>Times\u003C\u002Ffamily>\n\u003Cprefer>\u003Cfamily>Times New Roman\u003C\u002Ffamily>\u003C\u002Fprefer>\n\u003Cdefault>\u003Cfamily>serif\u003C\u002Ffamily>\u003C\u002Fdefault>\n\u003C\u002Falias>\n\u003Calias>\n\u003Cfamily>Helvetica\u003C\u002Ffamily>\n\u003Cprefer>\u003Cfamily>Arial\u003C\u002Ffamily>\u003C\u002Fprefer>\n\u003Cdefault>\u003Cfamily>sans\u003C\u002Ffamily>\u003C\u002Fdefault>\n\u003C\u002Falias>\n\u003Calias>\n\u003Cfamily>Courier\u003C\u002Ffamily>\n\u003Cprefer>\u003Cfamily>Courier New\u003C\u002Ffamily>\u003C\u002Fprefer>\n\u003Cdefault>\u003Cfamily>monospace\u003C\u002Ffamily>\u003C\u002Fdefault>\n\u003C\u002Falias>\n\u003Calias>\n\u003Cfamily>serif\u003C\u002Ffamily>\n\u003Cprefer>\u003Cfamily>Times New Roman\u003C\u002Ffamily>\u003C\u002Fprefer>\n\u003C\u002Falias>\n\u003Calias>\n\u003Cfamily>sans\u003C\u002Ffamily>\n\u003Cprefer>\u003Cfamily>Arial\u003C\u002Ffamily>\u003C\u002Fprefer>\n\u003C\u002Falias>\n\u003Calias>\n\u003Cfamily>monospace\u003C\u002Ffamily>\n\u003Cprefer>\u003Cfamily>Andale Mono\u003C\u002Ffamily>\u003C\u002Fprefer>\n\u003C\u002Falias>\n\u003Cmatch target=\"pattern\">\n\u003Ctest name=\"family\" compare=\"eq\">\n\u003Cstring>Courier New\u003C\u002Fstring>\n\u003C\u002Ftest>\n\u003Cedit name=\"family\" mode=\"prepend\">\n\u003Cstring>monospace\u003C\u002Fstring>\n\u003C\u002Fedit>\n\u003C\u002Fmatch>\n\u003Cmatch target=\"pattern\">\n\u003Ctest name=\"family\" compare=\"eq\">\n\u003Cstring>Courier\u003C\u002Fstring>\n\u003C\u002Ftest>\n\u003Cedit name=\"family\" mode=\"prepend\">\n\u003Cstring>monospace\u003C\u002Fstring>\n\u003C\u002Fedit>\n\u003C\u002Fmatch>\n\n\u003C\u002Ffontconfig>\n","xml",[37,1166,1163],{"__ignoreMap":110},[13,1168,1170],{"id":1169},"二handbrake","二、HandBrake",[50,1172,1174],{"id":1173},"_1-简介","1. 简介",[17,1176,1177],{},"这是一款全桌面平台的开源免费软件，在 Windows、macOS、Linux 下均有对应的应用程序界面。",[17,1179,1180],{},"HandBrake 基于鼎鼎大名的 FFmpeg 多媒体框架。FFmpeg 本身是命令行程序，可以这么理解：HandBrake 是为方便调用 FFmpeg 而开发的用户友好界面。",[17,1182,1183,1184],{},"下载地址：",[80,1185,1188],{"href":1186,"rel":1187},"https:\u002F\u002Fhandbrake.fr\u002F",[84],"点击跳转",[67,1190,1191],{"type":449},[17,1192,1193],{},"HandBrake 仅能用于视频转码压制，不提供视频剪辑和特效等功能！",[50,1195,1197],{"id":1196},"_2-快速入门","2. 快速入门",[1199,1200,1201],"blockquote",{},[17,1202,1203],{},"适合首次接触视频压制，并且时间紧迫、任务繁重的你",[63,1205,1207],{"id":1206},"_1-导入源视频","1. 导入源视频",[58,1209],{"caption":1210,"src":1211},"导入源视频","https:\u002F\u002Fimg.gnix807.cn\u002Fa16364b2-e92d-4617-b7be-38f639b2458c.png",[17,1213,1214,1215,1218],{},"软件启动后或手动点击 ",[37,1216,1217],{"code":1217},"打开源"," 即可导入视频，可以选择：",[117,1220,1221,1224],{},[120,1222,1223],{},"导入单个视频",[120,1225,1226],{},"或指定文件夹，自动批量扫描导入多个视频",[63,1228,1230],{"id":1229},"_2-选择预设设定输出文件保存位置和文件名","2. 选择预设，设定输出文件保存位置和文件名",[58,1232],{"caption":1233,"src":1234},"选择预设与输出设置","https:\u002F\u002Fimg.gnix807.cn\u002Fa000ffba-b3f2-4ad0-b704-c165bd63d328.png",[117,1236,1237,1268],{},[120,1238,1239,1240],{},"单个视频：\n",[117,1241,1242,1249,1259,1265],{},[120,1243,1244,1245,1248],{},"点击 ",[37,1246,1247],{"code":1247},"预设","；",[120,1250,1244,1251,1254,1255,1258],{},[37,1252,1253],{"code":1253},"Very Fast 720p30","（默认为 ",[37,1256,1257],{"code":1257},"Fast 1080p30","）；",[120,1260,1261,1262,1248],{},"确保输出格式为 ",[37,1263,1264],{"code":1264},"MP4",[120,1266,1267],{},"点击 浏览 设定保存位置。",[120,1269,1270,1271],{},"批量视频：\n",[117,1272,1273,1276,1286],{},[120,1274,1275],{},"参照上述设置。",[120,1277,1278,1279,1282,1283,852],{},"另外，可在 ",[37,1280,1281],{"code":1281},"标题"," 中逐个选择、编辑并 ",[37,1284,1285],{"code":1285},"添加到队列中",[120,1287,1288,1289,1291,1292,1295],{},"或在设置首个视频后，点击 ",[37,1290,1285],{"code":1285}," 下拉菜单中的 ",[37,1293,1294],{"code":1294},"全部添加","，将自动应用第一个视频的参数到所有视频并全部添加到队列。",[63,1297,1299],{"id":1298},"_3-开始压制","3. 开始压制",[117,1301,1302,1311],{},[120,1303,1239,1304],{},[117,1305,1306],{},[120,1307,1244,1308,852],{},[37,1309,1310],{"code":1310},"开始编码",[120,1312,1270,1313],{},[117,1314,1315],{},[120,1316,1244,1317,852],{},[37,1318,1319],{"code":1319},"启动队列",[63,1321,1323],{"id":1322},"_4-进阶使用","4. 进阶使用",[17,1325,1326],{},"花几分钟制作一个自己的预设是值得的。你可能会需要调节以下参数：",[1328,1329,1330,1333,1336,1339,1346,1355,1362,1373],"ol",{},[120,1331,1332],{},"勾选「摘要」页面中的「网页优化」复选框，这可以支持渐进式下载（方便观众在线观看的时候，在视频的不同地方之间来回跳转）（其实视频平台二压也会这么做？）",[120,1334,1335],{},"调整「尺寸」页面中的「分辨率限制」，以符合上传需求。不要将这里的分辨率设置为超过原视频分辨率。",[120,1337,1338],{},"如果原视频有画质缺陷，在「滤镜」页面中有一些调节的选项。具体选项对应的功能，以及同一功能下不同算法的优劣和适用范围，在网上都能搜索到。如果缺陷在原本观看时并不存在，可能是之前的压制出了问题，回头调整那里的参数可能会更快。",[120,1340,1341,1342],{},"「视频」页面中有许多非常重要的参数。例如视频编码器，帧率，质量，编码器预设，等等。下图是我的硬件组合里可选的所有编码器，其中许多是软件编码器，而带有 AMD VCE 或是 NVEnc 等字样的是硬件加速编码器。硬件加速编码器使用专用硬件，通常由 GPU 提供。软件编码器仅运行在 CPU 上。硬件编码器通常会牺牲极少量的细节换来巨大的速度提升。",[58,1343],{"caption":1344,"src":1345},"可选的所有编码器","https:\u002F\u002Fimg.gnix807.cn\u002F%E4%B8%8B%E8%BD%BD%20(3).png",[120,1347,1348,1349,1354],{},"如果你看到了「编码器级别」和「编码器预设」选项，并且里面有不止一个选项可以调节，请参考",[80,1350,1353],{"href":1351,"rel":1352},"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fhandbrake\u002Fcomments\u002Fb8yzd3\u002Fi_cant_understand_what_encoder_level_is\u002F",[84],"该帖子","。若嫌太长不看，就全都放到默认设置或是 Auto 上去。",[120,1356,1357,1358],{},"笔者常用的编码器预设（请注意帧率由原视频决定，并且小数点级别的差别在这里很重要。每次进行压制之前都务必检查视频帧率！）：",[58,1359],{"caption":1360,"src":1361},"笔者常用的编码器预设","https:\u002F\u002Fimg.gnix807.cn\u002F%E4%B8%8B%E8%BD%BD%20(4).png",[120,1363,1364,1365,1368,1369],{},"在「音频」页面中，请尽量选择「编码」一行带有 Passthru 字样的选项。本教程所示范的过程会在 ffmpeg 中转换一次音频编码为 aac（出于方便和兼容性考虑），再次压缩有损音频可能会影响音频质量。Passthru 选项会原封不动地保留原本的 aac 音频，省去一次压缩。如果你对音频质量有要求，请在工作流的一开始就选择最合适的音频文件下载，并不做任何转化（ffmpeg 参数为：",[37,1366,1367],{"code":1367},"-acodec copy"," ），或是进行最少次数的无损格式转换。",[58,1370],{"caption":1371,"src":1372},"音频页面设置","https:\u002F\u002Fimg.gnix807.cn\u002F%E4%B8%8B%E8%BD%BD%20(5).png",[120,1374,1375,1376],{},"在「字幕」页面中，删除默认的轨道（右边有灰色小叉，也可以点按右上角「清除」按钮），之后选择左上角带倒三角的轨道 - 导入字幕，并选择你的 ass 文件，勾选「Burn in」，甚至可以实现压制硬字幕这一功能，这个办法一般人我不告诉 ta…… 也就是说，在不需要编辑的情况下，HandBrake 可能就是一站式的视频压制解决方案了！由于这个功能太过于简单便捷，笔者直到写到这里之前都忘记了还有这么简单的办法，感觉可能比 Arctime 还要简单啊。",[58,1377],{"caption":1378,"src":1379},"字幕页面 Burn in 硬字幕","https:\u002F\u002Fimg.gnix807.cn\u002F%E4%B8%8B%E8%BD%BD%20(6).png",[17,1381,1382,1383,1387],{},"B 站站内亦有 HandBrake 的视频教程。或参阅软件",[80,1384,285],{"href":1385,"rel":1386},"https:\u002F\u002Fhandbrake.fr\u002Fdocs",[84],"（仅有英语文档可用，德语文档许久未更新）。",[13,1389,1391],{"id":1390},"三小丸工具箱已过时","三、小丸工具箱（已过时）",[17,1393,1394],{},"这个工具使用很便捷，在 B 站上有很多使用教程（它曾经也是 B 站半官方地推荐使用的压制软件），搜索即达。缺点是开发略微落后于当前时代，不过对于压制硬字幕这一用途仍然绰绰有余。",[17,1396,1397,1398],{},"工具箱官网：",[80,1399,1188],{"href":1400,"rel":1401},"https:\u002F\u002Fmaruko.appinn.me",[84],[17,1403,1404],{},"使用教程我实在懒得写了，看看视频吧。",[1406,1407],"video-embed",{"id":1408,"type":1409},"BV1um4y127zm","bilibili",{"title":110,"searchDepth":1411,"depth":1411,"links":1412},4,[1413,1415,1437,1446],{"id":15,"depth":1414,"text":15},2,{"id":47,"depth":1414,"text":48,"children":1416},[1417,1424],{"id":52,"depth":1418,"text":53,"children":1419},3,[1420,1421,1422,1423],{"id":65,"depth":1411,"text":65},{"id":136,"depth":1411,"text":136},{"id":179,"depth":1411,"text":179},{"id":210,"depth":1411,"text":210},{"id":276,"depth":1418,"text":277,"children":1425},[1426,1431,1436],{"id":305,"depth":1411,"text":305,"children":1427},[1428,1430],{"id":346,"depth":1429,"text":346},5,{"id":403,"depth":1429,"text":403},{"id":437,"depth":1411,"text":437,"children":1432},[1433,1434,1435],{"id":483,"depth":1429,"text":484},{"id":549,"depth":1429,"text":550},{"id":905,"depth":1429,"text":905},{"id":1144,"depth":1411,"text":1145},{"id":1169,"depth":1414,"text":1170,"children":1438},[1439,1440],{"id":1173,"depth":1418,"text":1174},{"id":1196,"depth":1418,"text":1197,"children":1441},[1442,1443,1444,1445],{"id":1206,"depth":1411,"text":1207},{"id":1229,"depth":1411,"text":1230},{"id":1298,"depth":1411,"text":1299},{"id":1322,"depth":1411,"text":1323},{"id":1390,"depth":1414,"text":1391},[1448],"技术","2026-07-12 14:40:00","从 FFmpeg 命令行的转码底层逻辑，到 HandBrake、小丸工具箱等图形前端 — 一份把字幕烧录进画面、平衡体积与画质的硬核压制手册。",false,"md",null,{"slots":1455},{},true,"\u002F2026\u002Fthings-about-compression",{"text":1459,"minutes":1460,"time":1461,"words":1462},"31 min read",30.245,1814700,6049,[1464],{"title":1465,"link":1466},"在线查看原网页","https:\u002F\u002Fwww.gnix807.cn\u002Fdocs\u002FTutorials\u002FTranslations\u002FCompression",{"title":5,"description":1450},{"loc":1457},"posts\u002F2026\u002FThings-About-Compression",[1471,1472,1473,39],"烤肉","压制","FFmpeg","tech","3weoRmN7QXRk2ZcpiYT5E0CFJl3pO99JXVk1ph3MlIs",[1477,1482],{"title":1478,"path":1479,"stem":1480,"date":1481,"type":1474,"children":-1},"字体选择指南","\u002F2026\u002Fthings-about-fonts","posts\u002F2026\u002FThings-About-Fonts","2026-07-12 14:20:00",{"title":1483,"path":1484,"stem":1485,"date":1486,"type":1474,"children":-1},"后期处理指南","\u002F2026\u002Fthings-about-post-production","posts\u002F2026\u002FThings-About-Post-Production","2026-07-12 15:00:00",1784029688164]