使用转码脚本
使用云端录制完成录制后,你可以根据场景需要,使用我们提供的转码脚本对录制生成文件进行处理:
- 单流录制下,使用声网音视频格式转换脚本合并每个 UID 的音频文件和视频文件,生成一个既有音频又有视频的音视频文件。
- 合流和页面录制下,使用声网提供的音视频格式转换脚本,将多个 TS 文件批量转换为多个 MP4 文件或纯音频文件。
本文介绍如何在单流、合流、页面录制下分别使用声网的音视频格式转换脚本,生成你想要的文件。
前提条件
环境准备
转码服务器推荐使用以下系统:
- Ubuntu 14.04+ x64
- CentOS 7.0+ x64
- Debian 8.0 +
- Python 2、2.7 及以上版本(除 Python 3)
录制文件准备
- 确保你已经使用声网云端录制 RESTful API 在单流录制模式下生成录制文件。任何一个录制文件的缺失都将导致转码失败。
- 确保生成的录制文件的存储路径可访问。
单流录制
单流录制模式下,每个 UID 的音频和视频均分开录制,每个 UID 都有其对应的音频文件和视频文件。录制结束后,你可以使用声网音视频格式转换脚本,合并每个 UID 的音频文件和视频文件。
1. 获取转换脚本
下载声网音视频格式转换脚本压缩包并解压。脚本中内置了 FFmpeg,建议使用压缩包内的 FFmpeg 进行转码,避免出现兼容性问题。
2. 设置转码字段
解压获取到的转换脚本,解压完成后,设置转码字段后即可开始转码。
转码字段介绍
你可先如下图所示,输入命令行 python convert.py
,查看转码字段介绍。
也可通过下列表格了解各字段。
字段 | 描述 | 是否必填 |
---|---|---|
-f | 指定待转码文件的绝对存储路径。如该路径中有多次录制产生的录制文件,声网音视频格式转换脚本会对所有的录制文件依次进行转码。 | 是 |
-m | 设置转码模式:
信息 录制 Segment 的定义及各转码模式下可以获取的音视频文件,详见录制 Segment 定义和 -m 字段定义。 | 否 |
-s | 设置保存模式,表示转码是否需要严格时间同步,即用户离开频道的时间是否占转码文件时长。如果不设置 举例来说,用户在频道里 2 分钟后,退出频道 30 分钟,再加入频道 2 分钟,则录制文件长度最终为 34 分钟,其中用户退出频道的 30 分钟会显示其退出前最后一帧的画面。如果设置了 | 否 |
-p | 设置转码后视频的帧率,单位为 fps。默认值为 15 fps。取值范围为 [5,120]。如果设置低于 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 | 设置截取录制文件的时长。需配合 同时设置 | 否 |
-o | 指定输出文件名,仅 -u 有效时输出指定文件名,不指定则输出默认的文件名。 | 否 |
-e | 将录制的 ts 文件转码为标准格式的 ts 文件,并输出同名的 MP4/M4A 文件。 | 否 |
录制 Segment
在了解 -m
字段之前,你需要先了解录制 Segment 的概念。录制 Segment 指每个 UID 从开始录制到结束录制这一过程。
一个 UID 开始录制需同时满足以下两个条件:
- 该 UID 加入频道并发流
- 开始云端录制
一个 UID 结束录制只需满足以下任一条件:
- 该 UID 停止发流且 15 秒内没有重新发流
- 该 UID 离开频道且 15 秒内没有重新加入
- 结束云端录制
-m 字段介绍
了解录制 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
,按 Segment 转码配置无效。
转码字段设置示例
下面结合具体案例来介绍 -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
日志文件,和音视频文件在同一个目录下。
合流或页面录制
合流或页面录制模式下,你会得到一个 M3U8 文件和多个 TS 文件,包含所有用户的音视频数据。你可以从如下三种方案中选择一种进行文件格式转换,获取 MP3 或 MP4 文件。
通过 avFileType 字段转换
合流和页面录制模式下,你可以通过设置 avFileType
字段直接获得 MP4 文件,无需通过转码脚本进行格式转换。
使用脚本转换
本节介绍如何使用声网提供的音视频格式转换脚本,将多个 TS 文件转换为多个 MP4 文件或纯音频文件,音频文件的格式包括 MP3、WAV 和 AAC。
-
下载声网音视频格式转换脚本压缩包并解压。
-
输入以下命令行:
Shellpython format_convert.py <directory> <source_format> <destination_format>
其中:
directory
:源文件所在目录。source_format
:源文件的格式,即文件后缀名。source_format
中的英文字母必须为小写,即:- 音频:
mp3
,wav
,或aac
- 视频:
mp4
或ts
- 音频:
destination_format
:要转换成的目的格式。destination_format
中的英文字母必须为小写,即:- 音频:
mp3
,wav
,或aac
- 视频:
mp4
或ts
- 音频:
输入命令行后,脚本会在指定目录下寻找所有符合源文件格式的文件进行转码,转码后的文件主名与源文件主名一致,后缀名为目的格式的后缀。
如要将
/home/testname/testfolder
目录下的所有 MP4 文件转换成 TS 格式,命令如下:Shellpython format_convert.py /home/testname/testfolder/ mp4 ts
使用 FFmpeg 转换
你还可以使用 FFmpeg 将 M3U8 文件转换为 MP4 文件。安装 FFmpeg,并执行以下命令:
ffmpeg -i input.m3u8 -vcodec copy -acodec copy -absf aac_adtstoasc output.mp4
其中,input.m3u8
是待转换的 M3U8 文件名,output.mp4
为转换后的 MP4 文件名。
播放器支持
转码完成后的 MP4 文件几乎支持所有主流播放器,详见下表:
操作系统 | 支持播放器 |
---|---|
Linux | VLCffplayer |
Windows |
|
macOS |
|
iOS |
|
Android |
|