通过 ffmpeg 压缩视频很慢 时间敏感的需求该怎么设置参数呢?

6 天前
 v423

前端上传的时候需要预压缩 希望 1 分钟的视频压缩时间能控制在 1 分钟以内, 同时保证画面清晰不能有马赛克, 压缩后视频在 720p 以上 码率 2000k 以上

现在的方案是通过 ffmpeg.wasm 压缩, 官方测试结果比原生 ffmpeg 慢 10-20 倍

项目中测试只要涉及画面转码都是严重超过 1 分钟 退而求其次尝试维持视频流只减帧, 但是维持原视频流需要 copy 参数, 此时无法通过-r 设置参数, filter 只是过滤器无法压缩视频体积

昨天找了一下午没找到可用的参数, 只能请教大佬了

参数如下

const args = [
    "-i",
    "input.mov",
    "-preset",
    "ultrafast",
    "-c:a",
    "copy",
    "-c:v",
    "copy",
    "-r", "24",
    "output.mp4"
]
2511 次点击
所在节点    FFmpeg
36 条回复
wnpllrzodiac
6 天前
能上 webgpu 就好了
wnpllrzodiac
6 天前
能给个 baseline 测试视频么?我的机器 32 核的试试
mightybruce
6 天前
ffmpeg 是支持 gpu 加速的,不过 wasm 可能不支持, 可以试试 simd 内联函数。
mumbler
6 天前
机器什么配置,1 核 1G 怎么优化也不会快
jim9606
6 天前
wasm 目前没辙,只能用 cpu 跑。
js 可以使用 WebCodecs API,可以用上平台的编码器(机会用上硬件编码,浏览器决定),也能指定码率控制方法
减帧按我理解是不能用 bsf 实现的。
v423
6 天前
@mumbler 普通 pc
客户或者内部员工上传的时候使用 硬件不会特别差

主要平台是 web 前端 没法跑原生 这个运行效率太低了
janus77
6 天前
注意到你说的是”预压缩“
有没有可能,去掉预压缩,直接在需要的时候执行压缩,但是用的不是 wasm 而是原生程序,你说了原生速度非常快,这样总消耗时间加起来反而比你现在 wasm+预压缩快?
v423
6 天前
@wnpllrzodiac 感谢回复
不过这是个通用性的上传组件 对内对外的表单都会用到
所以测试主要考虑中低性能的机型
产品那边期望移动端也能达到这个压缩效率(现在看看是有点异想天开了
v423
6 天前
@janus77 抱歉写的有点歧义 前面想改但是没找到在哪贴条
前端指的是 web 端 这是在表单上传视频的时候触发的预处理
原生 ffmpeg 是基于 c/c++的, web 端调用不了啦
wnpllrzodiac
6 天前
@v423 移动端别指望了。肯定是上传服务端稳定。转码出了问题,你都没办法跟踪,因为片源在用户手机上。以前有个项目,要把手机上拍摄的几段片子和其他预制素材合成一个短视频。领导天真的说,要把转码放在用户手机上做。结果各种问题,用户下载预制素材都会下载失败,结果转码失败。完全没法跟踪。而且用户的低端手机转码速度完全不可控,导致用户体验完全不一致。
wnpllrzodiac
6 天前
试了下我的电脑,720p 视频转 2m720p 输出,只有 1x 的速度。所以一分钟就要等 1 分钟。手机上也好不到哪里。
web+wasm 页面的问题是不能把多核都吃满。天生的单线程, 虽然有 worker simd 。如果是手机端原生应用,至少可以把性能吃满。web 做的话,性能太差了。
wnpllrzodiac
6 天前
上了个 -preset ultrafast, 一下子从 1x 变成 11x 了。不过这画质是不用看了
v423
6 天前
@wnpllrzodiac
移动端风险那么高啊 感谢预警

现在的情况是客户有时候会发 500m 以上的超大视频 如果客户发给业务人员 那业务会通过后台上传
只需要在上传之前压缩一下 功能比较简单 应该不太容易导致报错
主要是压缩时长 业务那边卡的比较死
"客户本来就不爽了 你传个视频要十分钟是想吃投诉吗😂?"

今年降本增效整的服务器资源很紧张 所以才考虑的前端方案
之后测试结果不理想的话再考虑服务器/第三方方案吧
paopjian
6 天前
我甚至没看懂你们的需求,什么叫预压缩,上传个视频先压缩一遍,服务器里拿到压缩好的再压一遍? 又要求质量又要求时间可太天才了, 先把提需求的打一顿吧
v423
6 天前
@paopjian 上传之前压缩一下 服务器端会利用闲置资源压缩
cnbatch
6 天前
不如换个思路,去掉手动压缩步骤,先接纳、保存原始视频文件,等到闲时(比如下班后、半夜)再执行批量转换、压缩,替换掉这些视频文件
ntedshen
6 天前
这个。。。官方都已经告诉你会比原版慢 10x-20x 了。。。
坛子里要能给你解决那岂不是这项目有点。。。

你现在参数视频和音频流都是直接复制,换句话讲只是解一下流然后重新打包都超时了。。。
救不动,完全救不动。。。
HannibaI
6 天前
换个思路,一边压缩一边上传
mightybruce
6 天前
这方面可以参考国内大厂的做法,尤其是 b 站早就把 ffmpeg 封装成 wasm 在前端使用了
https://mp.weixin.qq.com/s?__biz=Mzg3Njc0NTgwMg==&mid=2247501641&idx=1&sn=67dbbe7ae0e85ca82d4f4527f30993fe
chesha1
6 天前
如果根据你的参数看,保持-c:v copy -c:a copy 的话,是起不到压缩效果的吧?似乎这么做只能转换封装格式。而且这两个参数不需要 ffmpeg 重新编码,跑得也应该飞快才对,speed 至少应该有几百倍

ffmpeg.wasm 和本地的 ffmpeg 行为差别这么大吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1095204

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX