我使用的是 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
。 - 第二部分指定流的类型,
v
ideo 或a
udio。这是可选的,但最好也指定类型,以防视频和音频流不能正确复用。 - 第三部分是输入流的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
- 如果音频/视频长度不同,则按最短的长度剪切其他