Batch file 提取字幕文件的Bat文件,然后将字幕文件硬编码为原始mkv文件

Batch file 提取字幕文件的Bat文件,然后将字幕文件硬编码为原始mkv文件,batch-file,encoding,ffmpeg,mkv,Batch File,Encoding,Ffmpeg,Mkv,我的电视可以播放闪存驱动器中的mkv文件,但无法检测字幕文件。我试图制作一个bat文件,该文件实质上从mkv文件中取出.srt文件,然后使用ffmpeg将其硬编码到mkv文件中。我正在接近,但命名工作不正常。例如,当创建字幕文件时,它将其命名为infle.mkv.srt。对文件进行编码时,文件名为infle.mkvEncoded.mkv。我正试图摆脱多余的.mkv 我对bat文件中的变量不是很在行,所以我不确定该怎么做。我将“编码”部分添加到文件名中,这样它就不会覆盖原始内嵌。除非有更好的方法,

我的电视可以播放闪存驱动器中的
mkv
文件,但无法检测字幕文件。我试图制作一个
bat
文件,该文件实质上从
mkv
文件中取出
.srt
文件,然后使用ffmpeg将其硬编码到mkv文件中。我正在接近,但命名工作不正常。例如,当创建字幕文件时,它将其命名为
infle.mkv.srt
。对文件进行编码时,文件名为
infle.mkvEncoded.mkv
。我正试图摆脱多余的.mkv

我对bat文件中的变量不是很在行,所以我不确定该怎么做。我将“编码”部分添加到文件名中,这样它就不会覆盖原始内嵌。除非有更好的方法,否则我计划只使用批量重命名实用程序来删除该部分

我的代码是:

    DO (
    MKDIR Encoded_Files
    )
    FOR /F "tokens=*" %%G IN ('dir /b *.mkv') DO (
        ffmpeg -i "%%G" -vn -an -codec:s:0.1 srt "%%G.srt"
        ffmpeg -i "%%G" -vf "subtitles=%%G.srt" "%%GConverted"
        move *"%%~nG" "Encoded_Files"
            )

预期的结果将是
infieencoded.mkv*

很抱歉格式设置不好,我不熟悉您正在寻找的堆栈溢出。无论如何,您的代码示例不完整(存在孤立的
do
);请阅读以下内容:…无需先提取字幕:
ffmpeg-i input.mkv-vf subtitles=input.mkv-c:a copy output.mkv