NAZOrip | It Is a Mystery !!! - 编码器 / Encoding & Compressing
一款智能化、自动化的图形 UI/UX 流程设计的视频压制辅助软件，面向有一定视频编码常识的用户。功能概述源验证：根据 ffprobe 读数验证源视频提供包含成功、警告和错误状态的源检查清单与强行绕过功能高级并行处理：在指定线程数量的基础上，支持逐物理核心和 NUMA 节点绑定设置自动化与自定义：自动编写基本的 AviSynth、VapourSynth 脚本（视频解码与管道输出）为 FFMPEG-VS-AVS 生成 VFR → CFR 滤镜通过滑块控件为 FFMPEG-VS-AVS 生成缩放滤镜提供 FFMPEG-VS-AVS 滤镜编辑器自动计算编码器压制参数取段打样：使用 FFMPEG-VS-AVS 命令行生成选择时间/帧号高级监控：监控每个应用程序的内存使用情况，分别查看上游和下游（编码器）日志中断控制：可中断上游或下游程序（编码器）以一致地退出编码会话覆写保护：基于待覆盖文件大小的冷却时间防呆设计其它特点支持 x264、x265 和 SVT-AV1 编码器鼓励用户使用最新的修改版编码器软件截图本软件支持多语言，但为减少图片数量而在此统一用了英语文本截图。图片中可能会有一些过时的 UI 元素或文本，但整体布局和功能区域划分仍然适用。主界面：工具区、源导入区、分析区、检查列表、编码设置区和启动区脚本编辑器：AVS / VPY 编辑区、视频缩放与命令行与脚本行生成功能编码设置：CRF / ABR 参数、自定义预设等配置并行设置：NUMA 节点、CPU Sets 和高级线程数限制采样片段：时间/帧号选择、转换和基本预览编码监控：日志、进度、资源占用、高级中断控制和自动封装控制警告模态窗和文件覆盖保护功能运行要求Windows 10/11 x64推荐 1809 / 21H2（LTSC）或更高版本，最低 1607.NET 9 Desktop Runtime下载地址：微软官网下载编码相关工具你可以根据此教程来寻得合适的工具：Encoding Tools Download Tutorial或者着急要用的话，也可以无视上述教程并使用这个压缩包中的工具（不推荐但可以）Google Drive / ffmepg-ffprobe-x264-x265-SVTAV1 Pkg.Baidu Netdisk / ffmpeg-ffprobe-x264-x265-SVTAV1 Pkg. 提取码: ya32最后在项目的发布页（Releases）下载软件本体：GitHub最少只需一个上游程序 + 一个下游程序支持的管道上游程序（解码与滤镜工具）：ffmpegvspipe（支持 API 3.0、4.0 自动识别）avs2yuvavs2pipemodSVFI支持的管道下游程序（编码器）：x264 core 165 或更新x265 v4.2 或更新SVT-AV1 v4.1 或更新使用最新版本的编码器有助于提高性能（速度、画质、压缩率），以及更小的内存泄露概率图标使用Azure icons: azureicons.com单色小图标 by NiewBie: GitHub/Niewbie验证状态系统：所有测试目前均在 Windows 10 22H2 上验证尚未在 Windows 11 上验证，但该系统在内核层面上与 Windows 10 相比没有大的变动，因此可能会有图形渲染 bug，但不会有功能故障硬件：Core i5 7600k（4C4T）Ryzen 9 9900X（2CCD 12C24T）EPYC 7R13（6CCD 48C96T）Intel i7 14700KF（感谢 Whithost）本地化状态支持范围： 英语、简体、繁体仅机器翻译： 法语、西班牙语、日语、俄语如需提供翻译，请 fork 此仓库，在 Models/XxxLangProviderM 中添加新的语言条目，并提交 pull requestREADME 的翻译不是强制要求打赏信息开发这些工具并不容易。如果这套工具提高了你的效率，那么不妨赞助或推广一下。——Buy me a coffee 链接——PayPal 链接项目状态以下内容基于当前代码结构整理实现状态，用于标记主要模块和细分模块的完成度。分类含义如下：完成：已有实际实现，并已接入主流程或当前 UI未验证：已有完整实现，但因环境或外部服务限制尚未经过实际测试未完成：已有 UI、模型或部分逻辑，但行为不完整，或部分配置尚未被实际消费完全没做：仅有占位、清单、字段或旧代码，当前没有实际功能或未接入主流程已完成应用框架与主界面WPF 应用启动、主窗口和主界面布局已经实现，入口在 App.xaml.cs、MainWindow.xaml、Views/MainUI.xamlMainVM 负责主界面模块编排，包括工具区、源导入区、分析区、检查卡、编码设置区和启动区模态窗口导航、遮罩状态、关闭命令和基础命令模型已经实现多语言切换机制已经接入主要界面、卡片、按钮和模态窗文本工具导入与选择支持导入、替换、删除和选择外部工具已定义并支持的上游工具包括 ffmpeg.exe、vspipe.exe、avs2yuv.exe、avs2pipemod.exe、one_line_shot_args.exe已定义并支持的编码器包括 x264.exe、x265.exe、svtav1encapp.exe已定义并支持的分析和依赖项包括 ffprobe.exe、avisynth.dll工具版本检测、文件名校验、工具分区、默认选择和依赖/来源兼容性刷新已经实现源导入与脚本生成支持导入普通视频源、AviSynth 脚本、VapourSynth 脚本和 SVFI ini 源支持源文件路径持久化，并在启动时回填仍存在的源文件一键生成 AviSynth / VapourSynth 脚本已经实现，会写出 .avs 和 .vpy 文件并回填到脚本源卡片源类型与上游工具之间的选择联动已经实现例如 vspipe.exe 对应 .vpy，avs2yuv.exe / avs2pipemod.exe 对应 .avsffprobe 源分析与源检查ffprobe JSON 分析已经实现，并可复制原始分析结果源检查卡已经解析并展示 progressive、位深、帧率、SAR、色彩元数据、chroma 等检查项源检查问题查看、检查清单状态刷新和手动绕过已经接入主流程编码前置检查编码前置检查卡已经实现硬件和软件检查项已包含 AC 电源、输出目录、磁盘空间、写权限、输出文件覆盖、AviSynth / L-SMASH 相关检查编码前置问题查看、重新评估和手动绕过已经接入启动按钮状态编码参数配置x264 / x265 / SVT-AV1 的 CRF / ABR 基础参数配置已经实现编码预设、关键帧间隔和部分第三方参数开关已经实现并持久化编码设置卡片会显示当前编码参数摘要编码管线会根据当前配置生成对应编码器参数编码命令生成与启动Y4M 管线命令生成已经实现，支持多种上游工具输出到 x264 / x265 / SVT-AV1命令生成会结合 ffprobe 信息自动补充部分帧数、色彩、range、chroma、lookahead 等参数启动编码前会弹出命令确认窗口，确认后进入编码监控窗口采样片段支持按时间或帧号选择片段，并支持时间与帧号转换采样片段会以 sample 模式打开编码监控流程SVFI / OneLineShotArgs 当前不支持采样片段，主界面已有禁用提示编码监控与进程执行支持启动上游进程和编码器进程，并将上游 stdout 管道传给编码器 stdin支持读取上游程序与下游程序（编码器）stderr、日志折叠、保存日志、查看编码命令和调整日志字号支持编码进度、已写帧数、当前/预计输出大小、耗时、剩余时间和完成时间估算支持内存占用、工作集峰值、Page Fault、内存压力和内存范围条统计支持中断上游或编码器进程，编码完成后才能关闭窗口并行基础能力NUMA 节点枚举、CPU 拓扑读取、CPU Sets 分配和编码器线程数限制已有实现并行设置可以保存并应用到编码监控启动的上游程序与下游程序（编码器）进程编码器线程数会传给 x264 / x265 参数，SVT-AV1 当前没有线程参数生成应用配置与持久化应用配置、工具路径、源路径、编码参数和并行参数的 JSON 保存/加载基础逻辑已经实现语言配置已经接入保存和加载输出文件名工具支持路径预览、剪贴板、非法字符、保留名和长度检查确认后会回填输出设置卡片UI 组件卡片、按钮组、下拉菜单、设置项容器、检查清单、整数滑块、片段范围选择器、内存范围条和列文本组件已有实现当前使用到的单向 UI 转换器已经满足现有绑定需求编码参数配置细节EncoderConfM.CustomParams 会被保存，且已经被 EncodingPipelineH 拼入最终编码命令"自定义参数"区域不再是第三方开关汇总，而是直接读写一个自由文本参数实现x264 / x265 / SVT-AV1 的参数覆盖范围仍有限，但已堪用脚本编辑器脚本编辑器窗口、AVS / VPY 编辑区、复制完整脚本和复制输入输出片段"另存为文件"已实现"确认"已实现脚本保存和回填为简化逻辑，实现和一键生成按钮一样会同时保存 AVS 和 VPY 脚本主界面 Best Practices 检查卡BestPracsSelfCheckCardVM 是自查参考卡，不参与编码启动前的阻塞条件无 RunAllChecks()、无 IsBypassed、无 Inspect/Bypass 按钮通过 Subtitle 属性在 UI 上明确标识为仅供参考应用设置 → 文件覆盖文件覆盖设置会在展示压制命令并确认后，如果输出文件已存在，则追加覆盖确认弹窗，并按被覆盖文件大小延迟启用确认按钮未验证暂无完全没做暂无死胡同P-Core / E-Core 优化由于需要修改上游程序和编码器源码，该功能无法实现UI 中 P-Core / E-Core 相关复选框处于禁用状态这本质上属于 CISC 与 RISC 处理器厂商的职责，不是用户或应用层应该做的事情Large Pages 实现由于需要修改上游程序和编码器源码，该功能无法实现主要源码位置Commands/：用户操作命令、模态窗打开关闭、保存加载和编码启动入口Helpers/：编码管线、ffprobe 分析、工具检测、脚本模板、文件名校验、CPU / NUMA / 权限等辅助逻辑Models/：配置模型、工具定义、语言资源、检查清单和数据 DTOViewModels/：主界面、模态窗和卡片状态管理Views/：WPF 窗口和界面 XAMLComponents/：复用 UI 控件Converters/：WPF 绑定转换器测试与工程化当前没有单元测试、集成测试或自动化 UI 测试项目许多方案还未完全支持 .Net 9.0 的项目README 中尚未包含构建、运行、依赖工具准备和典型工作流说明（不过已在用法说明窗口 / AppUsageModal 中提供）确认窗口（ConfirmationModal）出现位置启动编码前的命令确认，以及输出文件覆盖确认：Commands/StartEncCmd.cs采样片段启动前的命令确认：ViewModels/SampleClipVM.cs编码监控里的“查看编码命令”：ViewModels/EncodingMonitorVM.cs脚本生成后的复制/保存结果提示：ViewModels/ScriptScribeVM.cs、Commands/SaveLoad/OneClickScriptGenCmd.cs源分析和检查结果提示：Commands/AnalyzeSrcVideoCmd.cs、Commands/CopyRawAnalysisCmd.cs、Commands/InspectEncProblemsCmd.cs、Commands/InspectSrcProblemsCmd.cs工具导入/文件选择时的二次确认：Commands/ImportToolCmd.cs、Helpers/SourceFilePickerH.cs设置数据存储位置所有持久化配置数据以 JSON 文件 形式存储在 {应用程序基目录}\1cenc\ 下：文件内容appconfig.json应用设置（覆盖保护配置、语言选择）appdata.json工具路径/版本/大小、源视频路径、输出目录encodingconf.json编码器参数（CRF/ABR、关键帧、预设、x264/x265/SVT-AV1 自定义参数）parallelismconfig.json并行设置（NUMA 节点 ID、CPU 偏好、线程数）持久化基类：Helpers\SaveLoadBaseH.cs 的配置模型继承自 SaveLoadBaseH<T>，通过 Save() / Load() 提供 JSON 序列化/反序列化。其他持久化数据（用户选择路径，不在 \1cenc\ 中）：生成的脚本文件（.avs / .vpy / .txt）经由 ViewModels\FilterScribeVM.cs 和 Commands\SaveLoad\OneClickScriptGenCmd.csstderr 日志文件（upstream-stderr.txt、downstream-stderr.txt）保存到输出目录，经由 ViewModels\EncodingMonitorVM.cs免责声明责任限制因使用或无法使用本软件所导致的任何直接、间接、附带、特殊或后果性损害（包括但不限于商业利润损失、业务中断、计算机系统损坏、数据丢失及商誉损害），即使已被告知此类损害的可能性，开发者亦不承担任何责任。使用者应自行承担使用本软件的一切风险。关于硬件损坏的说明视频压制属于长时间持续高负载 CPU 计算任务。在此场景下，包括但不限于以下情况可能对硬件造成损害：散热器安装不当、超频不稳定或电压设置过高，可能导致处理器加速老化、电气短路等硬件故障极端负载可能导致系统无响应、蓝屏死机，进而造成数据损坏或丢失本软件提供的保护措施x265 压力测试预设：提供用于验证系统稳定性的 x265 压力测试预设。但该测试的实际负载取决于输入视频的内容复杂度，建议使用与目标压制任务一致的测试视频作为源文件进行验证。由于该测试的压力可能会高于 Prime95 等传统压力测试工具，因此运行该测试本身就存在一定风险，只建议在全程监控温度和系统状态的前提下运行，并且在开始测试前先做好数据备份。避免进程优先级控制：本软件不会提高编码任务的进程优先级，以确保在编码器无响应时，操作系统及其他程序仍能正常响应。文件覆盖保护：在编码启动前，如果输出文件已存在，会弹出确认窗口并根据被覆盖文件大小延迟启用确认按钮，以避免误操作导致的数据丢失。建议用户采取的保护措施使用可靠的散热设备：普通的散热风扇难以承受长时间全速运行的损耗，建议选用品质可靠的方案。合理配置超频策略：应以长期高负载稳定运行为目标调整 CPU 与内存的超频参数，而非仅追求短时爆发性能。使用不间断电源（UPS）：高负载任务运行时突然断电对硬件极为危险，建议配备 UPS 以争取手动保存并关机的缓冲时间。注意电脑所处环境的湿度：高湿度环境容易造成电气短路，尤其在高负载、长时间运行的情况下更需注意。为什么不做 Linux 支持 / 为什么用 WPF本软件对 Windows 专有 API 依赖较深，这些 API 构成了核心功能的基础，因此天然绑定在 Windows 平台上：WPF 呈现层：WPF 无官方 Linux 支持Windows 内核 API（P/Invoke 调用 kernel32.dll）CPU Sets：将编码进程绑定到指定物理核心，避开超线程虚拟核心NUMA 拓扑：枚举并指定编码器使用的 NUMA 节点，使用户看到的可视化与编码器所见一致进程枚举：编码监控中的子进程追踪电源状态：编码前检查是否使用市电供电内存信息：获取物理内存总量并按 NUMA 节点比例分配估算psapi.dll：编码监控功能的工作集/内存压力统计这些 API 覆盖了并行调度、硬件检测、进程监控、编码前置检查等关键环节，是跨平台 UI 框架无法替代的。既然底层已经锁死在 Windows API 上，选择 WPF 是最自然的结果——它提供了原生 Windows 桌面集成（包括防止打开溢出画面窗口的功能）、成熟的 MVVM 数据绑定生态，且无需引入浏览器内核或第三方依赖。跨平台框架解决的是 UI 层的移植问题，但无法解决底层 API 的兼容，反而会增加一层抽象成本和测试负担。综上所述，最适合其它平台的方案是在该平台上用对应原生技术栈重新实现本项目逻辑。由于已有完整源代码和 Agent 辅助编程工具，同时为了降低门槛，本项目使用了 Apache 2.0 许可条款，因此重新开发的难度已然降低。 #post-content p, #post-content, #post-content ol {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size:100%} #post-content ul {font-size:100%} img {display: block; margin-left: auto; margin-right: auto;} body {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size: 100%; background-image: url('https://img4.yesya.net/img/5/2026-06/51-Wallpaper-v2.webp'); background-repeat: no-repeat; background-position: top left; background-attachment: fixed; background-size:cover}
❀原创教程，转载请注明链接和作者Opus 是由 IETF RFC 6716 指定的音频编解码规范，libopus 是该规范下的编解码器之一。相比早期的一些 AAC 音频编解码器（如 NeroAAC、FDKAAC）有明显质量（压缩率）优势（特别是 AAC-HE 针对的低码率模式），而相比 QAAC 几乎不分上下。考虑到 QAAC 是基于苹果公司的 QtAACEnc 改进而来，而 Opus 是独立第三方，因此 Opus 在商业使用上更加放心，它的下载与安装也比 QAAC 容易一些。Opus 还有个意外的优点，就是尽管音频压制速度本来就很快，但 Opus 的编码速度会比 QAAC 快很多RFC 6716 规范原文：datatracker.ietf.orgRFC 7845 指定了 Opus 音频流的封装格式规范，包括多声道封装。RFC 7845 规范原文：datatracker.ietf.org前情提要：QAAC 音频编码器命令行参数教程 或 GitHub 副本压制教程合集页 V1 或 GitHub 副本压制教程合集页 V2下载与安装直接使用 ffmpeg 的 libopus 即可。下载 ffmpeg注意事项Adobe 系列软件（CC 2026）暂不支持 Opus 音频格式与 AAC 音频流不同，单个 Opus 音频流最高支持双声道多声道音频通过 Opus 编码器的多声道映射族（Channel Mapping Family）实现，支持在多种封装格式（如 Ogg、MKV）里实现多达 255 条声道见 RFC 7845基本用法编码音频编码为 128Kbps，使用 VBR 率控制ffmpeg -i "导入文件夹\音频源.wav" -vn -c:a libopus -b:a 128000 -vbr on -compression_level 10 -frame_duration 100 "导出文件夹\导出音频.ogg"结合视频编码参数源于 x265 急用版压制教程（iavoe.github.io）视频 libx265 + 音频 libopus此处使用了 CMD 换行命令符 ^ffmpeg -i "导入文件夹\视频源.m2ts" ^ -c:v libx265 -x265-params "high-tier=1:tu-intra-depth=4:tu-inter-depth=4:max-tu-size=16:tskip=1:tskip-fast=1:me=umh:subme=3:merange=52:weightb=1:max-merge=5:early-skip=1:ref=3:open-gop=0:min-keyint=5:keyint=287:fades=1:bframes=16:b-adapt=2:bframe-bias=20:b-intra=1:bitrate=34567:crqpoffs=-3:cbqpoffs=-2:ipratio=1.6:pbratio=1.3:cu-lossless=1:psy-rdoq=2.3:rdoq-level=2:hevc-aq=1:aq-strength=0.9:qg-size=8:rd=3:limit-modes=1:limit-refs=1:rskip=1:rc-lookahead=60:rect=1:amp=1:psy-rd=1.5:splitrd-skip=1:rdpenalty=2:deblock=-1,0:limit-sao=1:sao-non-deblock=1" -fps_mode passthrough ^ -c:a libopus -b:a 128000 -vbr on -compression_level 10 -frame_duration 60 ^ "导出文件夹\导出视频.mkv"参数说明ffmpeg 调用的编码器会出现 libavcodec generic（通用）参数与 libxxx 参数混用的情况。以下为 libavcodec generic 的参数会添加 g 标记-ac<g，整数>声道数量，可用于将多声道音频降混到立体声，使 Opus 音频流适应视频封装ffmpeg 导入多音频流时需用 -ac:a:N 按导入顺序指定具体音频流，N 从 0 开始数-ar<g，整数 Hz>采样率，如 -ar 48000 代表 48KHzffmpeg 导入多音频流时需用 -ar:a:N 按导入顺序指定具体音频流，N 从 0 开始数-b:a<g，整数，lib，bit/s> 平均码率（ABR）率控制模式，如 192000 代表 192Kb/s-vbr<字符串选项 off|on|constrained，推荐 on>off：固定码率（CBR）率控制模式on：可变码率（VBR）率控制模式（默认）constrained：受限可变码率（CVBR）率控制模式-compression_level<整数 0~10，默认 10，推荐 10>0：最快，压缩率最低10：最强压缩且最慢-frame_duration<字符串选项 2.5|5|10|20|40|60|100|120，默认 20，推荐 120> 指定音频帧最大时长（毫秒）2.5：最短，编码延迟最低，音质最差20：短，兼容性好，适合古款低功耗设备40：平衡，解码的算力要求低60：长，编码延迟最高，同码率音质好（尤其是低码率），但白噪音会使音高分析的负载/延迟增加（但仍然比 QAAC 快很多），且瞬态信号（如嚓乐器）可能会产生预回声120：最长，编码延迟最高，同码率音质最好，但会进一步放大上述缺点至少这种失真理论上比 MP3 切高频的失真好多了尽管资料显示有预回声问题，或者超过 20 会出现播放卡顿问题，但在测试中均未能复现（可能需要特定版本）音高分析见 RFC 6716 5.2.3.2-packet_loss<整数 0~100，默认 0> 预期丢包百分比，用于劣网通信场景Opus 规范要求对无法正确识别的数据包丢弃，而不解码-fec<开关 0|1，默认 0（关）> 带内前向纠错（Inband FEC），用于劣网通信需 -packet_loss 大于 0 才实际生效；FEC 数据插入频率与 packet_loss 值成正比FEC 仅在 SILK 模式（语音）下有效，CELT 模式（音乐/lowdelay）不支持-application<字符串选项 voip|audio|lowdelay，默认 audio，推荐 audio> 指定编码用例voip：电话，优先保证人声质量audio：通用音频，尽可能与源一致lowdelay：低延迟，禁用人声质量优化的编码功能/模式（仅使用 CELT）-cutoff<g，整数 Hz，默认 0（关），推荐关> 切掉指定频率以上的高频信号，必须为以下固定值之一：4000：窄带（NB）6000：中带（MB）8000：宽带（WB）12000：超宽带（SWB）20000：全带（FB）码率低于 15kbps 时，libopus 会强制使用宽带截止（除非 application=lowdelay）-apply_phase_inv<开关 0|1，默认 1，需 libopus >= 1.2> 联合立体声编码的相位翻转功能0：关，提高单声道下混（声道缩减混音）质量，略微损失立体声音质1：开（默认），提高立体声质量-mapping_family<整数 -1|0|1|255，默认 -1> 多声道映射族（Channel Mapping，多声道用）-1：自动，单/双声道用 Family 0，多声道用 Family 1（启用环绕声掩蔽和 LFE 带宽优化）0：单声道/立体声模式1：多声道/环绕声模式，启用环绕声掩蔽和 LFE 带宽优化255：独立流，不指定声道布局注：联合立体声编码（Joint Stereo）通过下混得到中间声道音轨，再储存各个声道的差异而压缩音频体积的高压缩技术视频封装格式支持封装格式扩展名Opus 支持情况备注Ogg.ogg / .opus✅✅ 原生完整支持推荐音频专用；多声道由 RFC 7845 定义Matroska.mkv / .mka✅ 原生支持推荐视频封装，兼容性最广（Adobe CC 25.2 已支持 MKV）WebM.webm✅ 原生支持（Opus 为官方音频编码之一）Matroska 子集，主要用于网络视频MP4 / ISOBMFF.mp4 / .m4a⚠️ 规范支持，但播放器兼容性参差不齐部分老播放器不支持；需 -strict experimental（旧版 ffmpeg）MPEG-TS.ts⚠️ 有限支持部分实现支持，兼容性较差推荐仅音频专用选 .opus（Ogg 封装），视频选 .mkv，网站串流选 .webm多声道目前仅能使用 Ogg/MKV/WebM已知报错Experimental codec - use -strict experimental to enable在较旧版本的 ffmpeg 中，将 Opus 写入 MP4 容器时会报此错，需在输出参数中添加 -strict experimental：ffmpeg -i input.mp4 -c:a libopus -b:a 128000 -strict experimental output.mp4新版 ffmpeg（大约 4.0 以后）已不再需要此参数。Unsupported channel layout / 多声道输入报错单个 Opus 流仅支持最多 2 声道。多声道输入时若未指定 -mapping_family 1，可能报错或静默降混。解决方案：# 保留多声道（5.1） ffmpeg -i input.mkv -c:a libopus -b:a 256000 -mapping_family 1 output.mkv # 使用 libavcodec 的 ac 命令强制降混为立体声，从而使 Opus 音频以双声道形式嵌入视频封装 ffmpeg -i input.mkv -c:a libopus -b:a 128000 -ac:a:0 2 output.mkv-b:a 不生效 / 码率无法指定注意参数名为 -b:a（音频码率），写成 -b 在多流情况下可能作用于视频流。 #post-content p, #post-content, #post-content ol {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size:100%} #post-content ul {font-size:100%} img {display: block; margin-left: auto; margin-right: auto;} body {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size: 100%; background-image: url('https://img4.yesya.net/img/5/2026-03/50-Wallpaper.webp'); background-repeat: no-repeat; background-position: top left; background-attachment: fixed; background-size:cover}
为自动化「编码参数配置」而开发的脚本软件，解决了视频压缩软件需要手动配置编码参数、以及纯命令行操作需要手动输入路径的痛点。本工具会根据视频属性、程序格式、脚本补充、用户需求等规则为前提配置出编码命令（批处理）。此工具几乎消灭了视频压制的学习成本与配置操作的时间成本，快点上手试试吧~环境支持的管道上游程序：ffmpegvspipe（支持 API 3.0、4.0 自动识别）avs2yuvavs2pipemodSVFI支持的管道下游程序：x264x265SVT-AV1只要系统里有一个上游、一个下游程序即可。本工具支持高度本地化的简体、繁體、以及英语文本显示。优点✓ 图形 + 命令行交互界面：在选择文件、路径时调用高 DPI 模式的 Win Form 选窗在基本命令行选项上使用分色编码提示 + 纯选择交互逻辑（prompt）✓ 自动生成无滤镜 VS/AVS 脚本：加速完成脚本构建，或直接启动 vspipe、avs2yuv、avs2pipemod 上游✓ 独立封装命令脚本：导入视频流，音频流，字幕轨，字体✓ 深度定制编码参数：自动计算 + 用户定义实现尽可能符合需求的编码器配置✓ 快速命令行变更：在生成的批处理中，可以直接通过复制粘贴来替换先前导入的管道上游、下游工具；轻松衍生多种处理源与视频格式用法如需确保安全性，则可以通过微软官方的 PSScriptAnalyzer 检测工具来验证：Invoke-ScriptAnalyzer -Path "X:\...\Batch-batch-encoder\bbenc-source" -Settings PSGallery -RecurseWindows 11 下需要确保安装了对应文件名语言的语言包（Windows 10）例如，阿拉伯语文件名：设置 → 时间和语言 →[左栏] 语言 → 添加语言 → 阿拉伯语在设置 → 更新和安全 → 开发者选项中解除 PowerShell 的运行限制，如图：解压下载好的压缩包运行步骤 1 从而完成基本环境检测Windows 10：Windows 11：如果安装了 VSCode，则建议直接安装微软 PowerShell 插件运行VSCode 选择 文件 → 打开文件夹 → 打开脚本根目录（...\bbenc-source\ZH v1.x\）VSCode 需要确认“信任发布者”才能运行脚本运行步骤 2（生成编码管线批处理）、3（ffprobe 读取源）、4（生成编码任务）运行步骤 4 生成的批处理以开始编码若有多种格式的需求，去除备用参数的注释即可运行步骤 5 以封装编码结果脚本步骤 2 示例（仅 CLI 窗口，在 VSCode 中运行效果最佳）腳本步驟 2 示例（僅 CLI 窗口，在 VSCode 中運行效果最佳）下载链接皆同步更新，QQ 群里有很高几率能得到问题答复Github直链,谷歌盘,百度云，提取码 hevc,QQ 群存档: 691892901教程地图、工具下载见：iavoe.github.io缺陷信息用于生成备用管线（pipe 命令行）的导入命令最终都使用单一源文件，这可能是视频、.vpy 或 .avs 文件。因此，根据选择的管道上游程序不同，备用命令行中的上游程序输入/导入参数可能会导入到无效的文件。于是尽管格式正确，切换命令时需要手动编辑批处理。打赏信息开发这些工具并不容易。如果这套工具提高了你的效率，那么不妨赞助或推广一下下下。——Buy me a coffee 链接——PayPal 链接更新信息1.8.7步骤 4：修复了参数组装机制不准确导致 vspipe 输入语句出错的问题为 x264、x265 和 SVT-AV1 实现了自动颜色范围参数赋值为 x264、x265 和 SVT-AV1 实现了自动色度位置参数赋值1.8.5各个步骤脚本均修复了大量 Bug 并优化了代码1.8.0步骤 3-4:从 CSV 格式的视频元数据处理更换为 JSON 格式v1.7.9步骤 2:为程序路径添加了新的配置文件读写功能步骤 3:连接了步骤 2 的配置文件——简化了 ffprobe 导入步骤步骤 4:连接了步骤 2 的配置文件——简化了 avs2yuv 的 AviSynth 版本类型提问步骤v1.7.8步骤 4:为所有编码器新增了多种 CRF 值自定义选项简化了代码步骤 2：修复了批处理部分运行 cmd /k 过早，导致 exit 命令被输入到错误 cmd 进程的问题v1.7.2文件删除操作交互逻辑变更——输入 y 确认，输入 q 取消，Enter 循环的操作逻辑步骤 4 简化了代码，无功能性变更v1.7.1步骤 4:新增了针对 12bit 位深源视频与 SVT-AV1 不兼容的警告简化了 FPS 相关参数赋值的代码段v1.7解决了路径选择窗口没有出现在窗口最上层的问题可能解决了关闭或完成路径选择窗口时，窗口聚焦不自动切换回 CLI 窗口（无法输入）的问题（仍然不支持 VSCode CLI）解决了文件名本身触发 ffprobe 分析 JSON 解析崩溃的错误（临时切换到 UTF-8 文本编码）v1.6.5步骤 4：美化终端输出信息排版限制 ffmpeg log 信息，避免 ffmpeg 进度条与编码器进度条冲突v1.6.4步骤 3 改良了导入系统添加了脚本所在目录下的 ffprobe 模糊匹配功能添加了环境变量的 ffprobe 模糊匹配功能v1.6.3步骤 3 代码优化减少调用 ffprobe 的次数美化终端输出信息排版移除多余 if 分支v1.6.0步骤 2 改良了导入系统添加了脚本所在目录下的 ffmpeg、avs2yuv、avs2pipemod、x264、x265、SvtAv1EncApp 的模糊匹配功能添加了 PATH 路径的 ffmpeg、avs2yuv、avs2pipemod、x264、x265、SvtAv1EncApp 的模糊匹配功能v1.5.0步骤 3 添加了相对可靠的可变帧率（VFR）检测与警告添加了 ffmpeg 处理示例v1.4.7步骤 3 添加了变宽比（SAR）检测与警告添加了写入 SAR 元数据的 ffmpeg 等工具示例修复了步骤 3 运行后在运行目录产生 null 空文件的故障v1.4.6在 1.4.5 基础上进行了代码清理和美化v1.4.5实现了 VOB 格式的元数据读取支持实现了 VOB 与非 VOB 的逐行与隔行扫描识别功能添加了自动指定 avs2pipemod、x264、x265 隔行扫描参数的功能（SVT-AV1 则提示原生不支持）已完成 vspipe 到 x264、x265 测试，等待完成其他测试修复了因管道上游同时选择了 AVS 类工具以及 vspipe 工具时，只能导入 .avs 或 .vpy 触发兼容检测失败（判断为应终止脚本）的逻辑问题（修改脚本源后缀名并检测文件是否存在，提示但无视错误）步骤 3 升级为使用 ffprobe 检测真实封装文件格式的方案，不再用后缀名检测步骤 2 添加了当只有一种工具链可用时自动选择的功能v1.3.9提前了批处理的变量清理（endlocal）时机，避免编码后直接关闭 CMD 窗口产生残留添加了无法实现从 .vs，.avs 脚本读取视频源或者验证视频存在功能原因的说明v1.3.8完成了 SVFI 上游适配：自动从渲染配置 INI 获取 Task ID 和源视频路径（JSON 解析）并构建管道参数，从而跳过视频导入步骤修复了 SVT-AV1 下游参数构建的格式失误添加了导入 one_line_shot_args.exe 与 vspipe.exe 的自动路径检测功能（导入更简单）添加了导入 SVFI INI 文件的自动路径检测功能（导入更简单）添加了繁体中文支持v1.3.7重写了所有代码使用了数组、哈希表等等更合理的数据结构改进了报错逻辑进一步提高了对方括号路径、文件名的支持构建了全局脚本，简化了代码抛弃了大批量模式添加了 SVT-AV1 基础支持全部参数计算功能改写为函数，提高了模块化添加了分色处理的提示文本，统一化了外观改进了 vspipe 支持改进了 SVFI 支持添加了自动 VS、AVS 无滤镜脚本生成功能缓存数据集中导出到单一文件夹通过追加额外的 CSV，避免了步骤 4 脚本的重复导入，避免了 ffprobe 导出 CSV 兼容问题改进了步骤 1 的操作逻辑改进了 Y4M 管道支持完善了封装命令的操作逻辑、流程增加了更多优化操作相关的提示文本强化了文件导入脚本的逻辑行为变更：将 RAW 管道所需参数作为附录（Appendix）一并记录到输出批处理中添加了 SVT-AV1 的 ColorMatrix、Transfer、Primaries 参数生成功能已验证 ffmpeg 兼容性正常已验证 vspipe 兼容性正常已验证 avs2yuv 0.26+0.30 兼容性正常已验证 avs2pipemod 兼容性正常测试步骤 5（封装命令）已完成测试，弃用了所有 Invoke-Expression 来增加安全性 #post-content p, #post-content, #post-content ol {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size:100%} #post-content ul {font-size:100%} img {display: block; margin-left: auto; margin-right: auto;} body {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size: 100%; background-image: url('https://yesya.oss-ap-northeast-2.aliyuncs.com/5/2023-01/29_Background.jpg'); background-repeat: no-repeat; background-position: top left; background-attachment: fixed; background-size:cover}
❀本教程是 x264、x265、AV1 等视频压制教程“下载版块”的整合贴。简化了查找相关工具名称、作用、下载和编译流程的步骤。免责声明本教程仅用于学习与研究目的，不构成任何形式的商业使用建议或授权。本教程所提及的软件、脚本及命令行工具均由其各自的开发者和组织独立维护，并受其原始许可证条款约束若用于商业或分发用途，请遵守相关的开源许可（如 GPL、BSD、MIT 等）以及各国/地区的专利法规本文作者不对因使用、转载所述内容造成的任何直接或间接损失承担责任读者应自行评估并承担相应的法律与技术风险某些音视频编解码器（如 H.264、H.265、AAC）在部分地区仍受专利保护。商用项目请咨询相关专利池（如 MPEG LA、Via Licensing）或使用免专利方案（如 AV1、Opus）急用版压制教程x264、x265、libx264、libx265 教程急用版主页首页：NazoRip镜像：GitHubSVT-AV1 与 libsvtav1 教程急用版主页首页：NazoRip镜像：GitHub基本工具工具简介mpv 播放器现代视频播放器，支持深度配置、定制，缺点是界面仅英语，中文支持要看第三方修改版。安装教程ffmpeg滤镜工具与编码器视频压制流程的核心，提供封装、解封装、滤镜、音视频处理与命令行调用接口Voukoder剪辑软件导出插件Premiere/Vegas/AE 开源导出插件。OBS开源直播与录制工具适合录制原素材或采集压制前后对比视频，支持命令行设定编码器，现代窗口和音频捕获方法，但也需要花时间配置。MediaInfo元数据读取工具开源媒体信息查看器。ffprobe视音频读取与分析工具CLI 媒体元数据分析工具。Excel 可视化教程DXVA Checker检测 PC 支持的硬件编解码能力Process Lasso自动优化进程优先级与电源计划工具，保证高占用软件卡死时系统正常响应注：目前没有直播平台明确支持恢复直播会话的能力。因此当大型游戏卡死，系统不响应，只能断电重启时，唯一的选择是创建新直播，然后向旧会​​话发送消息以通知观众跳转（对主播和观众来说都很麻烦）。虽然 Pro Balance 调度并非包治百病，但它在一定程度上保证了系统更容易响应用户操作，也减少了直播中断的一种可能。调用编码器的 GUI 工具工具简介ShanaEncoderffmpeg-CLI 搭配部分 GUI，上手较慢。使用了 ffmpeg 内嵌的 libx264、libx265、NVEnc。Simple x264 Launcher内嵌 AviSynth，支持便携版 VapourSynth，额外支持 x265 和 NVEnc 编码器，适合批量压制。小丸工具箱镜像：百度云 提取码 crhu操作简单、适合入门的中文软件，内嵌 MediaInfo、mp4box、Mkvtoolnix。视频画质跑分工具所有命令行工具的下载与教程见：AV1 视频压制教程总的来说，PSNR、SSIM 不准确，不可信；测量视频画质应该选择 Spearman 单调相关系数（SROCC）和 Pearson 线性相关系数（PLCC）高，并且性能可观的画质跑分工具，如：客观：块大小感知加权峰值信噪比——XPSNR主观+客观：多方法融合——Video multi-method assessment fusion（VMAF）客观：多失真识别多分辨率结构相似性——SSIMULACRA主观+客观：XYB 空间欧几里得距离心理视觉相似性——Butteraugli工具简介FFMetrics测量 PSNR、SSIM、VMAF 的开源 GUI 软件，支持实时图表显示和多版本并行排名。需 .NET Framework 4.8.0 和手动添加 ffmpeg 到程序目录（或添加 ffmpeg 到 %PATH%）XPSNR（ffmpeg 内置）计算“源与压缩结果的差异”，注重暂停画质的深度改进版 PSNR，需要源视频与压缩结果的时间基对齐VMAF（ffmpeg 内置）主观画质指标跑分，倾向于检查视觉观感体验，而非简单地差异（如高压缩下保证大体观感），需要源视频与压缩结果的时间基对齐SSIMULACRA2 VS-HIP使用英伟达和 AMD 显卡计算 SSIMULACRA2.1、Butteraugli 的准确视频画质跑分命令行工具，准确度同样受到显卡快但精度低的影响SSIMULACRA2_rs使用 CPU 多线程计算 SSIMULACRA2.1，比 VS-HIP 的更慢，且需要编译、需要 Python-VapourSynth 环境，优点是精度更高（由于和画质相关，因此得分也更高）虽然 FFMetrics 在导入文件时限制了格式范围，但它直接调用了 ffmpeg，因此可以选择“所有文件”来选中新编码格式的视频流VMAF 可在 Netflix/vmaf 获取最新版模型与运行脚本，但 ffmpeg 内置版本更容易实现多视频批量检测SSIMULACRA2_rs 支持手动指定多线程参数，从而显著提高速度时间基对齐工具总的来说，由于部分视频画质跑分需要统计帧间距离等数据，因此源与压缩视频的时间基（Time base）需要对齐，否则跑分会严重失真（变差）。详见 AV1 教程完整版、 AV1 教程精简版。GitHub：GitHub/GCDLCMCalcualtor、镜像备份：谷歌盘、百度云SSIMULACRA2_rs 下载与编译来源：GitHub/rust-av一. 编译环境下载并安装 rustup：rustup.rs完整安装 VapourSynth必须安装到 C:\Program Files\VapourSynth必须选择“Install for all users”完整安装 Python必须以管理员身份运行必须在自定义安装中选择“Install for all users”VapourSynth 的版本与 Python 版本强绑定，不能随意安装版本检查 C:\Program Files\VapourSynth\sdk\lib64 路径存在，若不存在则上述步骤执行有误，需卸载 Python 和 VapourSynth，仔细阅读并重试二. 下载与编译PowerShell 中运行 cargo install ssimulacra2_rs完成安装，过程中不应该有任何报错将 C:\Users\用户名\.cargo\bin\ssimulacra2_rs.exe 拷贝到工作路径此时可以卸载 rustup下载 LSMAS 解码器：GitHub/AkarinVS随意根据想要的缓存文件路径位置设定选择版本：官方：cachedir=""，命令行窗口当前路径，Windows 默认为 C 盘cwd：cachedir="."，即运行时的命令行路径，即打开 CMD/PowerShell/Bash 时的初始路径tmp：cachedir=%TEMP%，据操作系统设置指定缓存盘，Windows 一般为 C 盘解压并拷贝下载的 LSMASHSource.dll、LSMASHSource.pyd 到 VapourSynth 插件目录下：C:\Program Files\VapourSynth\pluginsssimulacra2_rs 在 PowerShell 中无法正常打印信息，需要使用 CMD 运行LSMAS 缓存文件代表“O__<视频文件名>.lwi” 索引文件，这些文件相当于缓存，但运行完后需要手动删除音频编码器QAAC 依赖 Aple CoreAudio，详见下方教程内容工具简介QAAC高音质 AAC 编码器，见 QAAC 音频压制教程 或 GitHub 副本视频滤镜工具建议直接学习 VCB-S 压制组的教程系列：vcb-s.nmm-hd.org工具简介VapourSynth源视频有时带有画面问题，就靠它修复。安装时应注意不同版本对 Python 环境有强绑定。安装：vapoursynth.comAviSynth+含多线程优化，添加高位深支持的老款视频处理工具 AviSynth。现已被更先进的 VapourSynth 取代，但还有些滤镜仍是独占。avs2yuv相当于 VapourSynth 中的 VSPipe.exe，使导出 AviSynth 到管道（pipe）变得容易。avs2pipemod相当于 VapourSynth 中的 VSPipe.exe，使导出 AviSynth 到管道（pipe）变得容易。视频编码器lavf（LibavFormat）是负责封装/解封装的动态链接库FFMS2（FFmpegSource2）是负责解码的动态链接库，用于给 x264 内置的 AviSynth 提供解码后的源x264来源封装支持特性Patman✅ FFMS2 解码、Lavf 封装8-10bitLigH✅ FFMS2 解码、Lavf 封装8-10bitjspdr (tMod)✅ FFMS2 解码、Lavf 封装8-10bit，MCF 线程管理x264 7mod谷歌盘百度云✅ FFMS2 Lavf 解码与封装8-10bit，hqdn3d 时域降噪Komisar (KMod)✅ FFMS2 解码、Lavf 封装8, 10bit[8-10-12bit] 表示一个可同时支持三种色深的可执行文件； 8[12]bit 表示三种不同可执行文件版本。x265不支持额外的解码与封装/解封装功能并非缺陷。视频编码器不管音频，因此音频流仍需封装x265、AV1、VVC 等较新编码的未封装格式能够提供帧率、分辨率、色彩格式等全局元数据，未封装也可在播放器中预览来源编码器封装音频色深支持特性LigH⛔ .hevc 裸流8-10-12bit附 x86 32bit 版，含 libx265.dlljpsdr⛔ .hevc 裸流8-10-12bitGCC 12.2 + MSVC_llvm 1928，支持 aq-mode 5Rigaya⛔ .hevc 裸流8-10-12bitGCC 9.3，附 32bit 版Patman⛔ .hevc 裸流8-10-12bitGCC 11 + MSVC 1925ShortKatz⛔ .hevc 裸流8-10-12bitarm64~64e 的 Mac 与安卓平台使用DJATOM-aMod⛔ .hevc 裸流10bit, 10-12bitLLVM 的针对 Intel 与 AMD 架构优化版MeteorRain-yuuki✅ Lavf 封装库8, 10, 12bitGCC 9.3 + ICC 1900 + MSVC 1916未使用 y4m 或 lavf 时应手动指定 -D 参数SVT-AV1 下载编码器由两个文件组成：SvtAv1Enc.dll、SvtAv1EncApp.exeClang（LLVM）针对当前 PC CPU 架构编译版本的性能最佳，其次是 GCC，再次为 MSVC（Visual Studio）；性能差异最高可达 10%~50%来源编码器封装音频色深支持已编译特性SVT-AV1⛔ .ivf 微封装8-10bit⛔官方版Gitlab Pipelines⛔ .ivf 微封装8-10bit✅官方 CI/CD 版，属于一种 Beta 测试版，但无需编译。找到最新通过的 Daily Run 计划，选择对应系统版本下载SVT-AV1-Essential by nekotrix⛔ .ivf .webm8-10bit✅改良默认参数预设，增加了新功能（参数），如自动计算瓦片大小，CRF 分区赋值（zones），高精度去块滤镜（dlf 2），固定线程占位等SVT-AV1-Essential by Patman86⛔ .ivf 微封装8-10bit✅改良默认参数预设（以及调整预设 5-2），增加了新功能（参数），如自动计算瓦片大小，CRF 分区赋值（zones），超高精度去块滤镜（dlf 3），色度专用 FGS，固定线程占位等SVT-AV1-HDR by Patman86⛔ .ivf 微封装8-10bit✅改良默认参数预设，增加了 HDR 优化，如针对 PQ 优化的 Variance Boost 曲线，胶片颗粒 Tune，关键帧专用 TF 衰减偏移值，空间噪声分布一致化等SVT-AV1-PSY⛔ .ivf 微封装8-10bit⛔增加了更高画质选项的修改版，目前主要的优化已经合并到了 SVT-AV1 官方版，且已停止开发，版本落后于官方，与官方版一样需要编译Windows 手动编译 SVT-AV1官方指南：Build Guide安装 Visual Studio（2017/2019/2022）并启用 C++ 桌面开发组件安装 CMake：CMake Releases安装 NASM：NASM 官方下载在打开的网盘路径中根据系统和指令集位宽找最新版程序例如，Windows 64bit 选择 最新版/win64/nasm-*-installer-x64.exe安装时可以去勾选 Manual（说明书）和 VS8 Integration（Visual Studio 8 集成）下载 SVT-AV1 源代码 并运行 Build/windows/build.bat编译输出位于 Bin\Debug，确认可执行文件存在后测试：SvtAv1EncApp.exe -v使用 Clang（LLVM）编译 SVT-AV1（推荐）所有命令建议在 CMD 或 (Git) Bash 中执行，不要使用 PowerShell。一. 编译环境LLVM（clang 支持）：LLVM Releases在打开的网盘路径中根据系统和指令集位宽找最新版程序例如，Windows 64bit 操作系统选 LLVM-*-win64.exe安装时选择 Add LLVM to the system PATH for all/current usersMicrosoft C++ Build Tools：Microsoft C++ Build Tools如果已经安装 Visual Studio，且直接下载了 C++ 桌面应用开发组件，则可以跳过这步下载并运行安装程序，选择 Desktop development with C++打开一个记事本，将实际安装位置路径拷贝进去安装页面中，可以仅选择安装 MSVC 和最新的 Windows 10/11 SDKCMake、NASM：与上方教程步骤一致Git（可选）：git-scm.com/download/win编译前确认所有工具正确安装（命令行能正确输出）:: 如果安装时选择其它路径，则修改 "C:\Program Files\LLVM\bin\clang.exe" --version :: clang version *** :: Target: x86_64-pc-windows-msvc :: Thread model: posix :: InstalledDir: C:\Program Files\LLVM\bin where clang-cl :: C:\Program Files\LLVM\bin\clang-cl.exe nasm --v :: NASM version *** compiled on *** *** *** cmake --version :: cmake version *** :: CMake suite maintained and supported by Kitware (kitware.com/cmake)二. 下载项目源代码浏览器下载将 GitLab/AOMediaCodec/SVT-AV1 项目 打包下载 并解压Git 下载若照上面安装了 Git，则打开 Git Bash，并使用下方命令下载：移动到下载路径（不同的命令行工具路径格式和要求不同）cd <下载盘>下载 SVT-AV1git clone https://gitlab.com/AOMediaCodec/SVT-AV1.gitcd svt-av1三. 编译项目完整命令行列表（仅供参考，无法一次执行）chcp 65001 call "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat" set "CC=clang-cl" set "CXX=clang-cl" cmake --fresh -B svt_build -G Ninja ^ -DCMAKE_BUILD_TYPE=Release ^ -DBUILD_SHARED_LIBS=OFF ^ -DCMAKE_CXX_FLAGS_RELEASE="-flto /DNDEBUG /clang:-O2 -march=native"切换文本编码到 UTF-8：chcp 65001在先前下载的 VS Build Tools 路径中运行 vcvars64.bat 环境配置脚本（根据实际安装位置调整）：call "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"若已经有了“C++ 桌面应用开发组件”的 64bit Visual Studio，则路径可能是：C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat图：x64 Native Tools Command Prompt for VS 20xx运行 vcvars64.bat 后会进入一个新的 CMD 界面，在此指定两个变量以定义使用 Clang-CL 编译器：set "CC=clang-cl" set "CXX=clang-cl"用 CMake 生成 Ninja 项目并配置编译选项（根据压制电脑的 CPU 架构进行调整）：如果当前目录不在 SVT-AV1 或 SVT-AV1-PSY 目录下，则使用 cd 移动过去如果 CPU 支持 AVX-512，且比 ZEN 2 架构新，则推荐 -DENABLE_AVX512=ON:: 换行符取决于终端软件，CMD 使用 `^`，Bash 使用 `\` :: 如果要编译 Debug 版而非发布版，则去掉 `-DCMAKE_BUILD_TYPE=Release` 整行 cmake --fresh -B svt_build -G Ninja ^ -DCMAKE_BUILD_TYPE=Release ^ -DBUILD_SHARED_LIBS=OFF ^ -DENABLE_AVX512=OFF ^ -DSVT_AV1_LTO=OFF ^ -DCMAKE_CXX_FLAGS_RELEASE="-flto /DNDEBUG /clang:-O2 -march=native" ^ -DCMAKE_C_FLAGS_RELEASE="-flto /DNDEBUG /clang:-O2 -march=native"最后使用 Ninja 编译，不用 -DCMAKE_BUILD_TYPE=Release 则会输出到 BinDebug ）：ninja -C svt_build :: *** warnings generated. :: D[242/242] Linking C executable *:\***\SVT-AV1-master\Bin\Release\SvtAv1EncApp.exe编码器官方开源项目基本上有以下用途：下载并检查、修改、编译源码检查变更提交（Commit）的更新信息向开发者反馈编码器问题（Issues）视频编码器项目简介x264 – VideoLANH.264/AVC 编码器，由 VideoLAN 团队维护，广泛用于 FFmpeg、OBS 等。x265 – MulticoreWareH.265/HEVC 编码器的主要开源实现。SVT-AV1 – AOMediaIntel 维护的高性能 AV1 编码器，属于 AOMedia 官方 SVT 系列。libaom – AOMediaAOMedia 官方 AV1 编码器参考实现（质量优先）。rav1e – Xiph / Mozilla用 Rust 编写的 AV1 编码器，专注安全与速度。vpx – WebM / GoogleGoogle 的 VP8/VP9 官方实现。SVT-HEVC – IntelIntel 的高性能 HEVC 编码器（面向服务器/云转码）。SVT-VP9 – IntelIntel 的 VP9 编码器实现。openh264 – CiscoCisco 开源的 H.264 编码器，轻量级且广泛用于实时通信。Theora – Xiph.Org基于 VP3 的开放视频编码标准。FFmpeg – FFmpeg.org虽非单独编码器，但整合了 x264、x265、libaom、SVT 等众多编码器。Daala – Xiph.OrgXiph 的实验性下一代视频编码器（为 AV1 提供技术基础）。VVenC – Fraunhofer HHIFraunhofer HHI 的 VVC (H.266) 开源编码器。VVC Test Model (VTM)JVET 官方 VVC/H.266 参考软件实现。音频编码器项目简介QAAC – nu774基于 Apple CoreAudio 的 AAC 编码器前端（Windows 上需 iTunes DLL）。Opus – Xiph / Mozilla / SkypeIETF 标准化的低延迟音频编码器，适用于语音与音乐。libopusenc – Xiph.Org封装 Opus 编码 API 的简易库，用于录音或实时流。FDK-AAC – Fraunhofer IISFraunhofer 官方开源 AAC 编码器（高质量 LC/HE/HEv2 模式）。LAME – HydrogenAudio著名的开源 MP3 编码器。FLAC – Xiph.Org无损音频压缩格式 FLAC 的官方实现。Vorbis – Xiph.OrgXiph.Org 的有损音频编码器，开源替代 MP3。Musepack (MPC)专注高比特率透明音质的音频编码器。WavPack无损/有损混合音频编码器。ALAC – AppleApple 无损音频编解码器（ALAC）的开源实现。TTA – True Audio无损音频编码格式 TTA 的官方实现。Monkey’s Audio (APE)高压缩率的无损音频编码器。Shorten – SoftSound早期无损音频格式（FLAC 的前身之一）。参考SVT-AV1 CLang LLVM 编译的原教程位于 Discord/AV1 weeb edition/scripts-tools-and-guides，本教程进行了本地化（如修改 set 命令、添加 chcp 命令），以及额外说明（如 Visual Studio 已经安装的 vcvars），额外引导（下载具体版本），以及额外的检查（LLVM、NASM、CMAKE 是否正确安装）等改进。 #post-content p, #post-content, #post-content ol {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size:100%} #post-content ul {font-size:87%} img {display: block; margin-left: auto; margin-right: auto;} img[src*="#gh-md-img-large"] { width: 80%; max-width: 600px; height: auto; display: block; margin: 12px auto; } body {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size: 100%; background-image: url('https://img4.yesya.net/img/5/2025-10/42-Wallpaper.webp'); background-repeat: no-repeat; background-position: top left; background-attachment: fixed; background-size:cover}
❀平行于 AV1 教程完整版的部署定位压制教程。适用于已经看过 x264 教程完整版中科普部分（即粗略了解了计算机、数据、视音频格式、显示技术等基础常识）的用户。最好搭配 AV1 教程完整版中对其标准的概述，以及 SVT-AV1 参数和测试数据一起使用（っ╹◡╹)ﾉ下载急用版教程谷歌盘, 国内: 百度云, QQ群存档: 691892901 附录: QAAC音频压缩教程或Github附录: ffprobe视频探针教程或Github完整版教程地图iavoe.github.io更新信息由于部署方案转为 GitHub page 的 HTML-JS-CSS 文档，因此直接观看提交（Commit）记录即可。打赏——Buy me a coffee 链接——PayPal 链接当前版本（年，版，改）：2025.0.94联系方式：Github：iAvoe，QQ 群 #post-content p, #post-content, #post-content ol {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size:100%} #post-content ul {font-size:87%} img {display: block; margin-left: auto; margin-right: auto;} body {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size: 100%; background-image: url('https://img4.yesya.net/img/5/2025-09/41_Background.webp'); background-repeat: no-repeat; background-position: top left; background-attachment: fixed; background-size:cover}
使用 Excel 绘制逐帧 VMAF 画质图表的数据可视化教程
VMAF 简介VMAF 是一种结合了主观绝对评价、客观全参考指标、以及客观部分参考指标的多模型体系。基于人眼视觉对于失真的判断与处理特性，并结合了机器学习模型与传统算法的部分参考加全参考指标。相比其它统计画质的算法，VMAF 将原画的清晰度纳入考量（同时使用滤镜预处理原画和压缩结果）。详见 AV1 视频压制教程——画质指标、Netflix tech blog。VMAF 评分VMAF 的分数取值范围为 0~100，主要分为 4k、1080p 和 phone 3 种评分方式。VMAF 4k：播放画质，远距离观看/客厅电视/影院VMAF 1080p：播放画质，中近距离观看/桌面电脑，相比 VMAF 4K 更加苛刻视觉无损：大于等于 95优秀：大于等于 90良好：大于等于 80达标：大于等于 70注：压缩视频时，控制平均 VMAF 在 90~95 之间即可（毕竟是有损压缩）。VMAF 缺点算法原理复杂，分数构成不好说默认先输入压缩源、后输入原画源，与其它画质指标的输入顺序相反，且反直觉评价指标主要取决于提炼出的特征，而非失真图像与源的客观差距——分数变化与客观画质不一定呈正相关机器学习模型的训练数据只能涵盖部分画面内容种类，因此画面内容不够主流的视频不一定可用下载工具ffmpeggyan.devGitHub/btbnffmpeg.org时间基对齐工具下载 GCDLCMCalculator.7z（谷歌盘）（百度云）目录同急用版 x264、x265、AV1 教程下载地址；或（GitHub 项目地址中手动下载）。这是一个计算最大公约数、最小公倍数、以及分数的最大公约数的脚本/包，其中有 PowerShell、Java（.jar）、Python 和 Bash 的选项，选择适合的版本即可。对齐时间基 Timebase若源与压缩结果两个视频流的时间基不对齐，ffmpeg 就会在开始跑分前警告“DTS 未单调增加（DTS is not increasing monotonically）”：[Parsed_xpsnr_0 @ 000001e437db6e80] not matching timebases found between first input: 1/90000 and second input 1001/24000, results may be incorrect!最终画质衡量分数大概率会远低于正常（XPSNR、VMAF 等跑分受影响）：未对齐（画质 -659%）：XPSNR average, 14315 frames y: 33.8192 u: 41.5568 v: 42.3078 (minimum: 33.8192)对齐：XPSNR average, 14315 frames y: 41.9978 u: 44.6105 v: 45.2615 (minimum: 41.9978)对齐方法先运行普通版本：不使用 lavfi 标签——更改文件导入顺序ffmpeg -i ".\压缩源.ivf" -i ".\原画源.mkv" -lavfi ^ libvmaf=log_fmt=xml:log_path="X\\:/导出VMAF数据文件夹/vmaf.xml":model=version=vmaf_4k_v0.6.1\\:name=vmaf_4k|version=vmaf_v0.6.1\\:name=vmaf_1080p" ^ -f null -使用 lavfi 标签:: 使用 lavfi 标签： ffmpeg -i ".\原画源.mkv" -i ".\压缩源.ivf" -lavfi ^ [0:v][src]; [1:v][enc]; [enc][src]libvmaf="model=version=vmaf_4k_v0.6.1\\:name=vmaf_4k|version=vmaf_v0.6.1\\:name=vmaf_1080p" ^ -f null -一旦看到 not matching timebases found between first input: ??? and second input ??? 提醒时按 Ctrl+C 停止跑分，然后使用 GCDLCMCalculator 中的任意脚本/包算出共同时间基。计算共同时间基根据 ffmpeg not matching ... 反馈是否含有小数/分数：如果有就使用 GCDLCMCalculator 的分数的最大公约数（fracGCD）算法否则使用 GCDLCMCalculator 的最小公倍数（lcm）算法PowerShell 脚本（Windows、可能支持 Linux）# 参数名用法（支持乱序参数指定） .\gcdlcm.ps1 -Operation gcd -A 24 -B 1000 .\gcdlcm.ps1 -Operation lcm -A 24 -B 1000 .\gcdlcm.ps1 -Operation fracgcd -Num1 1 -Denom1 90000 -Num2 1001 -Denom2 24000 # 仅参数用法（仅支持顺序参数指定） .\gcdlcm.ps1 -Operation gcd 24 1000 .\gcdlcm.ps1 -Operation lcm 24 1000 .\gcdlcm.ps1 -Operation fracgcd 1 90000 1001 24000 # 显示帮助信息 .\gcdlcm.ps1Java 包（需安装 Java 环境）# 仅参数用法（支持乱序参数指定） java -jar .\GCDLCMCalculator.jar gcd java -jar .\GCDLCMCalculator.jar lcm java -jar .\GCDLCMCalculator.jar fracgcd # 显示帮助信息 java -jar .\GCDLCMCalculator.jarPython 脚本（需安装 Python 环境）# 参数名用法（支持乱序参数指定） python .\gcdlcm.py -o gcd -a 24 -b 1000 python .\gcdlcm.py -o lcm -a 24 -b 1000 python .\gcdlcm.py -o fracgcd -num1 1 -denom1 90000 -num2 1001 -denom2 24000 # 仅参数用法（仅支持顺序参数指定） python .\gcdlcm.py gcd 24 1000 python .\gcdlcm.py lcm 24 1000 python .\gcdlcm.py fracgcd 1 90000 1001 24000 # 显示帮助信息 python .\gcdlcm.pyBash 脚本（Linux、Git Bash、可能支持 Mac OS）# 参数名用法（支持乱序参数指定） ./gcdlcm.sh -o gcd -a 24 -b 1000 ./gcdlcm.sh -o lcm -a 24 -b 1000 ./gcdlcm.sh -o fracgcd -num1 1 -denom1 90000 -num2 1001 -denom2 24000 # 仅参数用法（仅支持顺序参数指定） ./gcdlcm.sh gcd 24 1000 ./gcdlcm.sh lcm 24 1000 ./gcdlcm.sh fracgcd 1 90000 1001 24000 # 显示帮助信息 ./gcdlcm.sh最后运行时间基对齐版本的 VMAF 跑分：set "alignedTbase=输入最小公倍数lcm，如1234、或分数小数的最大公约数fracGCD结果，如1/360000" ffmpeg -i ".\原画源.mkv" -i ".\压缩源.ivf" -lavfi ^ "[0:v]setpts=N*(%alignedTbase%)[src]; ^ [1:v]setpts=N*(%alignedTbase%)[enc]; ^ [src][enc]libvmaf=log_fmt=xml:log_path="X\\:/导出VMAF数据文件夹/vmaf.xml":model=version=vmaf_4k_v0.6.1\\:name=vmaf_4k|version=vmaf_v0.6.1\\:name=vmaf_1080p" ^ -f null -注：此例使用 CMD 批处理实现，因此使用 :: 做注释符，^ 做换行符，可以根据常用的命令行工具修改。示例——大批量 VMAF 跑分命令对于一整季的视频，源视频的时间基不变、压制结果的时间基也不变，因此可以直接预置一些 setpts 变量，然后根据第一个视频运行普通跑分的结果决定所有视频的时间基对其方案。 chcp 65001 :: 配置导入和导出路径 set "sourcePath=X:\源视频文件夹\" set "lossyPath=X:\压缩视频文件夹\" set "outTxtPath=X:\导出ffmpeg进度与报错，以及 VMAF 最终导出目录文件夹\" :: 时间基对齐参数（无需修改，如有必要则添加新项目） set "setptsCmdA=[0:v]setpts=N*(1/24000)[src]; [1:v]setpts=N*(1/24000)[enc]; [enc][src]" set "setptsCmdB=[0:v]setpts=N*(1/6000)[src]; [1:v]setpts=N*(1/6000)[enc]; [enc][src]" set "setptsCmdC=[0:v]setpts=N*(1/360000)[src]; [1:v]setpts=N*(1/360000)[enc]; [enc][src]" :: 导出 VMAF 4k、1080p 分数到 XML，也可使用 CSV（log_fmt=csv:log_path="X\\:/xxx.csv"） :: 使用缓存文件夹是因为为每个视频重写 vmafCmd 变量的出错概率大，因此使用先创建，再重命名和移动的方法更稳定可靠 set "vmafCmd=libvmaf=log_fmt=xml:log_path="X\\:/导出VMAF数据文件夹/vmaf.xml":model=version=vmaf_4k_v0.6.1\\:name=vmaf_4k|version=vmaf_v0.6.1\\:name=vmaf_1080p" :: title VMAF 测试——源视频文件名 :: :: 修改 sourceFile 和 lossyFile，outTxtFile 会直接复制前者的文件名，但替换的后缀名需要与 lossyFile 一致 :: sourceFile 和 lossyFile 只填文件名，路径已在 sourcePath、lossyPath 中定义 set "sourceFile=源视频文件1.mkv" set "lossyFile=压缩视频文件1.ivf" set "outTxtFile=%lossyFile%.txt" ffmpeg -hide_banner -an -i "%sourcePath%%sourceFile%" ^ -i "%lossyPath%%lossyFile%" ^ -lavfi "%setptsCmdB%%vmafCmd%" -f null - > "%outTxtPath%%outTxtFile%" 2>&1 :: 重命名为压缩视频文件名，并移动到导出路径 if exist "X:\vmaf结果缓存文件夹\vmaf.xml" ( ren "X:\vmaf结果缓存文件夹\vmaf.xml" "%lossyFile%.vmaf.xml" move "%lossyFile%.vmaf.xml" "%outTxtPath%" ) :: lossyFile 只填文件名，路径已在 sourcePath、lossyPath 中定义 set "lossyFile=压缩视频文件2.mp4" set "outTxtFile=%lossyFile%.txt" ffmpeg -hide_banner -an -i "%sourcePath%%sourceFile%" ^ -i "%lossyPath%%lossyFile%" ^ -lavfi "%setptsCmdB%%vmafCmd%" -f null - > "%outTxtPath%%outTxtFile%" 2>&1 :: 重命名为压缩视频文件名，并移动到导出路径 if exist "X:\vmaf结果缓存文件夹\vmaf.xml" ( ren "X:\vmaf结果缓存文件夹\vmaf.xml" "%lossyFile%.vmaf.xml" move "%lossyFile%.vmaf.xml" "%outTxtPath%" )注：此例使用 CMD 批处理实现，因此使用 :: 做注释符，^ 做换行符，可以根据常用的命令行工具修改。注：此例使用 Windows 路径，这在 ffmpeg lavfi 中完全由滤镜自己定义路径格式，导致路径写法五花八门，ChatGPT 等大模型非常容易误判，修改时应特别注意。导入 Excel 并处理ffmpeg 导出的 libvmaf XML 大概上长这样：<VMAF version="b9ac69e6"> <params qualityWidth="4096" qualityHeight="2160" /> <fyi fps="4.88" /> <frames> // ..... 省略几十万字 ...... </frames> <pooled_metrics> <metric name="integer_adm2" min="0.985634" max="0.993714" mean="0.988010" harmonic_mean="0.988009" /> <metric name="integer_adm_scale0" min="0.971787" max="0.981927" mean="0.975181" harmonic_mean="0.975179" /> // ..... 省略几百字 ...... <metric name="vmaf_4k" min="97.730270" max="100.000000" mean="99.841975" harmonic_mean="99.841396" /> <metric name="vmaf_1080p" min="93.998455" max="100.000000" mean="99.953442" harmonic_mean="99.952122" /> </pooled_metrics> <aggregate_metrics /> </VMAF>打开 Excel，不用建立新工作簿，直接将 xml 拖入其中选择“作为 xml 表打开”，点确定忽略“指定的 xml 源没有引用架构...”提示，点确定需要用到的列只有 frameNum、vmaf_4k 和 vmaf_1080p，其他列可以删除（通过拖选顶部的字母列，按右键删除）拖选 frameNum、vmaf_4k 和 vmaf_1080p 3 列，选择插入→图表→散点图，选择第一个图即可创建图表填写图表标题（文件名或压制参数）注：此时可以选择一个好看的图表样式选中 Y 轴的数据框，右键→设置坐标轴格式→坐标轴选项，设定最小值：75、最大值：100注：设定最小值是为了防止数据点挤在一起看不清选中 X 轴的数据框，右键→设置坐标轴格式→坐标轴选项，设定最大值：视频最大帧数视频的最大帧数可以通过选中 frameNum 列，按 Ctrl+↓ 查找选中图表中的数据点，右键→设置数据系列格式→填充（油漆桶）→标记→标记选项中，选择使用面积更小、颜色不同的数据点先点击标记选项中的“自动”，再点击“内置”才能全选所有的数据点，否则只会先前选中的一个数据点趋势线选中图表中的数据点，右键→添加趋势线默认会出现线性趋势线，根据需要的分析方法选择需要的趋势线：线性：单纯分析码率增长速度指数：对码率增长敏感时，看指数线曲度是否足够直对数：log，对增长不敏感，但初始变化敏感的分析多项式，阶数6：分析哪部分视频占平均码率更大移动平均，周期10：额外添加一条更平均的码率变化曲线这样就能得到可视化的跑分数据了，那么就这样。打赏信息在线丢人，求个打赏，支持一下饭费 T_T——Buy me a coffee 链接——PayPal 链接 #post-content p, #post-content, #post-content ol {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size:100%} #post-content ul {font-size:87%} img {display: block; margin-left: auto; margin-right: auto;} body {font-size:100%; background-image: url(https://img4.yesya.net/img/5/2025-08/39_Background.webp); background-repeat: no-repeat; background-position: top left; background-attachment: fixed; background-size:cover}
本教程虽然相对于 x264、x265 教程严谨，并提供了测试数据提高严谨性，但仍仅具备业余参考价值。查阅本文要求读者已经明晰视频编码器的基本原理和一定细节。点此打开往期：x264、x265、QAAC、ffprobe 教程教程架构/内容范围概览——视频编码的流程与 AV1 支持的新格式、新标准编码——AV1 标准下的算法与功能特点文图解析参数——编码器（SVT-AV1）的实现、参数说明、报错列表附录——画质指标说明，编码测试设计、实践、设定规律总结，软件下载，参考文献字体系统本文使用了正文黑体，注解圆体和代码段字体共三套字体集。正文黑体为首选煮豆黑体 Zhudou Sans（中文）附件辅以系统 Sans Serif（英文）注解圆体为 Windows 的幼圆（中英文）附件代码段的字体为传统代码段的 SFMono-Regular，Menlo，Monaco，Consolas（英文） 辅以狮尾圆体 Light（中文）附件公式段的字体为 KaTeX Math Regular（英文）附件（适配安卓）辅以 Cochin，Georgia，Times，Times New Roman，serif繁体中文支持本教程由简体中文编写，可以通过安装浏览器插件来转换繁体及变体。效果不理想则请截图，并发送到本教程 Github 仓库中的 Issues，或 QQ 群里。暗黑模式支持本教程的所有图片在编写时已设为黑色背景。目前已验证 Dark Reader 的显示效果可用。打印机支持打开教程后，在标题栏中可以将当前内容切换到打印排版。并切换回一般排版。转换效果不理想时请截图发送到本教程 Github 仓库中的 Issues，或 QQ 群里。English SupportThis tutorial has been proof-read with TWP webpage translation plugin (Google Translate API), and protects codes, pathes from being translated with HTML code tag. Despite some translation results in very long sentences, overall the sentences makes sense, and can be better with more large context ML translations.English Support: Known issuesThere are cases with the main clause in a sentence being enclosed in HTML code tag (which is ignored by translation plugin), resulting in bad context; In this case, manually copying the text to a translater would fix it:Source: ... 使用与 TM_PRED 类似的原理 ...Incorrect: ... Use with TM_PREDSimilar principles are used ...Correct: ... Uses similar principles as TM_PRED ...There are verb-noun confustions in short words:Source: 应用预测Incorrect: Application PredictionCorrect: Apply prediction参考信息见教程末尾（不是 README/当前页末尾）。后记本教程是继 x264、x265 完整版教程的“续作”，其最明显的区别是配图数量翻倍、大量折叠处理的“概述之外”内容、引用性内容均辅以超链接指向出处、以及不同于以往的测试专用版块。相比 x264、x265 教程，本教程提供了超过 90 张插图，并均匀分布到了 AV1 算法说明的版块中，以帮助读者更好地理解复杂的概念和技术细节。由于信息量庞大，教程难免会有差错遗漏，追溯来源以确认信息可靠的需求就变得呼之欲出了。引用性内容的超链接对后期纠错查证，延伸阅读起到潜在的帮助，是属于“用时恨少”的细节。新增的测试版块提供了对测试方法、涉及算法与软件、视频源的选择、测试命令与结果的内容。这些内容来自于实践，从而可以真正帮助到用户精确地了解参数值强度对编码的影响，而不再是造成思维二值化误解的“有些、较大、一定量”的形容词。“欲穷千里目，更上一层楼”。总的来说，这些条件的达成使得本教程在可靠性、专业性和原创性方面有了显著提升，同时也极大地增强了用户体验。相比于纸上谈兵、空谈一番的 x264、x265 教程的存在价值更高。更新信息由于部署方案转为 GitHub page 的 HTML-JS-CSS 文档，因此直接观看提交（Commit）记录即可。打赏——Buy me a coffee 链接——PayPal 链接当前版本（年，版，改）：2025.11.1联系方式：Github：iAvoe，QQ 群 欢迎提交 pull-request 和 issues 指正 #post-content p, #post-content, #post-content ol {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size:100%} #post-content ul {font-size:87%} img {display: block; margin-left: auto; margin-right: auto;} body {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size: 100%; background-image: url('https://img4.yesya.net/img/5/2025-04/38_Background.webp'); background-repeat: no-repeat; background-position: top left; background-attachment: fixed; background-size:cover}
❀原创教程，转载请注明链接和作者QAAC 是基于苹果公司的QtAACEnc改进而来的，出现于 2012 年的开源编码器。相比 2006 年的 NeroAAC 更强大，且淘汰了 MP3 格式（因为网络视频、蓝牙音频都用 AAC 流）后续提要：Opus OGG 音频编码器命令行参数教程或 GitHub 副本压制教程合集页 V1 或 GitHub 副本压制教程合集页 V2科普音频格式可以根据用途分为通话、监听音、HiFi和噪音三种，其中：办公音频：要求听清语音（当然，往往还是听不清）监听音频：尽可能逼近录音和 OSC 乐器的原声，主要用于专业音频处理，包括分析、作曲和混音，包括监听耳机、音响、录音设备、调音设备。HiFi 音频：探索电气效应的物理极限，即同时发出非常小、非常大、非常宽又非常窄的声音，功率巨大却只有细微电流噪声的声音，有时会附加“家庭卡拉 OK”的需求。音频的位宽 bitwidth 就是数据/视频上的位深 bitdepth，在视频上代表明暗之间的亮度值密度，或者色彩 A~B 之间色度值的密度；在音频上就是波形音量动态范围的取值密度。下载与安装直接下载安装好的百度云提取码CCCC, 或谷歌盘下载 qaac 源码编译结果: github下载苹果的Core Audio支持：下载一个iTunes (Windows 64bit)，把后缀改成.zip打开，据系统位数解出AppleApplicationSupport(64).msi AppleMobileDeviceSupport.msi下载lesssmi (打开Lessmsi-gui.exe)，或MSIExtractor(是软件，不是批处理)打开.msi安装包如果要输入flac音频则需要去github，其中libflac的链接位于github-xiph。或ffmpeg pipeMSIExtractor中找到Common Files\Apple\Apple Application Support\目录并解压出以下文件放到QAAC的主目录下(和qaac64.exe放在一起)：lessmsi通过Ctrl+F查找并解压出以下文件放到QAAC的主目录下(和qaac64.exe放在一起)：没装Visual C++ 2012则还要加上主目录下的mscvp120.dll和mscvr120.dllASL.dll CoreAudioToolbox.dll与CoreFoundation.dll icudt**.dll libdispatch.dll，libicu**.dll及libicu**.dll (两个libicu，号码不同) objc.dll 打赏信息在线丢人，求个打赏，支持一下T_T这玩意年收入6人民币命令行用例'打开QAAC(文件夹\qaac.exe)' [参数] '打开音频(路径+文件名+后缀)'，如qaac64.exe -a -b 16 -r 44100 --threading --raw -o "导出位置\导出音频.m4a" "导入位置\*.wav" QAAC默认的导入导出位置就是批处理或shell(.bat/.sh)所在位置所以直接用*.wav，然后把批处理/shell拖到同源文件目录下运行就不用写路径了导入PCM波形的.wav需要加个--raw，具体见下文导入PCM波形哦ffmpeg 管道（Pipe）导入ffmpeg.exe -i '打开音频' -vn -sn -n -f wav - | D:\qaac.exe [参数] - --ignorelength -o <字符>输出路径与文件名，如有空格则加引号，例如-o 'D:\文件夹\输出音频.aac' --ignorelength代表已知输入WAV-PCM文件的情况下，启用unix pipe喂流，省去检查和手打音频长度信息的功夫 管道导入示例使用 MediaInfo 或播放器查看源音频流的平均码率（此处得到 135kbps），ffmpeg 解码 OPUS（OGG）音频到 WAV，管道导入 QAAC 并编码为相同位深、采样率、码率的 AAC 音频。ffmpeg.exe -i "in.opus" -vn -sn -dn -f wav - | qaac64.exe --tvbr 135 --ignorelength --verbose -o "out.aac" - 显示完整编码信息--verbose<开关>打开后可以看到平常CLI界面中不显示的 输出/编码格式AAC-LC：默认的低复杂度low-complexity编码，QAAC中限制最高320kbps，但aac标准上没写这限制AAC-HE：高压缩效率high-eff.编码，QAAC中限制最高80kbps，同码率下比LC细节好，但码率太低所以很难用到ALAC： 苹果无损压缩编码的PCM波形文件格式。偏小众，可能不如.ape格式常见-V，--tvbr <挡位0/9/18/27/36/45/54/64/73/82/91/100/109/118/127>可变码率，对应QtAAC的15个挡位，"数字越大音质越好"，默认91，不受--rate参数限制，适合有闲工夫调试着用 -v，--cvbr <挡位64/80/96/112/128/144/160/192/224/256/288/320，单位kbps>可变码率，"尽可能"控制在挡位指定的码率中，受--rate参数限制，适合有闲工夫调试着用 -a, --abr <整数>平均码率，码率限制下贴合目标码率使用的方案，但同质量下码率不如前两者tvbr, cvbr模式下，码率有可能会因为源音频流高度复杂而超标，有码率限制的话需要确认没超ABR模式因为用带宽换性能所以只适合直播--he <开关>用HE-AAC编码，除TVBR，ALAC，ADTS外可用，音质较差但码率只有16~80kbps ❀注意是--he而不是-he -A，--alac <开关>无损压缩，一般音乐的码率大概为1100~1400Kbps ADTS流格式和封装/音频不同，将文件作为真的"流格式"编码，一般用于直播和蓝牙A2DP音频，支持Unix Pipe传给下级处理程序取决于厂商生态，蓝牙设备还可能支持以下生态编解码中的一部分，高端的外置声卡和音频介面（同时支持蓝牙和USB输入）除外：兼容：SBC (其实已满足99%的音质要求)，大部分条形音响都用这个苹果：AAC-ADTS (QAAC支持编码)高通：aptX，aptX LL，aptX HD，aptX Adaptive索尼：LDAC盛微：LHDC，LLAC，LLAC LL三星（仅IEM耳机）：SSC微软（Windows系统）：自购Lucent的Windows LDAC A2DP驱动（25~35 CNY） + 支持蓝牙传输的硬件（USB，PCIE，M.2网卡等）Windows 10 2004或更高版本可通过Github上的第三方方案实现蓝牙ADTS输入，将系统本身临时作为接收设备用，但原作者长期未更新，且仅支持手动连接，有需求的可以（创建Github账户并）fork一个~未压缩流格式与视频解码器逆运算出画面所同，和音频文件的区别是不需要解码所以（在硬盘很快的情况下）打开速度比解码播放更快，但体积特大，但支持Unix Pipe传给下级处理程序封装与音频文件格式相比于纯数据流（视频流，音频流），封装文件增加了如歌词，章节，标识，封面；视频如HDR信息，帧率，分辨率等。封装后的体积比原始的流文件大点。音频流和视频流封装到一起时，则由视频封装文件会标记音频流的元数据.wav：未压缩的PCM波形文件后缀（指定-D）.alac：无损压缩PCM波形文件后缀，详见上方ALAC说明（指定-A）.aac：有损压缩的PCM/DTS波形音频流后缀（指定--adts）.caf/.m4a：音频封装，用于打包AAC，ALAC，PCM波形以及歌词，章节，标识，封面等内容到单文件QAAC编码后在MediaInfo打开还会显示"Apple audio with iTunes info"-D，--decode <开关>输出PCM波形(.wav) 一般用于频谱分析，毕竟解包不带解码器的软件然后安个解码器进去的门槛超高 -A，--alac <开关>无损压缩 --adts <开关>以Audio Data Transport System格式编码，主要用于蓝牙耳机和音响. 除无损(ALAC)以外的模式可用 *留空* <默认>编码为AAC并封装为.m4a --caf <开关>用core audio format封装格式打包音频流以及-D下导出的PCM波形 与ffmpeg/带Lav-filter的视频处理工具不同，QAAC不识别命令行里导出文件的后缀名，因此必须指定格式参数导入PCM波形QAAC会自动检测源的规格，但PCM(.wav)就测不出来，所以会默认用2声道，44100Hz，16bit位深编码新文件. 若与源不符，就要手动指定输入PCM流的规格：--raw <开关>启用纯PCM波形模式，要不然QAAC不知道 --raw-channels <浮点，默认2>指定声道数量. 有3，4，5，5.1，6，6.1，7，7.1和8可选，要搭配--chanmap用 --raw-rate <整数，默认44100>照着源文件写就行啦 --raw-format <字符+整数+字符>S/U/F+位深+L/B，若符合默认s16l就不用动咯~S(igned)/U(nsigned)：首个位深字节值里面有（范围0~255）或没有（范围-128~127）正负号，一般都有，没见过就写默认的SF(loat)：源音频流是浮点位深，不是整数位深位深：在音频上都叫位宽，一般是默认16bit，此处不加后缀bitsL(ittle-Endian)/B(ig-Endian)：具体看这篇教程的解释，总之要用到x86架构的处理器，用默认的L就对啦~--ignorelength <开关>已知unix pipe输入WAV-PCM文件流的情况下，启用unix pipe支持，省去检查和手打音频长度信息的功夫 多声道编辑常见的立体声有1左2右两条声道. 而更高的数量的声道会照标准，给这些音轨对号入座；比如三声道就是中置1，左2，右3等等，具体见github里的声道布置表格音频的常见问题有麦克拿反/右耳没声音；然后这里PCM波形还无法被QAAC自动检测，所以手打音轨号来修复/指定就成了常规操作...大概--chanmask <浮点，默认0(立体声)>强制使用3，4，5，5.1，6，6.1，7，7.1或8声道 --chanmap <逗号分隔数字>重分配输入音频的声道位--chanmap 2,1代表音轨1换到二号位，音轨2换到一号位；在立体声中就是左右互换；能修复麦克拿反了的情况，不过据说麦克拿倒了是假唱（大雾）--chanmap 1,1在立体声中将左声道贴入右声道，可以修复右耳没声的问题（未测试）--chanmap 2,3,1代表三声道默认的1中，2左，3右改成2中，3左，1右. 其实就是1移动到了最右边压缩强度与占用-b，--bits-per-sample <整数>改动音频位深，比如频谱分析软件支持最深16bit，而音频是24位时就加上-b 16来修复 -n，--nice <开关>降低程序优先级 --threading <开关>使用多线程 -q，--quality <整数，范围0~2，默认2> 仅用于编码速度换取音质的参数，不用改 注: 默认是使用低复杂度low complexity 即lc编码方式，适合直播. --no-dither <开关>关闭抖动，用音质换取文件体积的参数. --no-optimize <开关>编码后的音频还要再进行一步优化，以装入.caf/.m4a的封装中，此选项将其关闭，所以别动>_< 章节处理--chapter <输出章节>给编码的音频封装(.M4A/.CAF)写入章节信息，至于怎么拷进视频封装里咱就不懂啦❀ 00:00:00.000 Intro 00:00:31.031 OP 0:01:57.034 Part_A 00:12:41.552 Part_B 00:22:41.151 ED 00:24:09.740 Next_Ep_PreviewPatlabor TV - 17.txt--cue-tracks <逗号分隔整数>仅支持cue列表的--cue-tracks 4就是编码cue文件中指定的第4号音频--cue-tracks 11-13,15就是分别导出11,12,13,15号音频--concat --cue-tracks 11-13,15就是组合导出11,12,13,15为一整个音频--text-codepage <整数>生成cue sheet/章节/歌词字幕的文本编码，一般用65001表示UTF-8 导出章节中单曲cue sheet可以自己写，然后保存为.cue标准格式如下，照着写，然后导入QAAC来分指定cue-tracks导出就行了❀REM GENRE Anime REM DATE 2014 REM DISCID 3503D604 REM COMMENT "ExactAudioCopy v1.0b3" CATALOG 4988104079268 PERFORMER "みかくにんぐッ!" TITLE "とまどい→レシピ" FILE "みかくにんぐッ! - とまどい→レシピ.wav" WAVE TRACK 01 AUDIO TITLE "とまどい→レシピ" PERFORMER "みかくにんぐッ!" ISRC JQ2921400252 INDEX 01 00:00:00 TRACK 02 AUDIO TITLE "放課後ばけーしょん" PERFORMER "みかくにんぐッ!" ISRC JQ2921400253 INDEX 00 04:30:62 INDEX 01 04:32:36とまどい→レシピ.cue首位波形缓入缓出直译的话就是智能首尾垫音，主要设计目的是为了缓冲掉歌曲突然开始，波形从零突然冲顶，低端声卡会直接噼啪爆音(待考证)的情况--no-smart-padding <开关>关掉这个默认功能，但不建议 音频标识(内容正在施工中)--tag <4cc:value>用fourCC.org标准?格式?的标识(内容正在施工中) --tag-from-file <文件名>同上但这次是输入已经写好的文件 --long-tag <key:value>用iTunes标准?格式?的标识(内容正在施工中) --fname-format<?>文件命名格式(内容正在施工中) --fname-from-tag<?>用音频标识命名输出文件，这样给写好的曲子加上tag就可以节省各种导出和压缩的时间了(内容正在施工中) 音频编辑-r，--rate <整数>调整音频的采样率，比如视频网站要求44100HZ，而音频是48000HZ就写-r 44100 --gain <浮点>调整文件音量，输入负值可减低 --concat <开关>将(用通配符如*.wav)输入的多个文件按输入顺序结合为单文件，QAAC会生成章节chapter到.m4a封装里(未验证) --normalize <开关>音量标准化，统一所有要处理歌曲的音量 --start <浮点>开始时间，格式hh:mm:ss.xxxxx..... 比如1:13:22.4432就是在1小时13分22.4432秒开始压缩 --end <浮点>结束时间，格式同上 --delay <浮点>开始前延时，格式同上，如果输入负值则作用同开始时间 --peak <开关>扫描音频尖峰并只输出文本，用于方便检查混音音量 音频滤镜用DAW还能预览效果，所以不晓得这个还有啥用...--drc <判定:衰减:缓冲:见效:退效>动态范围压缩，就是将吵的音量压下来，同时保留一定范围内音量，使不该响的不响的功能 判定 threshold判定(阈值的去术语化叫法), 超过此值则判定为吵，反之未超过的就判定为不吵，单位dBFS，这个值就自己吼一嗓子试试吧(⌒_⌒;) 衰减 ratio程度，例如判定值是10，比率是3，只要音量超过10db就将<超出的部分>压缩到原来的1/3，通常设15 缓冲 knee过渡，值越大就越柔和，使整个处理过程更自然的参数，单位db，通常设1 见效 attack时长，单位毫秒. 防止编码器反应过快，致原本大声没有超过判定值就被压回来 ~例如设在3.2，那么超出判定值的音量要从0秒不处理，到花3.2毫秒才完全达到衰减后的设定，通常设25~50左右 去效 release时长，单位毫秒. 防止编码器反应过快致声降低不明显，在混音中，release越快，对应的乐器轨道就越靠前，反之越慢，因此构成了声场上前-后的声场关系，用于在乐器数量多的情况下保证乐器的主次关系。如果是逼近物理位置还得加上和建筑外形相同反射面建模的自定义Reverb ~例如设3.2，那么离开判定范围时，音量会在0秒保持衰减，到3.2毫秒时才完全回到衰减前的设定，通常设150~300左右 举例: '--drc 50:6:7:8.9:10'指超过50db阈值，压缩到原来的1/6，反应过来前音量低了8.9db，音频落回后花10毫秒将衰减的效果消除已知报错请求的操作无法在使用用户映射区域打开的文件上执行, 是本应输出并覆盖旧文件时，目标文件被占用导致覆盖失败floating point PCM is not supported for ALAC，是因为原音频是alac不支持浮点位深，需要-b 16/20/24/32转换~--log <文件名>导出压制log 批处理单文件储存多个参数::将此处复制下来保存为.bat文件即可使用 @ set QAAC=D:\Programs\QAAC\qaac64.exe @ set 转WAV=-D --threading -r 44100 -b 16 @ set abr320K=-a 320 -b 16 -r 44100 --threading @ set cvbr256K=-v 256 -b 16 -r 44100 --threading @ set ALAC=--alac -b 16 --threading ::使用例子: %QAAC% %转WAV% -o "输出" "输入", 可以多复制调整几行命令以批量处理 shell单l文件储存多个参数(未验证，需自行修改)第一步, 安装Wine以运行.exe:sudo dpkg --add-architecture i386 wget -nc https://dl.winehq.org/wine-builds/Release.key sudo apt-key add Release.key sudo apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/ sudo apt-get update sudo apt-get install --install-recommends winehq-stable 第二步:#将此处复制下来保存为.sh文件, 通过Bash #!/bin/Bash QAAC=./D:\Programs\QAAC\qaac64.exe 转WAV=-D --threading -r 44100 -b 16 320K=-a 320 -b 16 -r 44100 --threading 256K=-a 256 -b 16 -r 44100 --threading ALAC=--alac -b 16 --threading #使用例子: $QAAC $转WAV -o "输出" "输入", 可以多复制调整几行命令以批量处理 关于选择正确的采样率只要确认要编码音频的音高赫兹数，就可以确定使用更低的采样率编码音频，实现压缩采样率录制时的波形锚点写入频率，以及播放时转换到模拟信号的输出频率，用赫兹 Hz 表示。根据奈奎斯特-香农采样定理，采样一个正弦/余弦波的最小频率应为两倍于其周期，才能使模拟转数字的数据足够保真，大概如图：余弦波y=cos(πx)中，一个周期里有一个波峰和一个波谷，所以波峰最高处，和波谷最低处应该采样一次：如果采样的频率远低于波形频率的两倍：如果采样率和波形周期相同：如果采样率略高于信号频率，采样的信息里至少仍然是贴近y=cos(πx)的：这个正弦波实际代表的是音频里频率最高的信号，所以是才是理论上采样率的“底线”注：上图见 Desmos 例音高各种音色的震动频率，频率越高则音高越高结合采样率说，为了保真最高振动频率/音高最高的信号，所以采样率是音高频率的两倍在实践中，如果创建一个 48000Hz / 48kHz 的音频工程文件，这个音频频谱则最高支持 24000Hz / 24kHz赫兹任何一种测量范围内均衡重复现象，如波形或物件震频，芯片的运行频率，由Hz，KHz，GHz表示，赫兹数越高，支持的音高就越高歌声中的齿音/咬字音，非元音/通过口腔发出的短音，这些声音仍比乐器的泛音高很多音高最高的乐器是Hi-Hat/铜嚓，Cymbal/锣QAAC-LC的采样率，声道，码率对应表采样率 (Hz)最高频率 (Hz)声道布置最小-最大码率流量/CVBR档位80004000Mono8 12 16 20 2480004000Stereo16 20 24 28 32 40 48800040003.0 (C L R)24 28 32 40 48 56 64 72800040004.0 (L R Ls Rs)32 40 48 56 64 72 80 96800040004.0 (C L R Cs)32 40 48 56 64 72 80 96800040005.0 (C L R Ls Rs)40 48 56 64 72 80 96 112800040005.1 (C L R Ls Rs LFE)40 48 56 64 72 80 96 112800040006.0 (C L R Ls Rs Cs)48 56 64 72 80 96 112 128 144800040006.1 (C L R Ls Rs Cs LFE)48 56 64 72 80 96 112 128 144800040007.0 (C L R Ls Rs Rls Rrs)56 64 72 80 96 112 128 144 160800040007.1 (C Rc L R Ls Rs LFE)56 64 72 80 96 112 128 144 160800040008.0 (C L R Ls Rs Rls Rrs Cs)64 72 80 96 112 128 144 160 192110255512.5Mono8 12 16 20 24 28 32110255512.5Stereo16 20 24 28 32 40 48 56 64110255512.53.0 (C L R)40 48 56 64 72 80 96110255512.54.0 (L R Ls Rs)48 56 64 72 80 96 112 128110255512.54.0 (C L R Cs)48 56 64 72 80 96 112 128110255512.55.0 (C L R Ls Rs)64 72 80 96 112 128 144 160110255512.55.1 (C L R Ls Rs LFE)64 72 80 96 112 128 144 160110255512.56.0 (C L R Ls Rs Cs)72 80 96 112 128 144 160 192110255512.56.1 (C L R Ls Rs Cs LFE)72 80 96 112 128 144 160 192110255512.57.0 (C L R Ls Rs Rls Rrs)96 112 128 144 160 192 224110255512.57.1 (C Rc L R Ls Rs LFE)96 112 128 144 160 192 224110255512.58.0 (C L R Ls Rs Rls Rrs Cs)96 112 128 144 160 192 224 256120006000Mono12 16 20 24 28 32120006000Stereo24 28 32 40 48 56 641200060003.0 (C L R)40 48 56 64 72 80 961200060004.0 (L R Ls Rs)48 56 64 72 80 96 112 1281200060004.0 (C L R Cs)48 56 64 72 80 96 112 1281200060005.0 (C L R Ls Rs)64 72 80 96 112 128 144 1601200060005.1 (C L R Ls Rs LFE)64 72 80 96 112 128 144 1601200060006.0 (C L R Ls Rs Cs)72 80 96 112 128 144 160 1921200060006.1 (C L R Ls Rs Cs LFE)72 80 96 112 128 144 160 1921200060007.0 (C L R Ls Rs Rls Rrs)96 112 128 144 160 192 2241200060007.1 (C Rc L R Ls Rs LFE)96 112 128 144 160 192 2241200060008.0 (C L R Ls Rs Rls Rrs Cs)96 112 128 144 160 192 224 256160008000Mono12 16 20 24 28 32 40 48160008000Stereo24 28 32 40 48 56 64 72 80 961600080003.0 (C L R)40 48 56 64 72 80 96 112 128 1441600080004.0 (L R Ls Rs)48 56 64 72 80 96 112 128 144 160 1921600080004.0 (C L R Cs)48 56 64 72 80 96 112 128 144 160 1921600080005.0 (C L R Ls Rs)64 72 80 96 112 128 144 160 192 2241600080005.1 (C L R Ls Rs LFE)64 72 80 96 112 128 144 160 192 2241600080006.0 (C L R Ls Rs Cs)72 80 96 112 128 144 160 192 224 256 2881600080006.1 (C L R Ls Rs Cs LFE)72 80 96 112 128 144 160 192 224 256 2881600080007.0 (C L R Ls Rs Rls Rrs)96 112 128 144 160 192 224 256 288 3201600080007.1 (C Rc L R Ls Rs LFE)96 112 128 144 160 192 224 256 288 3201600080008.0 (C L R Ls Rs Rls Rrs Cs)96 112 128 144 160 192 224 256 288 320 3842205011025Mono16 20 24 28 32 40 48 56 642205011025Stereo32 40 48 56 64 72 80 96 112 12822050110253.0 (C L R)48 56 64 72 80 96 112 128 144 160 19222050110254.0 (L R Ls Rs)64 72 80 96 112 128 144 160 192 224 25622050110254.0 (C L R Cs)64 72 80 96 112 128 144 160 192 224 25622050110255.0 (C L R Ls Rs)80 96 112 128 144 160 192 224 256 288 32022050110255.1 (C L R Ls Rs LFE)80 96 112 128 144 160 192 224 256 288 32022050110256.0 (C L R Ls Rs Cs)96 112 128 144 160 192 224 256 288 320 38422050110256.1 (C L R Ls Rs Cs LFE)96 112 128 144 160 192 224 256 288 320 38422050110257.0 (C L R Ls Rs Rls Rrs)112 128 144 160 192 224 256 288 320 384 44822050110257.1 (C Rc L R Ls Rs LFE)112 128 144 160 192 224 256 288 320 384 44822050110258.0 (C L R Ls Rs Rls Rrs Cs)128 144 160 192 224 256 288 320 384 448 5122400012000Mono16 20 24 28 32 40 48 56 642400012000Stereo32 40 48 56 64 72 80 96 112 12824000120003.0 (C L R)48 56 64 72 80 96 112 128 144 160 19224000120004.0 (L R Ls Rs)64 72 80 96 112 128 144 160 192 224 25624000120004.0 (C L R Cs)64 72 80 96 112 128 144 160 192 224 25624000120005.0 (C L R Ls Rs)80 96 112 128 144 160 192 224 256 288 32024000120005.1 (C L R Ls Rs LFE)80 96 112 128 144 160 192 224 256 288 32024000120006.0 (C L R Ls Rs Cs)96 112 128 144 160 192 224 256 288 320 38424000120006.1 (C L R Ls Rs Cs LFE)96 112 128 144 160 192 224 256 288 320 38424000120007.0 (C L R Ls Rs Rls Rrs)112 128 144 160 192 224 256 288 320 384 44824000120007.1 (C Rc L R Ls Rs LFE)112 128 144 160 192 224 256 288 320 384 44824000120008.0 (C L R Ls Rs Rls Rrs Cs)128 144 160 192 224 256 288 320 384 448 5123200016000Mono24 28 32 40 48 56 64 72 80 963200016000Stereo48 56 64 72 80 96 112 128 144 160 19232000160003.0 (C L R)72 80 96 112 128 144 160 192 224 256 28832000160004.0 (L R Ls Rs)96 112 128 144 160 192 224 256 288 320 38432000160004.0 (C L R Cs)96 112 128 144 160 192 224 256 288 320 38432000160005.0 (C L R Ls Rs)128 144 160 192 224 256 288 320 384 44832000160005.1 (C L R Ls Rs LFE)128 144 160 192 224 256 288 320 384 44832000160006.0 (C L R Ls Rs Cs)144 160 192 224 256 288 320 384 448 512 57632000160006.1 (C L R Ls Rs Cs LFE)144 160 192 224 256 288 320 384 448 512 57632000160007.0 (C L R Ls Rs Rls Rrs)192 224 256 288 320 384 448 512 576 64032000160007.1 (C Rc L R Ls Rs LFE)192 224 256 288 320 384 448 512 576 64032000160008.0 (C L R Ls Rs Rls Rrs Cs)192 224 256 288 320 384 448 512 576 640 7684410022050Mono32 40 48 56 64 72 80 96 112 128 144 160 192 224 2564410022050Stereo64 72 80 96 112 128 144 160 192 224 256 288 32044100220503.0 (C L R)96 112 128 144 160 192 224 256 288 320 384 44844100220504.0 (L R Ls Rs)128 144 160 192 224 256 288 320 384 448 512 576 64044100220504.0 (C L R Cs)128 144 160 192 224 256 288 320 384 448 512 576 64044100220505.0 (C L R Ls Rs)160 192 224 256 288 320 384 448 512 576 640 76844100220505.1 (C L R Ls Rs LFE)160 192 224 256 288 320 384 448 512 576 640 76844100220506.0 (C L R Ls Rs Cs)192 224 256 288 320 384 448 512 576 640 768 96044100220506.1 (C L R Ls Rs Cs LFE)192 224 256 288 320 384 448 512 576 640 768 96044100220507.0 (C L R Ls Rs Rls Rrs)224 256 288 320 384 448 512 576 640 768 96044100220507.1 (C Rc L R Ls Rs LFE)224 256 288 320 384 448 512 576 640 768 96044100220508.0 (C L R Ls Rs Rls Rrs Cs)256 288 320 384 448 512 576 640 768 960 12804800024000Mono32 40 48 56 64 72 80 96 112 128 144 160 192 224 2564800024000Stereo64 72 80 96 112 128 144 160 192 224 256 288 32048000240003.0 (C L R)96 112 128 144 160 192 224 256 288 320 384 44848000240004.0 (L R Ls Rs)128 144 160 192 224 256 288 320 384 448 512 576 64048000240004.0 (C L R Cs)128 144 160 192 224 256 288 320 384 448 512 576 64048000240005.0 (C L R Ls Rs)160 192 224 256 288 320 384 448 512 576 640 76848000240005.1 (C L R Ls Rs LFE)160 192 224 256 288 320 384 448 512 576 640 76848000240006.0 (C L R Ls Rs Cs)192 224 256 288 320 384 448 512 576 640 768 96048000240006.1 (C L R Ls Rs Cs LFE)192 224 256 288 320 384 448 512 576 640 768 96048000240007.0 (C L R Ls Rs Rls Rrs)224 256 288 320 384 448 512 576 640 768 96048000240007.1 (C Rc L R Ls Rs LFE)224 256 288 320 384 448 512 576 640 768 96048000240008.0 (C L R Ls Rs Rls Rrs Cs)256 288 320 384 448 512 576 640 768 960 1280QAAC-HE的采样率，声道，码率对应表采样率 (Hz)最高频率 (Hz)声道布置最小-最大码率流量/CVBR档位160004000Mono10 12 16 20 24 28 32160008000Stereo20 24 28 32 40 48 56 641600080004.0 (L R Ls Rs)40 48 56 64 80 96 112 1281600080005.1 (C L R Ls Rs LFE)56 64 80 96 112 128 1601600080007.1 (C Rc L R Ls Rs LFE)80 96 112 128 160 192 2242205011025Mono10 12 16 20 24 28 322205011025Stereo20 24 28 32 40 48 56 6422050110254.0 (L R Ls Rs)40 48 56 64 80 96 112 12822050110255.1 (C L R Ls Rs LFE)56 64 80 96 112 128 16022050110257.1 (C Rc L R Ls Rs LFE)80 96 112 128 160 192 2242400012000Mono12 16 20 24 28 322400012000Stereo24 28 32 40 48 56 6424000120004.0 (L R Ls Rs)48 56 64 80 96 112 12824000120005.1 (C L R Ls Rs LFE)64 80 96 112 128 16024000120007.1 (C Rc L R Ls Rs LFE)96 112 128 160 192 2243200016000Mono12 16 20 24 28 32 403200016000Stereo24 28 32 40 48 56 64 8032000160004.0 (L R Ls Rs)48 56 64 80 96 112 128 16032000160005.1 (C L R Ls Rs LFE)64 80 96 112 128 160 19232000160007.1 (C Rc L R Ls Rs LFE)96 112 128 160 192 224 256441004000Mono16 20 24 28 32 404410022050Stereo32 40 48 56 64 8044100220504.0 (L R Ls Rs)64 80 96 112 128 16044100220505.1 (C L R Ls Rs LFE)80 96 112 128 160 19244100220507.1 (C Rc L R Ls Rs LFE)112 128 160 192 224 2564800024000Mono16 20 24 28 32 404800024000Stereo32 40 48 56 64 8048000240004.0 (L R Ls Rs)64 80 96 112 128 16048000240005.1 (C L R Ls Rs LFE)80 96 112 128 160 19248000240007.1 (C Rc L R Ls Rs LFE)112 128 160 192 224 2568820044100Mono32 40 48 56 64 80 96 112 128 1608820044100Stereo64 80 96 112 128 160 192 224 256 32088200441004.0 (L R Ls Rs)128 160 192 224 256 320 448 64088200441005.1 (C L R Ls Rs LFE)160 192 224 256 320 448 64088200441007.1 (C Rc L R Ls Rs LFE)224 256 320 448 640 11209600048000Mono32 40 48 56 64 80 96 112 128 1609600048000Stereo64 80 96 112 128 160 192 224 256 32096000480004.0 (L R Ls Rs)128 160 192 224 256 320 448 64096000480005.1 (C L R Ls Rs LFE)160 192 224 256 320 448 64096000480007.1 (C Rc L R Ls Rs LFE)224 256 320 448 640 1120操作打开Audition或其它可以观察频谱/热度图的软件导入源音频，找到全曲响度最大，最激烈的部分（一般为副歌Chorus）对频谱/热度图操作Ctrl+鼠标滚轮向下直到能看见22kHz的信号频率为止图中例子显示，在19kHz的信号频率往上就没有任何有效信息了如果怀疑信号有效，则可以用鼠标左键拖选这部分信号并播放，如果听不到就调大音量，直到听到为止（注意保护听力，因为提高音量的同时也会提高本来就很响处的音量）可以打开窗口 > 频率分析以仔细观察频谱，进度条指针所对应18kHz及其上方的信号电平小于-80dBFS根据波形振幅转换混音电平的公式可以看到，在-50dBFS以下的波形振幅太小了，对音质/信号完整性没有任何贡献（甚至从-60dBFS开始就失效了）-50dBFS以下电平需要正常歌曲音量播放在75~85dB（标准混音音量）的时候能勉强听到一点，-60dBFS以下的电平需要让正常歌曲能打碎玻璃的音量才能听到，-80dBFS以下的电平...理论上需要能让正常歌曲弄坏扬声器的巨大音量才能听到因此，根据对音频的频谱分析，得到了仅限这段音频中大于19kHz的音高属于可以砍掉无效信号的结论；对应到AAC-LC双声道逐轨最高有效为22050Hz，即全音频流44100Hz的最高有效采样率，得到参数qaac64.exe --tvbr 127 -b 16 -r 44100 --threading --verbose 甚至可以更进一步地把所有-60dBFS（12kHz以上的频段），但适用的音频更少；对应到AAC-LC双声道逐轨最高有效为16000Hz，即全音频流32000Hz的最高有效采样率，得到参数qaac64.exe --tvbr 127 -b 16 -r 32000 --threading --verbose 最终得到了平均300Kbps，但音质与44100Hz或更高储存频率的音频差▲1‰左右，同时理论音质等于或高于CVBR 320kbps，44100或48000Hz的高压缩音轨有概率变高是因为更多码率能被拿来编码有效信号理论验证为防被说瞎搞，所以验证了一下理论... 方法是将-6dBFS的电平对应到90~100dB，然后逐渐降低音量从而获取到-80dBFS的感知音量，缺陷是录音设备是一加3T和一加8，一加3T的最大收音音量只有64dB，一加8的最大收音音量只有89dB播放一个-6dBFS的正弦波，实际音量为大于89dB（要被震吐了...）然后把电平降低到-38dBFS，接收音量下降到了48dB，此时体感音量相当于手机音量设置在8~18%然后把电平降低到-48dBFS，接收音量下降到了22dB，这个时候扬声器的音量低于环境噪音(19~25dB)，耳朵贴在扬声器上能勉强听到再往下就完全被环境噪音遮住了，但在 -52~-54dBFS 的时候把耳朵贴在扬声器上使劲听还是能听到很微弱的一点点...那么... emmmmmmm就这样，呕2024.1 更新：改良了封装文件vs音频文件格式，并增加了 QAAC 不根据后缀名判断的说明（感谢 @1-β²）2025.11 更新：增加了 ffmpeg 读取 OPUS、管道导入 QAAC，再编码为 AAC 的转码示例 document.getElementById("scheme-Paradox").style.backgroundImage = 'url("https://img4.yesya.net/img/5/2022-04/8_Background.png")' #post-content p, #post-content, #post-content ol {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size:100%} #post-content ul {font-size:87%} img {display: block; margin-left: auto; margin-right: auto;} body {font-size:100%; background-repeat: no-repeat; background-position: top left; background-attachment: fixed; background-size:cover}
ffprobe + Excel绘制视频，音频码率变化曲线，趋势线，帧类型饼图
本教程是ffprobe教程的延伸。建议先阅读本体哦~本教程提供了绘制码率变化曲线，码率变化趋势，帧类型饼图的解决方案，限制条件是禁止使用Python环境与模块，VBS命令，宏，批处理，ps1，shell，MSSQL，网页工具等等需要配置环境的数据处理方法来降低门槛。如果有条件则完全可以用它们来得到同样的结果。2025.3：在不同的编码格式，以及不同版本的 Excel 下，操作和本文中说明，以及实际情况与本文中提供的截图会有出入，但不影响操作。下载ffprobegyan.devbtbn(GitHub)解压出ffprobe.exe，记住解压路径读取视频并输出 xmlPowerShell 批量分析 XML 并转换文本编码$files = @( ".\视频1.mp4", ".\视频2.mp4", ".\视频3.hevc" ) # 强制指定 UTF-8 with BOM，以兼容 Excel foreach ($file in $files) { $video = [System.IO.Path]::GetFileNameWithoutExtension($file) $outputPath = "D:\Desktop\ffprobe-xmls\$video.xml" Write-Host "正在处理 $file..." & ffprobe -i $file -select_streams v:0 -v error -hide_banner -show_frames -show_entries frame=pkt_pts,best_effort_timestamp,pkt_size,pict_type,key_frame,interlaced_frame -of xml | Out-File -FilePath $outputPath -Encoding UTF8 } Write-Host "分析完成" 此处输出 xml 到 D:\Desktop\ffprobe-xml 文件夹下，可按需更改；$video 则是复制了 $files 列表中每个视频文件名的变量，无需更改。检测损坏帧变体同样是 PowerShell 批量分析 XML 并转换文本编码，但不再过滤 show_frames 信息$files = @( ".\视频1.mp4", ".\视频2.mp4", ".\视频3.hevc" ) # 强制指定 UTF-8 with BOM，以兼容 Excel foreach ($file in $files) { $video = [System.IO.Path]::GetFileNameWithoutExtension($file) $outputPath = "D:\Desktop\ffprobe-xmls\$video.xml" Write-Host "正在处理 $file..." & ffprobe -i $file -select_streams v:0 -v error -hide_banner -show_frames -of xml | Out-File -FilePath $outputPath -Encoding UTF8 } Write-Host "分析完成" 如果到宽度、高度、播放时间戳、色彩空间、位深数据与其它 99% 的帧不同的帧，则很可能是损坏帧。修复方法是通过视频编辑软件、ffmpeg 等工具，将损坏帧的上一帧拷入覆盖掉。（需要重新编码）导入Excel打开Excel，不用建立新工作簿，直接将xml拖入其中选择"作为只读xml表"，点确定不用管"指定的xml源没有引用架构..."提示，点确定，表格结果如图由于ffprobe用字节byte作计量单位，而bit才是常用剂量码率的单位，所以需要新建一列做转换显示 “H.26[45] User Data Unregistered SEI message” 的列可以直接删除，这些信息一般属于额外的解码配置整理标题栏，如果标题栏在行 2，则删除行 1、同时如果标题栏有很多无效信息，则进行修剪，这对接下来的表格创建有很大帮助如“/frames/frame/@best_effort_timestamp”改为“best_effort_timestamp”byte 转 bit单击标题栏外的新列，如下图中的 G1 格在顶部编辑栏写pkt_size_bit，点击 √ 或按 Enter 确认Excel 中，不按确认就默认用户还未输入完，很容易造成误操作此时，自动更正会套用标题，格式没有变化则去文件→选项→校对→自动更正→键入时自动套用格式→工作时应用: □ 在表中包含新行和列，再重试单击除pkt_size_bit 外的任意标题（key_frame，pkt_pts等），在右下角可以看到 计数: xxxxx，代表当前表格高度——视频的总帧数找到 pkt_size 列的格，图中为 D2单击 pkt_size_bit 列往下 1 格（下图中的 G2，若标题栏在行 2 则是 G3 格）在顶部编辑栏写=PRODUCT(D2*8)，点击 √ 或按 Enter 确认当然，Kbit 更加易读，所以可以改写为 =PRODUCT(D2*8/1000) 或 =PRODUCT(D2*8/1024)，后者为二进制大小如果整列数据没有变化，则选择刚刚填充好的格（图中的 G2），按 Ctrl+Shift+↓ 选择所有下方格，然后在顶部菜单栏选择开始→编辑→填充→向下，完成填充或者，去文件→选项→校对→自动更正→键入时自动套用格式→工作时应用: □ 在表中包含新行和列，然后重试如果仍没有变化则去文件→选项→高级→编辑选项打开“为单元格值启用自动完成”以及其子项，然后重试如果 6 中选择了插入，则数据会一直插入到 Excel 表格的列数极限，此时要找到表格的实际末尾，然后从多余列开始选中，按 Ctrl+Shift+↓ 选择所有下方格，再按 Delete 删除变化线单击 best_effort_timestamp 上方的列号以选中整列新版 Excel：单击 best_effort_timestamp 标题，然后按 Ctrl+Shift+↓ 选中表格，否则会一直选中到 Excel 的最末行按住 Ctrl 并单击刚刚创建 pkt_size_bit 上的标号以同时选中该列新版本 Excel：在保持 best_effort_timestamp 选中的情况下，拖动右侧滚动条到表格顶部，按 Ctrl 单击 pkt_size_bit，再按 Ctrl+Shift+↓ 选中该列（不松开 Ctrl 也可以）在Excel顶栏上选插入→图表栏→折线图→二维面积图，就得到精确的码率变化图表了新版本 Excel 中需要去勾选 best_effort_timestamp 列的显示：由于非常精确，所以要放大，拉长才能看清很细的线单击图中面积阴影部分以选中，此时图表会显示全部顶点；光标放在顶点上，Excel显示"绘图区"时微移光标一下（仍然保持在顶点上），就会得到对应点的编号一般情况下，这些尖峰顶点是I帧，但也可能是大部分为I块的P帧注：若视频很长，则移动图表的最好方法是 Ctrl+X 剪切，然后拖拽滚动条到顶部，选中适合的格子再使用 Ctrl+V 粘贴注：对于图表坐标轴中的负值，可以从 选中图表→菜单栏图表工具→图表→格式→当前选中内容→将“绘图区”选项改选为“垂直（值）轴”→在右侧展开的“设置坐标轴格式”栏→数轴→坐标轴选项 中手动设定最小值修正。趋势线单击面积阴影部分以选中，右键-->添加趋势线默认会出现线性趋势线，根据需要的分析方法选择需要的趋势线：线性：单纯分析码率增长速度指数：对码率增长敏感时，看指数线曲度是否足够直对数：log，对增长不敏感，但初始变化敏感的分析多项式，阶数6：分析哪部分视频占平均码率更大（阶数最大竟然只有6，切）移动平均，周期10：额外添加一条更平均的码率变化曲线帧类型饼图分别在H1（列H行1，或列8行1），I1，J1，K1，L1填写以下标题count_I，count_P，count_B，count_IDR，count_non_IDR和开始添加pkt_size_bit一样，Excel应该会自动套用格式选中count_I标题下格，编辑栏中填写=COUNTIF(E2:E99999,"I")，点击左边的"√"或按Enter其中的E代表pict_type列，99999代表取决于帧数量的表格高度，超过99999则填写实际高度忽略这些自动填充导致第二行往下出现的新值选中count_P标题下格，编辑栏中填写=COUNTIF(E2:E99999,"P")选中count_B标题下格，编辑栏中填写=COUNTIF(E2:E99999,"B")选中count_IDR标题下格，编辑栏中填写=COUNTIFS(E2:E99999,"I",A2:A99999,"1")其中的A代表key_frame列，如果不是则需要修改到匹配列的字母COUNTIFS支持多个判断条件选中count_non_IDR标题下格，编辑栏中填写=COUNTIFS(E2:E99999,"I",A2:A99999,"0")为保证COUNTIFS不算错，需要与count_non_IDR求和，应当等于count_I拖拽选中I1到L2（count_P，count_B，count_IDR，count_non_IDR以及下方对应格子的值，共2x4个项）在Excel顶栏上选插入-->饼图-->更多饼图-->子母饼图-->第二个推荐项目，帧类型的饼图就做好了考虑到会出现千分之一比值的帧类型，所以为了避免看不到，只能选子母饼图选一个漂亮的样式吧这玩意做了才知道有多难，那么就这样<(。_。)>::转载要求: 在本文下方写上"转载+冒号+转载地址"，或者下方发个评论... 但是真的会有人转载这玩意儿吗？更新信息增加批量转换文本编码到 UTF-8 BOM 的命令增加批量分析视频的 PowerShell 命令打赏信息在线丢人，求个打赏，支持一下T_T #post-content p, #post-content, #post-content ol {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size:100%} #post-content ul {font-size:87%} img {display: block; margin-left: auto; margin-right: auto;} body {font-size:100%; background-image: url(https://img4.yesya.net/img/5/2022-11/28_Background.jpg); background-repeat: no-repeat; background-position: top left; background-attachment: fixed; background-size:cover}
最近啃了HEVC帧内编码论文和公开课，看3-tap滤镜，以及strong intra smoothing滤镜时遇到了这样的算式：这种符号看起来就很常用。其实“>>”与“<<”在计算机编程中代表向右的二进制位移操作（bitwise shift）中的算术位移（arithmetic shift），是一种为计算机优化的乘除法。二进制01左移五次，即1 << 5得10 00 00；代表了十进制下1×2⁵。二进制x >> 2就是十进制下的x ÷ 2²；由于计算机直接做了位移操作，所以可以直接编译成x86/64/arm指令集；但...只能乘除二次方的缺点也摆在那了(_ _ )三种二进制位移bitwise shift操作：算术位移 arithmetic shift适合保留正负号，也就是说最高位的bit视为正负号并进行保留（如果向左位移则无视），最接近心算口算脑算和计算（雾），所以被用来代替一部分乘除法，在视音频滤镜上常见；逻辑位移logical shift在移动后空出来的地方插入0，计算机位移序列而非数字的时候常用，在Java中用a >>> n或a <<< n可以直接指定；轮回位移/循环位移circular shift移动后把出界的数插入空出的反方向，或另一种方案是先插到新序列中，等满了再插回到原来的bit中；在密码学中常见。指令集如下x86/64指令集有movsx（带符移位），movzx（添零移位）；arm的mov, lsl逻辑左移，asl算术左移，lsr逻辑右移，asr算术右移，ror循环右移，rrx带扩展循环右移（举例，mov r19,r20,r30, lsl#4代表第30行数据往左逻辑位移4行，结果发到第20和19行里）来源/参考：wiki - 位移操作，wiki - 正负保留，位移计算器，CSDN - ARM位移指令集打赏信息在线丢人，这篇文章有点水但还是求个打赏，支持一下T_T那么没准就这样 #post-content p, #post-content, #post-content ol {font-family: "Roboto","Helvetica","Arial","sans-serif"; font-size:100%} #post-content ul {font-size:87%} img {display: block; margin-left: auto; margin-right: auto;} body {font-size:100%; background-image: url('https://img4.yesya.net/img/5/2022-04/16_Background.jpg'); background-repeat: no-repeat; background-position: top left; background-attachment: fixed; background-size:cover}