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

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"

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


指定输入流中的音视频流

例子,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)
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"
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"
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"
04 如要要取所有流(包括字幕流等),要怎么处理呢?

如下命令:

-map 0

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

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

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

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

如下命令:

  • 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"

FFmpeg命令行map参数选择音视频流的更多相关文章

  1. FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑

    FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...

  2. FFmpeg命令行工具学习(一):查看媒体文件头信息工具ffprobe

    一.简述 ffprobe是ffmpeg命令行工具中相对简单的,此命令是用来查看媒体文件格式的工具. 二.命令格式 在命令行中输入如下格式的命令: ffprobe [文件名] 三.使用ffprobe查看 ...

  3. 命令行传递参数并排序 AS实现加法

    题目:从命令行输入参数并进行排序 1.实验准备 Integer提供了能在 int 类型和 String 类型之间互相转换的方法,还提供了处理 int 类型时非常有用的其他一些常量和方法. static ...

  4. 【VS工程设置】 编译动态库,命令行添加参数,不使用预编译头,指定该项目链接 哪种 运行库

    编译动态库 注意: 动态库: [目标文件扩展] => .dll + [配置类型] => 动态库(.dll) 静态库: [目标文件扩展] => .lib + [ 配置类型]=> ...

  5. 【Andorid】短视频拍摄SDK——Vitamio Recorder 2.0 发布(支持ffmpeg命令行)

    简介 VCamera SDK Android 版(短视频拍摄SDK)是炫一下(北京)科技有限公司推出的软件开发工具包,为Android开发者提供简单.快捷的接口,帮助开发者实现Android平台上的短 ...

  6. 在VS中向命令行添加参数的方法

    在VS中向命令行添加参数的方法 在VS中向命令行添加参数,即向main()函数传递参数的方法: 右键单击要 添加参数的工程-->属性-->配置属性-->调试,在右侧“命令参数”栏输入 ...

  7. Shell Scipt 命令行带参数,输出log

    命令行带参数,以及字符串参数放到ssh命令里可以这么放: #!/bin/bash        这行保证运行bash可以这样: ./data.sh if [ $# != 4 ]; then echo ...

  8. 记录一个 spring cloud 配置中心的坑,命令行端口参数无效,被覆盖,编码集问题无法读取文件等.

    spring cloud 配置中心 结合GIT , 可以运行时更新配置文件.发送指令让应用重新读取配置文件. 最近在测试服务器实现了一套,结果CPU 实用率暴增,使用docker compose启动 ...

  9. mysql命令行各个参数解释

    mysql命令行各个参数解释 http://blog.51yip.com/mysql/1056.html Usage: mysql [OPTIONS] [database]   //命令方式 -?, ...

随机推荐

  1. Netty中的策略者模式

    策略者模式的特点 在设计类的继承体系时,我们会刻意的把公共的部分都提取到基类中 比如先设计Person类,把人类都具有的行为放到这个Person,特有的行为设计成抽象方法,让子类具体去实现, 这样后续 ...

  2. 【ML入门】李宏毅机器学习笔记01-Learning Map

    版权声明:小博主水平有限,希望大家多多指导.本文仅代表作者本人观点,转载请联系知乎原作者——BG大龍. 目录 1 什么是机器学习? 2 机器学习的3个步骤 3 李宏毅老师的机器学习课程 4 按“模型的 ...

  3. get 请求和post请求的具体区别

    get请求是向服务器索要数据,post请求是向服务器传送数据 的,浏览器限制了get的传送量,post可以大量的把数据传给 服务器,一般情况下get请求,请求体是空的,请求只发一次 ,如果是post请 ...

  4. linux初学者-延迟及定时任务篇

    linux初学者-延迟及定时任务篇 在linux系统的学习工作中,南面会遇到需要延迟进行的任务和需要定时去完成的任务,就像手机的闹钟一样,这时候就需要用到linux系统当中的系统延迟和定时任务的设置了 ...

  5. Hadoop自学系列集(一) ---- 使用VMware安装CentOS

     1.概述 笔者的学习环境--在VMware虚拟机下安装四个CentOS系统(搭建Hadoop集群用),其中一个为Master,三个为Slave,Master作为Hadoop集群中的NameNode, ...

  6. T-SQL 恢复数据库

    USE master GO ALTER DATABASE DEMO SET SINGLE_USER GO ALTER DATABASE DEMO SET EMERGENCY GO DBCC CHECK ...

  7. "A valid provisioning profile for this executable was not found"问题

    时间:2015年8月14日 初接触iOS,这两天真机调试的时候遇到了这个问题.如图所示: 上网查后发现,解决方法大致有以下两种: 1. provisioning profile没有被找到,需要重新导入 ...

  8. sentos中bonding(网卡绑定技术)1

    一.GRUB添加kernel参数 1.# vim /etc/sysconfig/grubGRUB_CMDLINE_LINUX="......      net.ifnames=0" ...

  9. H3C模拟器单臂路由配置实例

    单臂路由:用802.1Q和子接口实现VLAN间路由 单臂路由利用trunk链路允许多个VLAN的数据帧通过而实现 网络拓扑图: RTA配置: SW1配置: PC1/2配置如图: 但是值得注意的是,在配 ...

  10. 1. 源码分析---SOFARPC可扩展的机制SPI

    这几天离职在家,正好没事可以疯狂的输出一下,本来想写DUBBO的源码解析的,但是发现写DUBBO源码的太多了,所以找一个写的不那么多的框架,所以就选中SOFARPC这个框架了. SOFARPC是蚂蚁金 ...