1

The case: There's a program called gMKVExtractGUI which demuxes MKV videofiles. You can rightclick any MKV, and the program opens that video. It can then extract the subtitles. It doesn't work on MP4 files.

I made a batchfile with an FFmpeg command line that DOES extract subtitles from MP4 video files. The batchfile contains the following command:

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

But in order to do that, the name of the right-clicked movie needs to be 'passed on' to the batch file.

This question might SEEM like the one below, but it is not. Windows: How to add batch-script action to Right Click menu

Using Default Programs Editor from that question solves the problem of adding a command to the context menu. However, it does not solve the problem of making that batch file work on the rightclicked MP4 video-file, in question.

Questions:

  • How do I pass on the movie file name to the batch file?
  • What can I use from the quoted question to help me
  • If this approach is flawed, what would be a good way of extracting subtitles from MP4's by using the context-menu?

Thanks....

Please remember that I am relatively new, so be kind. Even though some members here have down-voting as a hobby, (especially questions they don't immediately understand), if you do that, you can at least MOTIVATE why you down-vote.

EDIT

Dear Wasif: When I just wanted to test your command in the batchscript with the variable **"%~1"**, it produced an error message: **%~1: No such file or directory** When I ran the the command line with the fixed names (rather than the variables) of video and subtitle, it DID extract the subtitle.

So, I'm not filling that variable **"%~1"**. Ideas on how to fill it? Where do I define (declare?) the variable? In the batchfile?

Here's the command line output in 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>
4
  • How do you know 0:3 is always a subtitle? You can omit -map 0:3 and it will automatically choose the first text-based subtitle stream to put into the output. Or if there are multiple input subtitles in the input you can select by language: -map 0:m:language:eng
    – llogan
    Sep 25, 2020 at 1:51
  • your 2nd sentence makes no sense. your 3rd sentence seems plausible.
    – Sara Phina
    Sep 25, 2020 at 2:07
  • Translation: if you include -map 0:3, and stream 0:3 is not a subtitle stream, then your command will fail. If you do not include -map 0:3 then ffmpeg will by default automatically choose a subtitle regardless of position. In other words, you don't necessarily need to use -map. See stream selection. tl;dr - just use ffmpeg -i input.mp4 output.srt if your input only has 1 subtitle stream.
    – llogan
    Sep 25, 2020 at 2:14
  • Oddly enough, you're right, the -map switch is not necessary. I've tested that, and it did produce the subtitle. Weird.
    – Sara Phina
    Sep 25, 2020 at 3:59

1 Answer 1

0

Yes, first change the batch file like this:

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

Then the .REG file will be:

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\""
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.