ffmpeg 录制和播出复用流(多节目流)

2023-11-16

ffmpeg 录制和播出复用流(多节目流)
此处的播放还是录制的意思,
录制是存成文件,播放是用udp的协议发送出去, 故此处播放的含义还是录制的意思

复用流录制:
假如有一个复用流,包含4个节目,如下:
ffmpeg  -probesize 10000000 -analyzeduration 5000000  -i multiVideo.ts
Program 1
  Stream #0:0[0x259]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 24 fps, 24 tbr, 90k tbn, 48 tbc
  Stream #0:1[0x321](eng): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 384 kb/s

Program 2
  Stream #0:5[0x25a]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
  Stream #0:4[0x322](eng): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 384 kb/s
Program 3
  Stream #0:6[0x25b]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
  Stream #0:2[0x323](eng): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 384 kb/s
Program 4
  Stream #0:7[0x25c]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
  Stream #0:3[0x324](eng): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 384 kb/s

看到了吗? 流索引号顺序是有点乱的,这会导致流影射时需要更高的技巧! 简单的敲不仔细指定流顺序可能达不到你的要求.
完整的录制命令:
ffmpeg -y -i multiVideo.ts -map 0:p:1 -map 0:p:2 -map 0:p:3 -map 0:p:4  -c copy -program title=A1:st=0:st=1 -program title=A2:st=2:st=3 -program title=A3:st=4:st=5 -program title=A4:st=6:st=7 t1.ts
这是什么含义呢?
用map 来选择流,包括音频流,视频流,字幕流.
-map 0:v        文件0的视频流
-map 0:a        文件0的音频流            
-map 0:2        文件0的第3个流, 索引号,指定一个流,但有个缺点,udp流可能这次的索引与下次的索引不一致
-map 0:p:1        文件0的节目号为1的所有流, 这个指定了某节目的所有流,一般是2个,小索引号的流会排前面
-map 0:i:0x100    文件0的流ID 为0x100的流, 这个最细致,指定了具体的一个流
既然这些流想全部输出,可以简写为-map 0 表示第一个文件流全部选择, 但是它跟一个个描述出来
-map 0:p:1 -map 0:p:2 -map 0:p:3 -map 0:p:4 影射的流顺序是不一样的,为保证正确性,还是写多点
顺序控制性更好, 更细致的就是直接指定流PID了.

用program 来指定输出哪些节目
-program [title=title:][program_num=program_num:]st=stream[:st=stream...] (output)
    Creates a program with the specified title, program_num and adds the specified stream(s) to it.
这里的st指定的是输入流索引,看输入流是怎样排布的.(所以每一个节目影射顺序更容易控制,而-map 0这个默认顺序就可能有些乱)
如果录制想包含多个节目,必需用-program 选项指定,并且要加上title,st说明,否则达不到效果
具体还要看实战,
节目中p2,p3,p4音频序号在前,视频序号在后,不是我希望的. 需要进一步把-map 0:p:1 分解为-map 0:i:xxx 来准确控制了!!!
不过已经够用,就这样吧.

title 是metadata,指明节目Servie_name


