如何在上下文菜单上使用批处理文件并“传递”右键单击的文件?

如何在上下文菜单上使用批处理文件并“传递”右键单击的文件?

案例:有一个名为 gMKVExtractGUI 的程序可以对 MKV 视频文件进行解复用。您可以右键单击任何 MKV,该程序就会打开该视频。然后它可以提取字幕。它不适用于 MP4 文件。

我使用 FFmpeg 命令行创建了一个批处理文件,它可以从 MP4 视频文件中提取字幕。该批处理文件包含以下命令:

ffmpeg -i Film(20xx).mp4 -map 0:3 Film(20xx).srt

但为了做到这一点,需要将右键单击的电影的名称“传递”到批处理文件。

这个问题可能看起来像下面的问题,但事实并非如此。 Windows:如何将批处理脚本操作添加到右键单击菜单

使用默认程序编辑器这个问题解决了向上下文菜单添加命令的问题。然而,它不是解决使该批处理文件在右键单击 MP4 视频文件,有问题。

问题:

  • 如何将电影文件名传递给批处理文件?
  • 我可以从引用的问题中得到什么来帮助我
  • 如果这种方法有缺陷,那么使用上下文菜单从 MP4 中提取字幕的好方法是什么?

谢谢....

请记住,我相对较新,所以请保持友善。尽管这里的一些成员以投反对票为爱好(尤其是他们不能立即理解的问题),但如果你这样做,你至少可以说明你投反对票的原因。

编辑

亲爱的 Wasif:当我只是想用变量在批处理脚本中测试您的命令时**"%~1"**,它产生了一条错误消息: **%~1: No such file or directory** 当我使用视频和字幕的固定名称(而不是变量)运行命令行时,它确实提取了字幕。

所以,我没有填充该变量**"%~1"**。关于如何填充它的想法?我在哪里定义(声明?)变量?在批处理文件中吗?

这是 DOS 中的命令行输出:

    e:\subbedMP4> b:\Programs\ffmpeg.exe -i "%~1" -map 0:3 "%~dpn1Film(20xx).srt"
    ffmpeg version git-2020-08-31-4a11a6f Copyright (c) 2000-2020 the FFmpeg developers
      built with gcc 10.2.1 (GCC) 20200805
      configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --enable-librav1e --enable-libsvtav1 --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
      libavutil      56. 58.100 / 56. 58.100
      libavcodec     58.101.101 / 58.101.101
      libavformat    58. 51.101 / 58. 51.101
      libavdevice    58. 11.101 / 58. 11.101
      libavfilter     7. 87.100 /  7. 87.100
      libswscale      5.  8.100 /  5.  8.100
      libswresample   3.  8.100 /  3.  8.100
      libpostproc    55.  8.100 / 55.  8.100
    %~1: No such file or directory
    
    e:\subbedMP4>

答案1

是的,首先像这样更改批处理文件:

ffmpeg -i "%~1" -map 0:3 "%~dpn1Film(20xx).srt"

那么 .REG 文件将是:

Windows Registry Editor 5.00

[HKEY_CLASSES_ROOT\.mp4]
"MUIVerb"="Extract subtitles"
"Position"="Bottom"

[HKEY_CLASSES_ROOT\.mp4\command]
@="\"FULL PATH OF THE BATCH SCRIPT\" \"%1\""

相关内容