“无损提取音频”经常被宽泛使用。更准确的方法叫 Stream copy:把视频容器中的编码音频数据包复制到音频容器,不先解码再重新编码。
Stream copy 保留什么
视频文件通常是一个容器,内部包含独立的视频、音频、字幕、章节和元数据流。音频可能是 AAC、Opus、Vorbis、MP3、AC-3、FLAC、PCM 或其他编码。Stream copy 会选择一条音频流并原样移动数据包,编码、码率行为、声道布局和源文件已经拥有的质量都不会改变。
这样可以避免二次编码损失。如果源 AAC 已经丢弃了信息,直接复制无法恢复,但也不会继续丢弃。它更像把文件从一个文件夹移动到另一个文件夹,而不是重新录制一遍。
为什么输出是 MKA
扩展名应该描述容器,而不是表达对编码的愿望。把复制出来的 AAC、Opus 或 AC-3 数据包改名为 .mp3 并不会完成 MP3 转换。把任意编码写进 .m4a 也可能失败,因为这种容器不接受所有编码。
Matroska Audio(.mka)支持的音频流范围很广,因此适合作为通用浏览器提取目标。VLC、FFmpeg 和许多编辑器都支持它,但手机内置播放器和简单网页音频组件的支持不够稳定,所以交付时仍可能需要 MP3 或 M4A。
速度、裁剪和多音轨
Stream copy 通常远快于转码,因为 CPU 不需要重建采样并再次压缩。大输入仍需要读取,大输出仍需要写入,所以不会完全瞬间完成。
编码音频由数据包或帧组成。直接复制裁剪必须保留这些单位,因此切点可能落在设置时间附近,而不是完全重合。需要精确片段时,重新编码可以围绕边界生成新采样,通常更合适。
视频还可能有多条音轨,例如不同语言、评论音轨,或麦克风与系统声音。简单的第一版工具通常提取第一条音轨。高级音轨选择应该检查流元数据,而不是根据容器扩展名猜测。
什么时候用哪种方法
需要保留源编码、快速处理或制作后续工作的母版时,使用 Stream copy。编辑器需要 PCM 时选 WAV;广泛分享选 MP3;现代高效播放选 M4A。“无损”应准确表示没有增加新编码,而不是承诺源文件本身无损,也不代表所有播放器都兼容输出。
本文如何对应本站实现
当前原始音轨模式映射第一条音频流,并让 FFmpeg 直接复制音频流,而不是先解码再编码。它刻意写入 MKA 容器,因为本站无法假定复制出来的流一定符合 MP3 或 M4A 的要求。当前还没有提供音轨选择:包含多语言或评论音轨的视频,需要使用可以检查并明确选择音轨的工具。这一产品边界也是本文没有把原始音轨描述成通用存档或通用兼容方案的原因。