情况描述:
项目环境:Qt 编写的应用程序,Win10 系统,MySQL 数据库
学生在考试的过程中,会录制 2 个视频文件,交卷时,需要将 2 个视频文件合并为 1 个视频文件,并且提交至内网的服务器上。
合并命令如下:
ffmpeg -i a.mp4 -i b.mp4 -filter_complex [0:v]pad=iw2:ih[a];[a][1:v]overlay=w1 out.mp4
现在的情况是:点击交卷时,先合并视频文件,再上传文件,再提交,这个过程非常慢,影响使用了。
大家有更好的解决办法吗,求教,感谢
1
falcon05 2020-10-18 09:22:15 +08:00 via iPhone
异步队列
|
2
wunonglin 2020-10-18 09:23:06 +08:00
RTX3090 + PCI SSD
|
3
coderluan 2020-10-18 09:31:17 +08:00 4
楼主你这个参数需要重新编解码吧,自然很慢,如果视频本身的参数相同,可以直接用 concat 命令,非常快。
|
4
mumbler 2020-10-18 09:31:29 +08:00 via Android
系统设计有问题,应该只提交原始资料,后台再统一合并,估计是想节约服务器了。
合并用 ffmpeg 肯定慢,可以试试 mp4box |
5
wdhwg001 2020-10-18 09:32:28 +08:00
如果是直接复制流的话应该不会太慢啊,或者用 mkv 做容器?
|
6
yangxin0 2020-10-18 09:32:55 +08:00 via iPhone
加上 copy 选项就快了
|
7
yangxin0 2020-10-18 09:33:25 +08:00 via iPhone
你这个只是 remux 就行了
|
8
coderluan 2020-10-18 09:34:50 +08:00
上面没看仔细,楼主并不是合并视频,是把视频左右拼接了,这种怎么样都不会太快的。
|
9
AX5N 2020-10-18 09:37:06 +08:00
把视频拼在一个画面里需要重编码,重编码没有快的,去搞台配置牛 B 的电脑慢慢跑。
|
10
coderluan 2020-10-18 09:38:24 +08:00
没拼接,迷糊了,还是用 ffmpeg concat 就行
|
11
mingl0280 2020-10-18 09:48:23 +08:00 via Android
你这不是拼接,你这是重编码,不应该在上传前处理的。 其实上传后服务器丢到队列里慢慢处理就行了……
|
12
fyooo 2020-10-18 09:53:25 +08:00
|
13
love 2020-10-18 09:57:20 +08:00 via Android
相同参数的视频貌似可以直接拼接或剪切不用重新编码
|
14
laminux29 2020-10-18 10:04:13 +08:00 5
视频拼接更像是 c 女膜修复手术,左右两瓣都要进行缝合处理( decode + fix + render + encode )才行,并不是说把左右两瓣贴在一起(concat or append)它们就自然黏上了。
|
15
wangxkww 2020-10-18 10:59:30 +08:00
要是想快速完成这件事情,在服务端展示的时候放俩播放控件,只要控制能同时播放就好了
|
17
Trinity888 OP @coderluan 您理解的正确,我们是需要把分别录制的 2 个不同的视频文件,合并拼接在 1 个视频文件中。
|
18
incheon 2020-10-18 11:13:47 +08:00
格式工厂
|
19
Osk 2020-10-18 11:24:34 +08:00 via Android
@Trinity888 快不起来,考试视频动不动几十分钟,cpu 转码速度太慢了,甚至可能 0.几倍的速度,转一个花半小时以上太夸张,除非调用硬件加速试试,但客户端硬件配置不能被你们控制的话会带来一堆问题。
服务器转码也不是不行,但也太烧时间和算力了。 还是尝试一下魔改播放器同时播放吧,要控制俩视频同步播放,应该有解决方案的 |
20
love 2020-10-18 11:29:11 +08:00
@laminux29 不要误导人,就楼主这种情况很可能是可以直接 append 的,而 ffmpeg 也有这类功能。
我平时也做视频编辑,把一个文件的视频剪几段下来,再拼回一个新文件,中间并不需要重编码。除非是压制参数不同的片段。 |
21
Osk 2020-10-18 11:32:46 +08:00 via Android
@love 楼主的可能是两个角度同时拍的考试视频,左右贴一起方便审查时回放,cat 合并的话,审查不方便了点
|
22
u6pM63mMZ34z32cE 2020-10-18 11:36:14 +08:00
得加钱
|
23
kokutou 2020-10-18 11:40:28 +08:00 4
直接原始视频提交上去啊...
需要回放的时候做 2 个播放模块,左右一起播放就可以了啊.. |
24
ayconanw 2020-10-18 11:47:47 +08:00 1
按照楼主给的参数看,应该是要把视频画面拼在一起,而不是前后相连。建议提问时候描述的更清晰一些,你只写个合并,多数理解会认为是要时间上前后相连。
画面拼一起的话,这就必须要重编码了,重编码想要速度快,2 个要素: 1.编码硬件强( cpu 多核性能好或者高性能显卡编码) 2.降低画质和压缩率(也就是增大压完之后视频文件的体积),这个就是看你编码参数怎么设置 不过就算你用 x264 的 fast preset,再把分辨率降低到 480p 档次,想要压出勉强能看的画质,也需要不少的时间 如果考试人数不是特别多的话,建议先上传服务器,然后在服务器上重编码 |
25
11ze 2020-10-18 11:55:19 +08:00
ffmpeg 支持多线程的, 加一下参数试试
|
26
JerryCha 2020-10-18 12:17:14 +08:00
如果你没有必须保留双视频的源文件的必要的话,左右拼接这件事情应该在录制的时候就处理好。
|
27
reus 2020-10-18 14:07:38 +08:00
加钱就能解决,越有钱越快
|
28
aru 2020-10-18 14:14:15 +08:00
合并快不了
交卷的时候直接将两个原始视频上传吧,然后在服务器队列异步合并。 |
29
aru 2020-10-18 14:15:42 +08:00
或者改一下播放器,审查的时候同时播放两个视频,这样就不需要合并了
|
30
rund11 2020-10-18 15:16:36 +08:00 via Android
本来就不应该客户端合并啊,客户端很多机器配置应该不高,而且合并也耗时间
|
31
pjntt 2020-10-18 16:40:12 +08:00
先提交上去,让服务器排队处理。
|
32
muzuiget 2020-10-18 16:47:55 +08:00
这种画面左右相连肯定要重编码,再优化也快不了。所以换个思路,从播放端入手,同时同步播放两个视频就行了。
|
33
zsdroid 2020-10-18 16:56:52 +08:00
所以到底是同框,还是首尾拼接??
|
34
hello2060 2020-10-18 17:00:17 +08:00 via iPhone
如果你们可以控制录像源码的话,第二个录像的开始时间设为第一个的结束时间就可以了。
具体参考 HLS 产生单个视频文件的要求。然后生成一个 m3u8 文件直接播放他就行了。 不过这么做有点小题大做了 |
35
Trinity888 OP 我是提问者,不好意思,小弟在描述问题时没说清楚:我这两个视频是要拼接在一个画面中,是要对比看,所以要拼接。不是首尾合在一起。
|
36
Trinity888 OP @ayconanw 谢谢您给小弟的建议,我确实是要将两视频画面,拼在一起。
|
37
Trinity888 OP @zsdroid 同框
|
38
weiming 2020-10-18 17:35:32 +08:00
随便来个显卡就可以提高 10 倍以上的速度
|
39
rosu 2020-10-18 17:41:09 +08:00 via Android
异步队列,或者播放时前端处理。只是后者无法解决下载观看问题。
|
40
feedcode 2020-10-18 17:53:35 +08:00 2
服务端处理+新版 FFMPEG hstack
https://ffmpeg.org/ffmpeg-filters.html#hstack Stack input videos horizontally. All streams must be of same pixel format and of same height. Note that this filter is faster than using overlay and pad filter to create same output. ``` ffmpeg -i a.mp4 -i b.mp4 -filter_complex vstack output.mp4 ``` |
41
feedcode 2020-10-18 17:58:18 +08:00
ffmpeg -i a.mp4 -i b.mp4 -filter_complex hstack output.mp4
|
42
laqow 2020-10-18 18:07:23 +08:00 via Android
录的时候在线合是 1x 的速度,提交的时候合是几十 x 的速度
|
43
expy 2020-10-18 20:15:39 +08:00
改下录制程序吧,原始流先别编码,处理成一个之后再编码。
|
44
Lemeng 2020-10-18 20:44:50 +08:00
合并的有很多,有些付费的不错,以前用过一个软件一月的 vip,只是太贵,用不起
|
45
youxiachai 2020-10-18 21:24:19 +08:00 via iPad
重编码怎么可能快。。。。
|
47
dlllcs 2020-10-18 22:57:05 +08:00
|
48
dlllcs 2020-10-18 22:57:59 +08:00
|
49
royzxq 2020-10-18 23:48:02 +08:00
学到了... 之前都拿 CPU 硬转, 刚才拿硬件加速试了一下, 0.3x -> 2x
|
50
expy 2020-10-19 08:44:24 +08:00
还有质量要求不高的监控可以考虑砍帧率分辨率降低编码器参数,
搞个 480p 10fps x264 预设 veryfast 计算量会小很多。 |
51
doyel 2020-10-19 09:22:09 +08:00
需求里没有说要重编码,直接 copy 拼接不就完了。。。
|
52
newmlp 2020-10-19 09:39:03 +08:00
可以录的时候就拼好啊
|
53
RangerWolf 2020-10-19 11:25:14 +08:00
至少可以使用 intel cpu 的核心显卡,实测过,这个速度是纯 cpu 的 150%
|
54
qianlige 2020-10-19 15:40:53 +08:00
做个同时播放的功能吧
|