FFmpeg命令行map参数选择音视频流

举报
小林coding 发表于 2021/06/03 23:06:12 2021/06/03
【摘要】 FFmpeg命令行map参数选择音视频流 介绍 -map参数告诉ffmpeg要从输入源中选择/拷贝哪个stream流到输出,可以从输入源中选择多个音视频流作为输出。 不加-map参数,ffmpeg默认从输入源中的视频流和音频流各选择一个流。 输出流/文件的stream顺序取决于在命令行中-map的参数顺序。 默认情况 缺省情况下(没有使用-map...

FFmpeg命令行map参数选择音视频流


介绍

  • -map参数告诉ffmpeg要从输入源中选择/拷贝哪个stream流到输出,可以从输入源中选择多个音视频流作为输出。

  • 不加-map参数,ffmpeg默认从输入源中的视频流和音频流各选择一个流。

  • 输出流/文件的stream顺序取决于在命令行中-map的参数顺序。


默认情况

缺省情况下(没有使用-map参数),比如:

ffmpeg -i 0001.ts -c copy -f mpegts  udp://192.168.1.100&pkt_size=1316

  
 
  • 1

FFmpeg会默认从所有输入流中找到[最高质量的一个视频输入流]和[最高质量的一个音频输入流],并拷贝流输出udp输出流。其他流实质上会被丢弃。

如果使用map命令显示与上面命令相同的操作,它的命令如下:

ffmpeg -i 0001.ts \ -map single_highest_quality_video_stream_from_all_inputs \ -map single_highest_quality_audio_stream_from_all_inputs \ -c copy -f mpegts  "udp://192.168.1.100:1234?pkt_size=1316"

  
 
  • 1
  • 2
  • 3
  • 4

此处输出将有两个流,一个音频,一个视频。


指定输入流中的音视频流

例子,0001.ts是个单视频流,多音频流的信息如下:

  1. Stream #0:0 是视频流
  2. Stream #0:1 ~ Stream #0:3 是音频流
  3. Stream #0:4 是字幕流
Input #0, mpegts, from '0001.ts':
  Duration: 00:04:46.23, start: 57251.747478, bitrate: 5861 kb/s
  Program 34 Metadata: service_name : Test TV HD service_provider: TV5 Stream #0:0[0x53d]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt470bg, top first), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 50 tbr, 90k tbn, 50 tbc Stream #0:1[0x53e](THA): Audio: aac_latm (HE-AACv2) ([17][0][0][0] / 0x0011), 48000 Hz, stereo, fltp Stream #0:2[0x53f](QAA): Audio: aac_latm (HE-AACv2) ([17][0][0][0] / 0x0011), 48000 Hz, stereo, fltp Stream #0:3[0x540](NAR): Audio: aac_latm (LC) ([17][0][0][0] / 0x0011), 48000 Hz, stereo, fltp Stream #0:4[0x541](tha): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
01 如要要指定取多视频和多音频流中的一路流,要怎么处理呢?

如下命令:

-map 0:0 -map 0:2

选择输入源中Stream #0:0的视频流,Stream #0:2的音频流,拷贝选择的音视频流输出到udp输出流

ffmpeg -i 0001.ts -map 0:0 -map 0:2 -c copy -f mpegts  "udp://192.168.1.100:1234?pkt_size=1316"

  
 
  • 1
02 如要要指定取单路视频流和多路音频流,要怎么处理呢?

如下命令:

-map 0:0 -map 0:1 -map 0:2 -map 0:3

选择输入源中Stream #0:0的视频流,Stream #0:0Stream #0:1Stream #0:3的三路音频流,拷贝选择的音视频流输出到udp输出流

ffmpeg -i 0001.ts -map 0:0 -map 0:1 -map 0:2 -map 0:3 \ -c copy -f mpegts  "udp://192.168.1.100:1234?pkt_size=1316"

  
 
  • 1
  • 2
03 如要要取所有的视频和音频流,要怎么处理呢?

如下命令:

-map 0:a -map 0:v

选择输入源中所有视频流和所有的音频,拷贝所有的音视频流输出到udp流中

ffmpeg -i 0001.ts -map 0:a -map 0:v -c copy -f mpegts  "udp://192.168.1.100:1234?pkt_size=1316"

  
 
  • 1
04 如要要取所有流(包括字幕流等),要怎么处理呢?

如下命令:

-map 0

选择输入源中所有的流,拷贝所有的流输出到udp流中

ffmpeg -i 0001.ts -map 0 -c copy -f mpegts  "udp://192.168.1.100:1234?pkt_size=1316"

  
 
  • 1

指定输入流中的多音视频流编码格式

有时处理输入源中的多视频和多音频流时,想针对不同音视频流做不同的编码处理

如下命令:

  • Stream #0:0视频流拷贝复制
  • Stream #0:1Stream #0:2音频流拷贝复制
  • Stream #0:2音频流编码为mp3格式(128kbps)
  • Stream #0:4字幕流拷贝复制
fffmpeg -i 0001.ts -map 0:0 -map 0:1 -map 0:2 -map 0:3 -map 0:4 \ - c:v copy \ - c:a:0 copy \ - c:a:1 copy \ - c:a:2 libmp3lame -b:a:2 128k \ - c:s copy \ -f mpegts  "udp://192.168.1.100:1234?pkt_size=1316"

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

文章来源: blog.csdn.net,作者:小林coding,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_34827674/article/details/99688877

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。