案例:有一个名为 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\""