- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
可能是最陈词滥调的问题之一,但问题是:所以我有一个 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 需要大量内存消耗,但我不确定在不将流保存在内存中而是实时释放任何内存分配的情况下处理视频的确切方法是什么。即使我们决定在没有水印的情况下工作,它仍然会挂起大约 1.8GB 的 RAM 来处理 5 秒的 4K 视频,这会产生如果我们的用户上传的视频比它最终导致服务器崩溃的风险。我曾考虑过 ulimit
但这似乎是限制 FFMPEG 而不是编写改进的命令。让我知道如何解决这个问题。谢谢
最佳答案
好的,我找到了解决方案。问题是 4K 视频具有极高的比特率,它会加载到您的 RAM 上以处理 filter_complex
最终会杀死您的进程。为了解决这个问题,我做的第一件事是将输入视频转码为 H264 格式(如果你愿意,你可以设置自定义比特率,但我忽略了那个)。所以我在这个脚本的第 58 行之后添加了这个新命令 https://gist.github.com/maitrungduc1410/9c640c61a7871390843af00ae1d8758e
ffmpeg -i SOURCE.MOV -c:a aac -ar 48000 -c:v libx264 -profile:v main -crf 19 -preset ultrafast /home/myusername/myfolder/out.mp4
现在我们有了一个新处理的 out.mp4
。我们将沿着脚本行 121 删除它。这样做的原因是为了阻止 FFMPEG 一次重载所有命令。现在我们将删除第 107 到 109 行并执行以下操作:
filters=[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]
cmd=""
cmd+=" ${static_params} -filter_complex ${filters} -map [final]"
cmd+=" -b:v ${bitrate} -maxrate ${maxrate%.*}k -bufsize ${bufsize%.*}k -b:a ${audiorate}"
cmd+=" -hls_segment_filename ${target}/${name}_%03d.ts ${target}/${name}.m3u8"
ffmpeg ${misc_params} -i /home/myusername/myfolder/out.mp4 -i mylogo.png ${cmd}
所以现在我们在循环中运行 FFMPEG 来处理基于分辨率的输出。这将立即消除内存中所有过滤器的过载。根据您的用例,您甚至可能想要删除第 53 行。
测试
我的最终想法
我不是 FFMPEG 方面的专家,但我认为这些信息会对可能有类似问题的人有所帮助。
关于memory - FFMPEG 吃掉所有内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65285127/
长期以来,我一直在寻找解决我的问题的方法,这就是我求助于您的原因: 考虑这段代码: static char done = 0; static void sigHandler(void) { d
我现在的职业是信息架构师和 JavaScript 开发人员,但最近我又回到了后端编码领域。而且,在尝试集成 HTML 原型(prototype)并与我们基于 C# 的 CMS 一起工作时,我与我们的程
我为 Jersey 创建了一个 LoggingFilter,并在 web.xml 中正确配置了它。一切正常。当我执行“GET”时,我得到 userPrincipal (request.getUserP
我没问题 Xcode 8.3.2 和 SourceKitService 正在使用我所有的 CPU。我在stackoverflow上阅读了很多问题,但找不到真正的解决方案。 我试过的: 清理项目数据:c
我是一名优秀的程序员,十分优秀!