合并音视频文件

最近更新时间:2022-09-20 05:17:40

功能描述

单流录制模式下,每个 UID 对应的音频文件和视频文件均分开录制。你可以使用我们 anyRTC 的合并转码脚本,合并每个 UID 的音频文件和视频文件。

前提条件

环境准备

转码服务器推荐使用以下系统:

  • Ubuntu 14.04+ x64
  • CentOS 6.5+(推荐 7.0)x64

运行该脚本需要安装 Python 2.0 或以上版本。

录制文件准备

  • 确保你已经在单流录制模式下生成录制文件。任何一个录制文件的缺失都将导致转码失败。
  • 确保生成的录制文件的存储路径可用。

转码步骤

1.获取音视频合并转码脚本

下载 anyRTC 云端录制转码脚本压缩包并解压。找到 ffmpeg.tar.gzconvert.py 文件。解压 ffmpeg.tar.gz,确保和 convert.py 在同一目录下。

建议使用压缩包内的 FFmpeg 进行转码,避免出现兼容性问题。如需使用自带 FFmpeg,建议使用 3.3 版本。

2.设置转码参数

解压完成后,设置转码参数后即可开始转码。

转码参数介绍

你可先如下图所示,输入命令行 python convert.py,查看转码参数介绍。

也可通过下列表格了解各参数。

参  数描  述
-f指定待转码文件的存储路径。如该路径中有多次录制产生的录制文件,转码脚本会对所有的录制文件依次进行转码。
-m设置转码模式:0:默认转码模式,按 segment 转码,即把同一个 segment 的音频和视频合成一个音视频文件、1:音视频合并模式、2:音频合并模式、3:视频合并模式
-s设置保存模式,表示转码是否需要严格时间同步,即用户离开频道的时间是否占转码文件时长。如果不设置 -s, 则为默认的 all time recording 模式。此模式下,如果用户录制中途退出频道后重新加入,用户退出的时间会以退出前最后一帧的画面呈现在录制文件里。
-p设置转码后视频的帧率,单位为 fps。默认值为 15 fps。取值范围为 5 fps 到 120 fps。如果设置低于 5 fps,则按 5 fps 执行。
-r设置转码后视频的分辨率,格式为“宽 高”,例如 -r 640 360

-m 参数介绍

在了解 -m 参数之前,你需要先了解录制 segment 的概念。录制 segment 指每个 UID 从开始录制到结束录制这一过程。

一个 UID 开始录制需同时满足以下两个条件:

  • 该 UID 加入频道并发流
  • 开始云端录制

一个 UID 结束录制只需满足以下任一条件:

  • 该 UID 停止发流且 15 秒内没有重新发流
  • 该 UID 离开频道且 15 秒内没有重新加入
  • 结束云端录制

你可以在转码参数设置示例查看关于 segment 的具体示例。

了解录制 segment 的概念后,我们再来看 -m 参数不同设置的具体行为。

为方便起见,以下我们假设每个 UID 均生成多个音频文件和视频文件。

  • 0:把同一个 UID 的音频和视频按照录制 segment 合并。一个 UID 的一个录制 segment 对应一个音视频文件,文件名为 UID_timestamp_DVD.mp4。其中 timestamp 为服务器开始录制的时间,如音频和视频的开始时间不一致,timestamp 为两个开始时间中较早的时间。timestamp 的时区为 UTC+0,由年、月、日、小时、分钟、秒和毫秒组成。例如 100_20210331258499502_av.mp4 表示在 UTC 2019 年 6 月 11 日 7 点 32 分 46 秒 73 毫秒时开始录制的一个 UID 为 100 的用户的音视频文件。
  • 1:把同一个 UID 的音频和视频按时间顺序合成一个文件。一个 UID 对应一个音视频文件,文件名为 UID1_merge_DVD.mp4
  • 2:把同一个 UID 的音频按时间顺序合成一个文件。一个 UID 对应一个音频文件,文件名为

UID0_merge.m4a。该 M4A 文件使用 AAC 编码。你可以通过 anyRTC 音视频格式转换脚本,将其转换成其他编码格式的文件,如 MP3 文件。

  • 3:把同一个 UID 的视频按时间顺序合成一个文件。一个 UID 对应一个视频文件,文件名为

UID0_merge.mp4

转码参数设置示例

下面结合具体案例来介绍 -m 参数的设置和最终得到的转码文件。

假设频道内有两个用户,UID 分别为 123456789987654321。以单流模式开始云端录制。用户 123456789 曾离开频道,30 秒后再进入。因此得到的录制文件中,用户 123456789 有两个录制 segment,对应两个音频文件和两个视频文件,用户 987654321 对应一个音频文件和一个视频文件。

如想将每个 UID 的音视频合并成一个文件,可运行以下命令:

python convert.py -f <待转码文件所在路径> -m 1 -s -p 30 -r 640 360

最终会生成两个转码文件:123456789_0_merge_av.mp4987654321_0_merge_DVD.mp4。UID 123456789 用户退出频道后再进入频道之间的 30 秒时长不会包含在内。如要将 30 秒时长包含在内,需要取消设置 -s

如想将每个 UID 的音视频按照录制 segmentt 合并成一个文件,可运行以下命令:

python convert.py -f <待转码文件所在路径> -m 0 -p 30 -r 640 360

最终会生成三个转码文件:123456789_timestamp1_DVD.mp4123456789_timestamp2_DVD.mp4,和 987654321_timestamp1_DVD.mp4

转码完成后,会生成一个 convert-done.txt,标志转码成功;还会生成一个 convert.log 日志文件,和音视频文件在同一个目录下。

播放器支持

转码完成后的 MP4 文件几乎支持所有主流播放器,详见下表。

操作系统支持播放器
LinuxVLC、ffplayer
WindowsMedia Player、KM Player、VLC Player、Chrome (49.0.2623 及以后版本)
macOSQuickTime Player、Movist、MPlayerX、Chrome (49.0.2623 及以后版本)、Safari (11.0.3 及以后版本)
iOS系统播放器、KMPlayer、Safari (9.0 及以后版本)
Android系统播放器、MXPlayer、VLC、KMPlayer、Chrome (49.0.2623 及以后版本)