【发布时间】:2021-03-24 20:42:36
【问题描述】:
可能是最陈词滥调的问题之一,但问题是:所以我有一个 Ubuntu 服务器作为独立机器运行,仅用于处理 FFMPEG 作业。它有 4 个 vCPU、4GB RAM、80GB 存储空间。我目前正在使用此脚本将视频转换为 HLS 播放列表:https://gist.github.com/maitrungduc1410/9c640c61a7871390843af00ae1d8758e 这适用于所有视频,包括从 iPhone 录制的 4K。但是,我正在尝试添加水印,因此我更改了此脚本的第 106 行
来自:
cmd+=" ${static_params} -vf scale=w=${widthParam}:h=${heightParam}"
到:
cmd+=" ${static_params} -filter_complex [1]colorchannelmixer=aa=0.5,scale=iw*0.1:-1[wm];[0][wm]overlay=W-w-5:H-h-5[out];[out]scale=w=${widthParam}:h=${heightParam}[final] -map [final]"
现在这在来自 Youtube 或其他来源的视频中完美运行,但一旦我尝试使用来自 iPhone 的 4K 视频,RAM 使用量会在不到一分钟的时间内从 250MB 增长到 3.8GB,并导致整个过程崩溃。所以我寻找了一些类似的问题:
- FFmpeg Concat Filter High Memory Usage
- https://github.com/jitsi/jibri/issues/269
- https://superuser.com/questions/1509906/reduce-ffmpeg-memory-usage-when-joining-videos
- ffmpeg amerge Error while filtering: Cannot allocate memory
我了解 FFMPEG 需要大量内存消耗,但我不确定在不将流保存在内存中而是实时释放任何内存分配的情况下处理视频的确切方法是什么。即使我们决定在没有水印的情况下工作,它仍然会挂起大约 1.8GB 的 RAM 来处理 5 秒的 4K 视频,这会产生如果我们的用户上传的视频比它最终导致服务器崩溃的风险。我曾考虑过ulimit,但这似乎是在限制 FFMPEG 而不是编写改进的命令。让我知道如何解决这个问题。谢谢
【问题讨论】:
-
1) 如果可能,显示来自命令 #2 的日志。不要从日志中遗漏任何内容。 2)消除过滤器,直到找到罪魁祸首(假设过滤器是问题所在)。
标签: memory video ffmpeg command