1. 单流试验
ffmpeg -i test1.ts -c copy -program title=A1 t.ts
title 是一个metadata, 将代表流中的service_name, 默认Service01
ffmpeg  -y -i multiVideo.ts -c copy -map 0:p:1 -program title=A1:st=100:st=101 p1.ts
搞清了以上问题,就可以随便选择流,打包录制或发出了.
2. 将复用流解包成4个单流
ffmpeg -y -i multiVideo.ts -c copy -map 0:p:1 p1.ts -c copy -map 0:p:2 p2.ts -c copy -map 0:p:3 p3.ts -c copy -map 0:p:4 p4.ts
我查看了一下p2.ts,p3.ts,p4.ts 都是音频流在前,视频流在后, 因为multiVideo.ts中音频流的序号小,所以排在了0位, 这样已经不影响播放了.
如果想按传统让视频在前,可以用-map 0:i:xx 的方式准确指定顺序
这破玩意,关键就是用-map 影射不同的流,有了一个顺序,再用-program 去选择它,从而完成从多节目到多节目的映射!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ffmpeg 录制和播出复用流(多节目流) 的相关文章

  • 使用 ffmpeg 将 h.264 avi 容器转换为 mp4

    我想使用 ffmpeg 将 h 264 avi 容器转换为 mp4 容器 我发现这个有效 ffmpeg i myfile avi vcodec copy myfile mp4 ffmpeg version N 51169 gcedf276
  • 如何使用 ffmpeg 提取时间精确的视频片段?

    这并不是一个特别新的问题领域 但我已经尝试过那里建议的内容 但运气不佳 那么 我的故事 我有一大段 15 秒的直接来自camera mov 视频 我想从中提取特定的块 我可以通过开始时间和停止时间 以秒为单位 来识别该块 我首先尝试执行我称
  • 无法在 Windows 7 机器中使用 OpenCV 2.4.3、Python 2.7 打开“.mp4”视频文件

    我目前正在进行一个涉及读取 mp4 视频文件的项目 我遇到的问题是它在Windows 7机器上使用Python 2 7 32位 OpenCV 2 4 3 cv2 pyd 代码片段如下 try video cv2 VideoCapture v
  • MP4 到 DASH(bash 脚本)

    我有一个网站 用户可以在其中上传视频文件 我想使用 DASH 流式传输所有内容以获得自适应比特率流式传输 因此 我编写了一个 bash 脚本 由 cron 运行 将所有 mp4 文件转换为 DASH 但它无法正常工作 出了什么问题 例如 使
  • H264 字节流到图像文件

    第一次来这里所以要温柔 我已经在给定的 H 264 字节流上工作了几个星期 一般注意事项 字节流不是来自文件 它是从外部源实时提供给我的 字节流使用 Android 的媒体编解码器进行编码 当将流写入扩展名为 H264的文件时 VLC能够正
  • 如何从 Linux 命令行获取视频文件的分辨率(宽度和高度)?

    我一直在挖掘 mplayer mencoder 和 ffmpeg 文档 但我似乎无法想出anything 我对输出格式不是特别挑剔 因为我可以使用正则表达式将其拉出来 我只是似乎无法首先获取数据 Use ffprobe https ffmp
  • 适用于 iPhone 和 HTTP 直播的实时视频聊天

    所以一般来说 我想为 iPhone 制作一个具有视频聊天功能的应用程序 但经过多次搜索 我仍然找不到任何成功的结果 是否有任何公共或私有 API 可用于在 iPhone 上执行此操作 如果您的答案是 是 请帮助我 基本上 我想要的是读取连接
  • ffmpeg:音频样本的字节顺序

    我使用 ffmpeg 的 avcodec 从我的 C 应用程序中的音乐文件中检索原始音频样本 对于我测试的文件 这些文件样本的字节序似乎是小字节序 但我想知道对于我尝试解码的所有文件是否总是如此 即来自 ffmpeg 的实现或至少它的体系结
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 在 macOS 上为 MoviePy 安装 ffmpeg 失败并出现 SSL 错误

    我正在尝试编写一个 Python 程序 在 Mac OS 10 11 16 上使用 MoviePy 将 MP4 文件转换为 GIF 我用 import moviepy editor as mp 我收到一条错误消息 说我需要打电话imagei
  • Windows 上的 ffmpeg-android ndk

    我正在尝试编译 bash 文件 带有 android ndk 的 ffmpeg 我收到如下错误 arm linux androideabi gcc 无法创建可执行文件 C 编译器测试失败 Makefile 2 config mak 没有这样
  • ffmpeg concat:“不安全的文件名”

    尝试将一堆 mts 文件转换为一个大 mp4 文件 stephan rechenmonster mnt backupsystem archive2 Videos 20151222 PRIVATE AVCHD BDMV bin ffmpeg
  • 如何将 MP3 音频文件读入 numpy 数组/将 numpy 数组保存到 MP3?

    有没有办法从 MP3 音频文件中读取 写入 MP3 音频文件numpy具有类似 API 的数组scipy io wavfile read https docs scipy org doc scipy 0 14 0 reference gen
  • FFMPEG波形透明,背景纯色

    我正在尝试使用 ffmpeg 生成波形 我希望背景为纯色 实际波形为透明 以下部分实现了我想要的 除了有黑色背景 我希望能够将其更改为任何颜色 但波形是透明的 我怎样才能用 ffmepg 实现这个目标 ffmpeg i input mp3
  • ffmpeg 配置复杂过滤器时出错

    ffmpeg 命令存在一些问题 也许有人可以指出我正确的方向 我使用此链接来构建我的命令 那么问题 https stackoverflow com questions 7333232 how to concatenate two mp4 f
  • id3 图像编辑后播放 mp3 时遇到问题

    由于硬件限制 我们生产的软件试图确保导入到其库中的任何音频文件 准备复制到硬件上 都是可接受的比特率 最近 我们开始使用 FFmpeg 将许多不同的音频类型转换为 mp3 以便在我们的硬件上导入和使用它们 虽然转换工作正常并且 mp3 文件
  • FFMPEG 帧到 DirectX 表面

    给定一个指向 FFMPEG 的 AVFrame 的指针avcodec decode video 函数如何将图像复制到 DirectX 表面 假设我有一个指向适当大小的 DX X8R8G8B8 表面的指针 Thanks John 您可以使用
  • 如何在不指定像素格式的情况下从 AVFrame.data[] 和 AVFrame.linesize[] 获取原始帧数据?

    我的总体想法是frame data 根据视频的像素格式 RGB 或 YUV 进行解释 但是有没有通用的方法可以从帧中获取所有像素数据 我只想计算帧数据的哈希值 而不解释它来显示图像 根据 AVFrame h uint8 t AVFrame
  • 使用 ffmpeg 库以可变帧率模式将一系列图像(cv::Mat)保存到 mp4 文件,如何设置 pts?

    在C 代码中 我可以正确保存一系列图像 opencv的cv Mat 到 mp4 文件 使用ffmpeg图书馆 请参阅此处的问题和答案 当我尝试将多个 RGB 数据保存到 output mp4 文件时 avformat write heade
  • 如何创建媒体文件的稳定校验和?

    如何仅创建媒体数据的校验和而不包含元数据以获得媒体文件的稳定标识 最好是使用支持多种格式的库的跨平台方法 例如vlc ffmpeg 或 mplayer 媒体文件应该是常见格式的音频和视频 图像也很好 好吧 可能已经晚了 11 年才得到答案

随机推荐