我正在使用 ffmpeg 将 AAC 音频从 TS(传输流)容器格式转换为 M4A 容器格式。我的目的是(或曾经是)在不重新编码的情况下执行此操作。但是似乎有两种方法可以让 ffmpeg 执行此操作,从而产生不同的结果。
源文件扩展名为 [.ts],为 VBR,整体速度为 162 kb/s,大小为 8.5 MB
“直接”使用... ffmpeg -i infile.ts outputfile.m4a ..生成一个 [.m4a] AAC 文件,使用 VBR,162 kb/s,大小为 7.1 MB 我认为这种尺寸的减小是由于 TS 格式的传输错误容忍数据已被“过滤掉”造成的。
但是当我包含参数[-codec copy]时... ffmpeg -i infile.ts -codec copy outfile.m4a ...这会生成一个带有 CBR、93.3 kb/s、大小 5.1 MB 的 AAC [.m4a] 文件,我猜这意味着音频已经从 VBR 重新编码为 CBR,大概在重新(有损)压缩过程中丢失了一些音频数据(除非这种 BR 转换比这更聪明)。
我对上述内容的理解正确吗?“直接”(无 -codec 参数)ffmpeg 运行的结果是否可能更好地(或完全)保留了原始质量?或者第二次 ffmpeg 运行的 CBR 结果是否可能具有相同(或难以区分)的音频质量?
答案1
“直接”使用... ffmpeg -i infile.ts outputfile.m4a
,即省略-codec copy
,导致(编码)媒体首先被解码,然后被(重新)编码(假设ffmpeg对目标文件/编码类型的默认设置,例如m4a)。
为了确保重新包装发生(无解码/重新编码),-codec copy
或等效地-c copy
(或根据个人要求,为音频和视频提供单独的等效物)是必不可少的。
同样的问题在堆栈溢出