如何在 Ubuntu 中使用此命令行

如何在 Ubuntu 中使用此命令行

我以示例的形式提出我的问题...我有一个文件夹,其中包含几个子文件夹,如下所示:主文件夹==)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递归地运行以下命令:

  1. mkvmerge在每个文件及其对应的上运行*.srt
  2. 如果成功(警告或干净退出):
    • 删除输入文件。
    • 将创建的文件重命名为<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

在运行此脚本之前,您需要安装mkvmergeUbuntu 程序:

sudo apt install mkvtoolnix

1为了简单起见,我省略了错误消息。根据评论,它们似乎对脚本来说并不重要。

相关内容