ffmpeg -map 是什么意思?


author: hjjdebug

date: 2025年 12月 10日 星期三 17:17:44 CST

descrip: ffmpeg -map 是什么意思?


  1. -map 选项: 是每一个文件对应的选项,用于指定输出流对应的输入流.
    用ffmpeg -h long |grep map
    可以看到帮助:
cpp 复制代码
Advanced per-file options:
-map [-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]]  set input stream mapping

这个帮助信息,来源于ffmpeg_opt.c 中有一项map 的描述.

cpp 复制代码
    { "map", HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_map },
        "set input stream mapping",
        "[-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]]" },

我们跟踪一下函数执行代码 opt_map, 可知道它到底干了什么.

从map 的value 中可得到file_index, 可得到stream_index, 把这个流或这些流都添加到optctx中,供以后打开输出文件时使用

  1. 举例
    例如: ffmpeg 执行如下命令:
cpp 复制代码
$ ffmpeg -i 1.ts -filter_complex "[0]split[out1][out2]" -map "[out1]" output1.ts -map "[out2]" output2.ts -v debug -y

打开output1.ts 有选项 -map "out1", "[" 说明数据来源是filter

打开输出文件时,会分析输出文件的选项, 见map选项 write_option 时要执行

static int opt_map(void* optctx, const char* opt, const char* arg)

其中optctx 就是OptionsContext 对象, OptionsContext* o = (OptionsContext *)optctx;

opt="map",

arg="out1"

该函数执行后要在o->stream_maps 上 重新分配出一个map 对象. 上面写上:

cpp 复制代码
p *m
$7 = {
  disabled = 0,
  mp_file_index = 0,
  stream_index = 0,
  linklabel = 0x51b340 "out1"
}

在打开文件时会用到OptionsContext o,

ret = open_file(&o, g->arg); //g->arg 就是output1.ts

具体代码还是挺复杂的,看看它的log输出吧. (verbose)

cpp 复制代码
Opening an output file: output1.ts.
20251017 16:47:49.906 [out#0/mpegts @ 0x4f63c0] Adding streams from explicit maps...
20251017 16:49:45.213 [out#0/mpegts @ 0x4f63c0] Creating output stream from an explicitly mapped complex filtergraph 0, output [out1]
20251017 16:51:28.857 [vost#0:0/mpeg2video @ 0x6c9bc0] Created video stream from complex filtergraph 0:[split]
相关推荐
程序员老陆4 小时前
说一说FFmpeg6在Linux平台的编译
linux·运维·服务器·ffmpeg
用户518186005665 小时前
FFmpeg 剪辑:为什么 `-c copy` 往往做不到帧准确剪切
ffmpeg
福大大架构师每日一题6 小时前
mediamtx v1.19.3正式发布:认证安全、WebRTC跨域、MoQ稳定性、RTSP与HLS全面升级
安全·ffmpeg·webrtc
cpp_learner1 天前
FFmpeg 解复用全流程解析
ffmpeg
程序员老陆1 天前
FFmpeg时间基相关函数大杂烩
ffmpeg·时间基·timebase
程序员老陆2 天前
FFmpeg libswresample 模块的关键函数swr_convert 到底在干嘛?
ffmpeg·音视频·格式转换·音频重采样
海兰2 天前
ffmpeg-wasm 完整安装指南(Ubuntu 24.04)
ubuntu·ffmpeg·wasm
≮傷£≯√3 天前
QT配置FFmpeg
开发语言·qt·ffmpeg
lingran__3 天前
C++ STL 关联式容器万字详解:set、multiset、map、multimap|接口用法 + 易错点 + 力扣真题实战
开发语言·c++·stl·set·map·红黑树·关联式容器
Everbrilliant893 天前
Android FFmpeg 实战:从基础到播放器的完整技术解析
android·ffmpeg·ffmepg实战·音视频同步实现·ffmpegpractices·ffmpegpractice·opengl 视频渲染