如何在基于 Linux 的系统中交换 MKV 中的第一个和第二个音频流?

如何在基于 Linux 的系统中交换 MKV 中的第一个和第二个音频流?

我使用的是 plex。Plex 似乎忽略了默认音频流(在 Roku 上),而是只使用第一个音频流。这是我使用 mkvpropedit 进行的测试。

由于 Plex 目前不支持更改 LAN 外客户端的音频源,我想更改一些文件,以便当前的第二个音频源成为第一个?

在基于 Linux 的系统(例如 Ubuntu)上交换 MKV 中的音频流的最佳方法是什么?

答案1

FFmpeg,这应该相当简单。确保从他们的下载页面下载静态版本,不要使用 Ubuntu 存储库版本,因为它相当旧。

命令如下:

ffmpeg -i input.mkv -map 0:v:0 -map 0:a:1 -map 0:a:0 -c copy output.mkv

以下是-map做:

  • 冒号前的第一部分是输入 ID。由于我们只有一个输入,所以它是0
  • 第二部分指定流的类型,video 或audio。这是可选的,但最好也指定类型,以防视频和音频流不能正确复用。
  • 第三部分是输入流的ID。0将是第一个,和1第二个,即第一个视频流和第二个和第一个音频流。
  • 选项的顺序-map决定了输出文件中流的顺序。

这意味着我们将视频比特流作为第一个流,然后采用第二个音频流,然后是第一个 - 本质上,我们正在交换音频流。

使用该-c copy选项可确保比特流被复制而不是重新编码。

举几个例子如何使用该-map选项可以在 FFmpeg wiki 上找到。

答案2

只需使用 mkvtool 即可避免重新打包、重新编码......浪费时间。

mkvpropedit -v movie.mkv -v --edit track:2 --set track-number=3 --edit track:3 --set track-number=2

这应该足以交换流。

答案3

如果您想合并输入文件(视频+音频)并设置默认音轨。

输入文件:

1.mkv // video + Japanese audio
2.mka // English audio
3.mka // Russian audio

假设您想合并所有这些文件并将英语曲目设置为默认曲目。

默认意味着 - 首先(如果大多数播放器忽略元数据,则默认为)。

ffmpeg -i 1.mkv -i 2.mka -i 3.mka -map 0:v -map 1:a -map 0:a -map 2:a -c:v copy -shortest out.mkv

-map 0:v- 获取第一个输入文件,从中获取视频并将其作为输出中的第一个视频

-map 1:a- 获取第二个输入文件,从中获取音频并将其作为输出中的第一个音频

-map 0:a- 获取第一个输入文件,从中获取音频并将其作为第二个音频放入输出中

-map 2:a- 获取第三个输入文件,从中获取音频并将其作为第三个音频放入输出中

正如你所见,-map事情的顺序!

-c:v copy- 复制视频

-shortest- 如果音频/视频长度不同,则按最短的长度剪切其他

相关内容