Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
319 views
in Technique[技术] by (71.8m points)

How to remove one track from video file using ffmpeg?

How to remove only one track (not all) from video file container (.vob or .mkv) using ffmpeg?

I know I can just copy video (-c:v copy -an) and specific audio track from container into two separated files and then join them.

But is there an easier way? Can I just remove specific audio track from container? ffmpeg command?

question from:https://stackoverflow.com/questions/38161697/how-to-remove-one-track-from-video-file-using-ffmpeg

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The most efficient method is to use negative mapping in the -map option to exclude specific stream(s) ("tracks") while keeping all other streams.

Remove a specific audio stream / track

ffmpeg -i input -map 0 -map -0:a:2 -c copy output
  • -map 0 selects all streams from the input.
  • -map -0:a:2 then deselects audio stream 3. The stream index starts counting from 0, so audio stream 10 would be 0:a:9.

Remove all audio streams / tracks

ffmpeg -i input -map 0 -map -0:a -c copy output
  • -map 0 selects all streams from the input.
  • -map -0:a then deselects all audio streams from the input.

Remove specific audio streams / tracks

Keep everything except audio streams #4 (at offset 3) and #7 (at offset 6):

ffmpeg -i input -map 0 -map -0:a:3 -map -0:a:6 -c copy output

Remove all subtitles and data

ffmpeg -i input -map 0 -map -0:s -map -0:d -c copy output

Only include video and audio

This example does not need to use any negative mapping.

ffmpeg -i input -map 0:v -map 0:a -c copy output

Removing other stream / track types

If you want to remove other stream types you can use the appropriate stream specifier.

  • v - video, such as -map -0:v
  • a - audio, such as -map -0:a (as shown above)
  • s - subtitles, such as -map -0:s
  • d - data, such as -map -0:d
  • t - attachments, such as -map -0:t

Extract or remove a specific audio channel

Using a stereo input and channelsplit filter. Example to get the right channel only and output a mono audio file:

ffmpeg -i stereo.wav -filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FR[right]" -map "[right]" front_right.wav
  • channel_layout is the channel layout of the input stream. The default is stereo.

  • channels lists the channels to be extracted as separate output streams. The default is all which extracts each input channel as a separate, individual stream.

  • See ffmpeg -layouts for a list of accepted channel layouts (for channel_layout option) and channel names (for channels option).

  • See FFmpeg Wiki: Audio Channels for more examples.

More info


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...