【发布时间】:2021-07-26 17:33:24
【问题描述】:
我有一个在 EC2 实例上运行的 NodeJS 应用程序,它具有一些用户可以录制多个视频的功能。
当用户注销时,我使用ffmpeg(版本 4.2.4) 将所有这些视频组合成一个视频。
我正在录制WEBM格式的视频,最终的单个视频应该是MP4格式。
假设用户录制了 3 个视频,每个视频 10 分钟,那么最后当用户退出时,这 3 个视频应该合并为一个长度为 30 分钟的视频。
现在一切正常,但是当所有对话和连接都在进行时,CPU 使用率很高。
CPU 使用率有时高达60-70%
我所遵循的过程是
-
将
webm文件转换为mp4文件。ffmpeg -i input_file.webm -c:v copy -c:a copy output_file.mp4 -
将 MP4 转换为 ts(Transport Stream) 文件。
ffmpeg -i output_file.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts OUTPUT_MP4.ts我正在按照这个过程将所有 mp4 文件合并为一个。
-
连接文件
ffmpeg -i "concat:OUTPUT_MP4_1.ts|OUTPUT_MP4_2.ts|OUTPUT_MP4_3.ts" -c copy -bsf:a aac_adtstoasc FINAL_MP4_SINGLE_FILE.mp4
所有这些过程都很耗时(但不是优先级),但是,这个过程占用了很多 CPU。
如果我的应用程序上有很多用户,并且可能正在进行视频转换,服务器可能会崩溃或变慢。
现在,我的问题是我如何在 dedicated EC2 instance 上运行此转换过程,在第一个 EC2 上运行的相同代码中,只能进行转换而不能进行任何其他工作实例。
【问题讨论】:
-
AWS 销售elastic transcoding 服务,可以满足您的需求。它有一个基于队列的 API。
-
@O.Jones 感谢您的快速响应,但问题是用户可以拥有视频,只要用户愿意,elastic transcoding 可能相当昂贵。
标签: ffmpeg javascript node.js video amazon-ec2 ffmpeg