批量转换 .mkv 到 .mp4

Iam*_*ere 10 vlc-media-player mp4 batch video-conversion matroska

我想使用 VLC 将文件夹中的所有 .mkv 文件批量转换为 .mp4。

它应该使用原始视频/音频流,如果可能的话,使用 .mkv 的 .ass 字幕。这不是真正的转换,更像是更换容器——我的播放器无法读取 MKV 视频。

如果我手动(手动)进行此转换,它会起作用,但我有很多 MKV 文件要转换,因此需要很多时间。

我在互联网上搜索了一个批处理文件来做到这一点,我找到了一些。我试图按照我的意愿修改它们,但我尝试的所有尝试都创建了一个不包含音频流的 .mp4 文件,并且我的所有媒体播放器也无法在 PC 上呈现视频流。

那么有人可以告诉我批次的外观如何,以便它与原始视频和音频流(可能还有 .ass 字幕)一起使用?

slh*_*hck 13

mkvtomp4

看起来mkvtomp4是你想要的吗?

使用 mpeg4ip 或 GPAC 的 MP4Box、mkvtoolnix 和 ffmpeg将麻烦的 mkv 文件转换为 mp4。转换不会重新编码视频,只有在不使用 AAC 编解码器的情况下才重新编码音频(可以使用 --audio-codec 覆盖此行为)。

您可以在 Google Code 页面上下载 Windows 和 Linux 版本。不过,您将需要额外的软件。

检查站点以获取适用于 Windows 或 Linux 的下载。在 OS X 上,只有brew install mkvtoolnix mp4box当你有Homebrew时才需要。

但这不会复制您的字幕。你需要一个额外的步骤。


FFmpeg 批处理

如果 mkvtomp4 不适合您,一个简单的FFmpeg批处理文件也可以。

安装 ffmpeg(例如通过Homebrew或来自https://ffmpeg.org/download.html 的选项)。然后,只需调用:

ffmpeg -i input.mkv -c:v copy -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)

这将创建一个有效的 MP4 容器而无需重新编码。根据需要和操作系统可用的文件循环。但是,此批次不会复制字幕。

在 *nix 中,您可以执行以下操作。只需创建一个文件convert.sh

#!/bin/bash
find /path/to/input/folder -iname '*.mkv' -print0 | while read -d '' -r file; do
    ffmpeg -i "$file" -c:v copy -c:a copy ${file%%.mkv}.mp4
done
Run Code Online (Sandbox Code Playgroud)

在此处替换视频文件夹的路径。使用 使其可执行chmod +x convert.sh,然后使用 运行它./convert.sh

在 Windows 中,您可能需要两个批处理文件(来自此处的无耻插件),其中一个是startconvert.bat

for %%i IN (*.mkv) DO (convert-to-mp4.bat "%%i") 
pause
Run Code Online (Sandbox Code Playgroud)

还有一个执行转换的:

IF EXIST "%1.mp4" GOTO exit

@echo Conversion for %1 started on %DATE% %TIME% 
ffmpeg -i %1 -c:v copy -c:a copy %1.mp4

:exit 
@echo %1.mp4 already exists
Run Code Online (Sandbox Code Playgroud)

将两者都保存在视频文件夹中。只需startconvert.bat从要从中开始转换的文件夹运行即可。


字幕

如果您想添加字幕,如果以下方法不适合您,您可能需要手动操作:

ffmpeg -i input.mkv -c:a copy -c:v copy -map 0 output.mp4
Run Code Online (Sandbox Code Playgroud)

要提取字幕,请使用:

mkvextract tracks input.mkv 3:subtitles.srt
Run Code Online (Sandbox Code Playgroud)

这是假设您的文件确实包含轨道 ID 号 3 的字幕,并且它们可以导出为 SRT 格式。要检查文件是否真的包含第 3 轨的字幕,请使用mkvmerge -i input.mkv.

然后,使用 MP4Box 将字幕重新添加到 MP4 文件中。

mp4box -add input.mp4 -add subtitles.srt -new output.mp4
Run Code Online (Sandbox Code Playgroud)