单流录制模式下,每个 UID 的音频和视频均分开录制,每个 UID 都有其对应的音频文件和视频文件。你可以使用声网音视频格式转换脚本,合并每个 UID 的音频文件和视频文件。
转码服务器推荐使用以下系统:
Python 2、2.7 及以上版本(除 Python 3)
下载声网音视频格式转换脚本压缩包并解压。脚本中内置了 FFmpeg,建议使用压缩包内的 FFmpeg 进行转码,避免出现兼容性问题。
解压完成后,设置转码参数后即可开始转码。
你可先如下图所示,输入命令行 python convert.py
,查看转码参数介绍。
也可通过下列表格了解各参数。
参数 | 描述 | 是否必填 |
---|---|---|
-f |
指定待转码文件的绝对存储路径。如该路径中有多次录制产生的录制文件,声网音视频格式转换脚本会对所有的录制文件依次进行转码。 | 是 |
-m |
设置转码模式。详见下文 -m 参数介绍。0 :默认转码模式,按 segment 转码,即把同一个 segment 的音频和视频合成一个音视频文件。1 :音视频合并模式。2 :音频合并模式。3 :视频合并模式。 |
否 |
-s |
设置保存模式,表示转码是否需要严格时间同步,即用户离开频道的时间是否占转码文件时长。如果不设置 -s , 则为默认的 all time recording 模式。此模式下,如果用户录制中途退出频道后重新加入,用户退出的时间会以退出前最后一帧的画面呈现在录制文件里。举例来说,用户在频道里 2 分钟后,退出频道 30 分钟,再加入频道 2 分钟,则录制文件长度最终为 34 分钟,其中 30 分钟为退出前最后一帧的画面。如果设置了 -s ,则转码文件中删除用户中途退出频道到重新加入频道之间的时长。此参数仅 -m 设为 1 ,2 或 3 时有效。 |
否 |
-p |
设置转码后视频的帧率,单位为 fps。默认值为 15 fps。取值范围为 5 fps 到 120 fps。如果设置低于 5 fps,则按 5 fps 执行。具体设置请参考分辨率、帧率、码率对照表。 | 否 |
-r |
设置转码后视频的分辨率,格式为“宽 高”,例如 -r 640 360 ,默认将选择所有切片中最大切片的分辨率`。具体设置请参考分辨率、帧率、码率对照表。 |
否 |
-a |
转码音视频的同时输出用户的纯音频文件,输出文件名格式为:UID_timestamp.m4a 。 |
否 |
-c |
设置截图的间隔,单位:毫秒,用于指定截图间隔。输出文件名格式:UID_timestamp_index.jpg 。 |
否 |
-u |
指定需要转码的用户 uid,如果不指定,则将文件夹内所有 uid 的录制文件进行转码。 | 否 |
-b |
设置转码开始时间,单位:秒,支持浮点数。例如 -b 10.500 ,表示从 10 秒 500 毫秒开始。 |
否 |
-t |
设置截取录制文件的时长。需配合 -b 使用,不能单独使用。例如 -b 10 -t 5 ,表示从第 10 秒开始,截取 5 秒的数据。 |
否 |
-o |
指定输出文件名,仅 -u 有效时输出指定文件名,不指定则输出默认的文件名。 |
否 |
-e |
将录制的 ts 文件转码为标准格式的 ts 文件,并输出同名的 MP4/M4A 文件。 | 否 |
-m 参数介绍
在了解 -m
参数之前,你需要先了解录制 segment 的概念。录制 segment 指每个 UID 从开始录制到结束录制这一过程。
一个 UID 开始录制需同时满足以下两个条件:
一个 UID 结束录制只需满足以下任一条件:
你可以在转码参数设置示例查看关于 segment 的具体示例。
了解录制 segment 的概念后,我们再来看 -m
参数不同设置的具体行为。
为方便起见,以下我们假设每个 UID 均生成多个音频文件和视频文件。
0
:把同一个 UID 的音频和视频按照录制 segment 合并。一个 UID 的一个录制 segment 对应一个音视频文件,文件名为 UID_timestamp_av.mp4
。其中 timestamp
为服务器开始录制的时间,如音频和视频的开始时间不一致,timestamp
为两个开始时间中较早的时间。timestamp
的时区为 UTC+0,由年、月、日、小时、分钟、秒和毫秒组成。例如 100_20190611073246073_av.mp4
表示在 UTC 2019 年 6 月 11 日 7 点 32 分 46 秒 73 毫秒时开始录制的一个 UID 为 100
的用户的音视频文件。1
:把同一个 UID 的音频和视频按时间顺序合成一个文件。一个 UID 对应一个音视频文件,文件名为 UID_0_merge_av.mp4
。2
:把同一个 UID 的音频按时间顺序合成一个文件。一个 UID 对应一个音频文件,文件名为 UID_0_merge.m4a
。该 M4A 文件使用 AAC 编码。你可以通过声网音视频格式转换脚本,将其转换成其他编码格式的文件,如 MP3 文件,转换步骤详见使用脚本转换。3
:把同一个 UID 的视频按时间顺序合成一个文件。一个 UID 对应一个视频文件,文件名为 UID_0_merge.mp4
。-m 0
, 并且使用了 -b
参数 和 -t
参数后,-m
参数强制为 1,分片转码配置无效。-b
参数 和 -t
参数,转码后的文件名会加上时间段。例如:python convert.py -f <待转码文件所在路径> -m 1 -b 10.5 -t 5.5
转码后的文件名为 123_0_merge_10.500_5.500_av.mp4
。下面结合具体案例来介绍 -m
参数的设置和最终得到的转码文件。
假设频道内有两个用户,UID 分别为 100
和 123
。以单流模式开始云端录制。用户 100
曾离开频道,30 秒后再进入。因此得到的录制文件中,用户 100
有两个录制 segment,对应两个音频文件和两个视频文件,用户 123
对应一个音频文件和一个视频文件。
如想将每个 UID 的音视频合并成一个文件,可运行以下命令:
python convert.py -f <待转码文件所在路径> -m 1 -s -p 30 -r 640 360
最终会生成两个转码文件:100_0_merge_av.mp4
和 123_0_merge_av.mp4
。UID 100
用户退出频道后再进入频道之间的 30 秒时长不会包含在内。如要将 30 秒时长包含在内,需要取消设置 -s
。
如想将每个 UID 的音视频按照录制 segment 合并成一个文件,可运行以下命令:
python convert.py -f <待转码文件所在路径> -m 0 -p 30 -r 640 360
最终会生成三个转码文件:100_timestamp1_av.mp4
,100_timestamp2_av.mp4
,和 123_timestamp1_av.mp4
。
转码完成后,会生成一个
convert-done.txt
,标志转码成功;还会生成一个convert.log
日志文件,和音视频文件在同一个目录下。
转码完成后的 MP4 文件几乎支持所有主流播放器,详见下表。
操作系统 | 支持播放器 |
---|---|
操作系统 | 支持播放器 |
Linux | VLCffplayer |
Windows | Media PlayerKM PlayerVLC PlayerChrome (49.0.2623 及以后版本) |
macOS | QuickTime PlayerMovistMPlayerXChrome (49.0.2623 及以后版本)Safari (11.0.3 及以后版本) |
iOS | 系统播放器KMPlayerSafari (9.0 及以后版本) |
Android | 系统播放器MXPlayerVLCKMPlayerChrome (49.0.2623 及以后版本) |