我以示例的形式提出我的问题...我有一个文件夹,其中包含几个子文件夹,如下所示:主文件夹==)Got、Vikings 等。每个文件夹中都有视频及其对应的 srt 文件。在 Windows 环境中,在主文件夹中运行此命令使 mkvmerge 混合此目录中的整个视频和对应的 srt 文件。
For /R %%A IN (*.mkv *.mp4) Do (
"C:/Program Files/MKVToolNix\mkvmerge.exe" -o "%%~dpnxAtemp" "%%~fA" "%%~dpnA.srt" && if errorlevel 2 (
echo errors generated during remuxing, original file not deleted
) else if errorlevel 1 (
del /f "%%~fA" "%%~dpnA.srt" echo Warnings generated during remuxing to "%%~A", original file deleted
) else (
del /f "%%~fA" "%%~dpnA.srt" echo Successfully remuxed to "%%~A", original file deleted
) && for /R %%A IN (*.mkvtemp *.mp4temp) do ren "%%~fA" "%**.mkv"
)
Pause
答案1
代码包含一些错误,但我的理解如下:1
*.mkv
对所有并*.mp4
递归地运行以下命令:
mkvmerge
在每个文件及其对应的上运行*.srt
。- 如果成功(警告或干净退出):
- 删除输入文件。
- 将创建的文件重命名为
<original_name>.mkv
。
这可以使用 Ubuntu 上的以下脚本来完成。
请自行承担使用风险,我尚未完全测试过!
#!/bin/bash
find . -name \*.mp4 -o -name \*.mkv | while read orig_filename
do
filename="${orig_filename::-4}" # crop the extension
mkvmerge -o "$orig_filename.tmp" "$orig_filename" "$filename.srt"
if [ $? -le 1 ] # warning or clean exit
then
rm "$orig_filename" "$filename.srt"
mv "$orig_filename.tmp" "$filename.mkv"
fi
done
在运行此脚本之前,您需要安装mkvmerge
Ubuntu 程序:
sudo apt install mkvtoolnix
1为了简单起见,我省略了错误消息。根据评论,它们似乎对脚本来说并不重要。