我需要将 M2TS(H264-AC3)中的杜比 5.1 环绕声演示转换为 WebM(VP9-Opus)
我在这里找到了一个两步过程: https://gist.github.com/vielhuber/cf918eed2b5cc9eaa63f
第一个命令成功渲染了 5.1 环绕声,并且声像响亮且正确:
ffmpeg -i dolbyTest-Win10-Final.m2ts -vcodec libx264 -crf 20 -acodec ac3 -vf "yadif" test.mp4
不幸的是,虽然第二步成功运行并创建了响亮的音频信号,但它破坏了前/后声像:
ffmpeg -i test.mp4 -af "channelmap=channel_layout=5.1" test2.webm
我尝试了几种不同的设置来纠正第二步中的错误,但前/后平移总是错误的。
是否有更好的设置/开关可以用于第二步以获得正确的扬声器平移?
参考文献:
https://scribbleghost.net/2022/12/29/convert-audio-to-opus-with-ffmpeg/
https://ffmpeg.org/ffmpeg.html#Advanced-Audio-options
注意:如果您愿意,欢迎您查看我的编辑。现在问题似乎已经解决了一半,我只是想让这个问题更容易理解。
只是为了澄清一下,一般在 FFmpeg 中我们总是说我们想要什么而不是我们有什么,除非我们指定输入文件。
另外,在第二个命令中,您可以使用
channelmap
它来明确重新映射音频通道。但这不是必需的,因为音频已经是 5.1。相反,我们使用-map
( mapping )。以下是要点:
ffmpeg
启动 FFmpeg。
-i input.m2ts
指定输入(源)文件。 在本例中为蓝光文件。
-map 0:v:0
虽然不常见,但有些视频文件可以有多个视频轨道。由于我们使用映射,因此我们需要明确告诉 FFmpeg 从输入文件中选择第一个视频流。
0
指的是输入文件(在本例中是第一个文件input.m2ts
)。v:0
指定该文件中的第一个视频流。请记住,在大多数媒体播放器中,流与轨道相同。-map 0:a:0
由于视频文件可以有多个音轨,并且我们使用映射,因此我们需要明确告诉 FFmpeg 从输入文件中选择第一个音频流。当然,这是假设您只有一个音轨。
0
指的是输入文件(在本例中是第一个文件input.m2ts
)。a:0
指定该文件中的第一个音频流。如果有多个音频流,并且您想要所有音频流,则可以使用-map 0:a
,但由于音频流可能具有不同的编解码器和通道,因此这很快就会变得复杂。-c:v libvpx-vp9
这会将输出视频编解码器设置为 libvpx-vp9,这是用于编码 WebM 文件的 VP9 视频编解码器。
-crf 20 -b:v 0
从您的命令来看,您似乎想要使用恒定质量。如果您只关心视觉质量,那么这很好。在这种情况下,您还必须设置
-b:v 0
。如果没有,您将改用约束质量模式 (CQ)。CRF 从 0 到 63,其中 0 为最佳,63 为最差。-c:a libopus
将音频编解码器设置为 libopus,这是用于编码 Opus 音频的音频编解码器。
-b:a 265k
由于您想要以“最小的音频质量下降”来转换音频,您可以将比特率设置为 256 kbps(xiph.org建议在 Oups 中将 5.1 音频设置为该比特率),或者您可以选择更高的音频比特率,例如 450 kbps(或最高 510 kbps),但这不一定会产生可听见的差异。
-ac 6
这会将音频通道数设置为 6。5.1 环绕声有 6 个通道。
另外,由于字幕在 m2ts 文件中很常见,您可以选择使用 省略它们
-sn
或使用 包含它们-map 0:s
。我已将其从示例代码中省略。