0:v:0 for video and 0:s:0 for subtitles) is properly isolated, you can successfully remux MKV files to MP4 without parsing failures.
Understanding the Error Source
The core of the problem lies in how FFmpeg parses the command-line arguments for input files and their associated streams. When you specify multiple inputs or multiple streams within a single input, the parser relies on commas to distinguish between different components. A common mistake is omitting the comma between the input file identifier and the stream selector, or placing it incorrectly between stream indices.
For example, if you attempt to map video from one stream and subtitles from another without proper separation, FFmpeg interprets the entire string as a single, invalid filter chain expression. The error message "Trailing garbage filter" indicates that the parser reached the end of a valid segment but found unexpected characters that do not conform to the expected syntax for stream selection or filtering.
Correct Syntax for Stream Mapping
To resolve this, you must ensure that your -map options are structured correctly. Each stream specification should follow the pattern input_index:stream_type:stream_index. Crucially, these specifications must be separated by commas. Here is the correct structure for converting an MKV to MP4 while retaining subtitles:
ffmpeg -i input.mkv -c:v copy -c:a copy -c:s mov_text -map 0:v:0 -map 0:a:0 -map 0:s:0 output.mp4
In this command, -map 0:v:0 maps the first video stream from the first input file. -map 0:a:0 maps the first audio stream, and -map 0:s:0 maps the first subtitle stream. Notice the commas separating each -map argument. If you were to write -map 0:v:0 0:s:0 without a comma, FFmpeg would fail to parse the second stream index correctly, leading to the trailing garbage error.
Handling Multiple Subtitles
If your MKV file contains multiple subtitle tracks, you need to map them individually or use wildcards carefully. For instance, to map all subtitle streams, you might use -map 0:s?. However, mixing specific stream mappings with wildcard mappings in the same command requires careful ordering and comma separation. Always verify the stream indices using the diagnostic step below before constructing your final command.
Diagnostic Step: Inspecting Stream Indices
Before attempting conversion, it is essential to know exactly which streams exist in your source MKV file. Incorrect stream indices are a frequent cause of mapping errors. Use the following command to inspect the file:
ffprobe -i input.mkv -show_streams -select_streams s
This command filters the output to show only subtitle streams (-select_streams s). Look for the index field in the output. If you see multiple entries, note their indices (e.g., 0, 1, 2). You must then reference these exact indices in your -map commands. For example, if the second subtitle track has an index of 1, you would use -map 0:s:1.
Failure to match the actual stream index in the file with the index specified in your command will result in either a "Stream not found" error or, in some complex mapping scenarios, parsing errors that manifest as trailing garbage due to misinterpreted arguments.
Common Pitfalls and Fixes
- Missing Commas: Ensure every
-mapoption is separated by a comma.-map 0:v:0,-map 0:s:0is correct;-map 0:v:0 -map 0:s:0is also correct, but-map 0:v:0 0:s:0is incorrect. - Incorrect Input Indexing: If you have multiple input files, remember that the input index starts at 0. The first
-iis 0, the second is 1, and so on. Using1:s:0when there is no second input will cause errors. - Subtitle Codec Compatibility: MP4 does not support all subtitle formats natively. While MKV often uses SRT or ASS/SSP, MP4 prefers MOV_TEXT or EIA-608. Using
-c:s mov_textensures compatibility, but if you try to copy a format like ASS directly into MP4 without conversion, it may lead to playback issues or encoding errors depending on the FFmpeg build.
Verifying the Output
After running the corrected command, verify that the subtitles are present in the output file. Use ffprobe again on the output MP4 file to confirm that subtitle streams are listed and correctly mapped. This step ensures that the conversion process did not drop any data during the remuxing operation.
Frequently Asked Questions
Why does my MP4 play without subtitles even after successful conversion?
This usually happens because the subtitle codec used in the MKV (like ASS or SSA) is not supported by standard MP4 containers or players. You must convert the subtitle stream to mov_text using the -c:s mov_text flag during the ffmpeg command to ensure broad compatibility.
Can I extract subtitles from MKV to a separate SRT file instead of embedding them?
Yes, you can extract subtitles separately using ffmpeg -i input.mkv -map 0:s:0 output.srt. This creates a standalone text file rather than embedding the stream into the video container, which is useful for editing or translation purposes.
What if I get a 'Stream #0:s:0' not found error?
This indicates that the stream index you specified does not exist in the input file. Use ffprobe to list the actual stream indices available in your MKV file and adjust your -map commands to match those indices accurately.
Does this error occur with other media formats besides MKV?
No, this error is specific to the command-line syntax parsing in FFmpeg. It can occur with any input format (MP4, AVI, WEBM) if the stream mapping syntax is malformed, particularly when dealing with multiple streams of different types.
How do I handle multiple audio tracks along with subtitles?
You simply add more -map entries for each audio stream, separated by commas. For example, -map 0:a:0 -map 0:a:1 -map 0:s:0 will map two audio tracks and one subtitle track from the first input file.