Dog8MyCode
Dog8MyCode

Reputation: 1

Troubleshooting ffmpeg batch-file. mkv to mp4 conversion with subtitle hardcode

I am trying to batch convert a large number of .mkv video files to .mp4 while hard coding the subtitles included in the .mkv files. I would like to retain as much quality as possible.

I am not an adapt at using ffmpeg or writing batch files, so I have been searching online for batch files which will do what I need. I found some which successfully convert without the subtitles, and I found one that included the command for hard coding the subtitles, but that one also had excessive commands that I didn't want to delve into, so I am attempting to combined the relevant parts of the two scripts. That is where the problem is obviously coming from.

for %%a in (*.mkv) do ffmpeg -i "%%~a" -vf subtitles=%%~na.mkv copy -c:a aac -q:a 100 "%%~na.mp4"
pause

It is worth noting that the script was originally:

for %%a in (*.mkv) do ffmpeg -i "%%~a" -vcodec copy -c:a aac -q:a 100 "%%~na.mp4"
pause

But I changed it as best I could to include a section of script I found which should apparently hard code the subtitles. My lack of knowledge about how this scripting language actually functions probably just made me insert the command in the wrong place or in the wrong way. I hope that background information makes this problem easier to solve.

Expected results: convert each .mkv file in the current folder and leave the .mp4 file in the same folder.

Actual results:

[NULL @ 0000026a399f1440] Unable to find a suitable output format for 'copy': Invalid argument.

Upvotes: 0

Views: 1875

Answers (2)

Dog8MyCode
Dog8MyCode

Reputation: 1

I figured this out, thanks to comments from people here which helped me search out relevant info.

One of the main, and most embarrassing problems is that the original batch file was in Linux format and I am running on Windows.

This is the working batch file that I pieced together by editing someone else's batch file. I will leave a link to the original batch file as well.

for %%A IN (*.mkv) DO ffmpeg -i "%%A" -vf subtitles="%%A" "%%A.mp4"
pause

This is where I got the original code from: https://superuser.com/questions/470500/batch-convert-avi-files-using-ffmpeg#470510

And this is where I got information about hard coding the subtitles: https://superuser.com/questions/932730/ffmpeg-mkv-to-mp4-conversion-loses-subtitles

Thanks again :)

Upvotes: 0

llogan
llogan

Reputation: 133743

Not a batch file user, but I can comment on the ffmpeg command. Use:

for %%a in (*.mkv) do ffmpeg -i "%%~a" -vf subtitles=%%~na.mkv "%%~na.mp4"
pause
  • You can't use -vcodec copy/-c:v copy with -vf because filtering requires encoding.

  • If the input audio is already AAC then add -c:a copy to stream copy (re-mux) the audio instead of re-encoding it.

  • This will rely on the default stream selection behavior. See the -map option if you want to include/exclude certain streams such as if your input has multiple video and/or audio streams.

Upvotes: 0

Related Questions