ffmpeg 合并 2 个视频文件时 太慢的问题怎么解决?

2020-10-18 09:19:39 +08:00
 Trinity888

情况描述:

  1. 项目环境:Qt 编写的应用程序,Win10 系统,MySQL 数据库

  2. 学生在考试的过程中,会录制 2 个视频文件,交卷时,需要将 2 个视频文件合并为 1 个视频文件,并且提交至内网的服务器上。

  3. 合并命令如下:

ffmpeg -i a.mp4 -i b.mp4 -filter_complex [0:v]pad=iw2:ih[a];[a][1:v]overlay=w1 out.mp4

现在的情况是:点击交卷时,先合并视频文件,再上传文件,再提交,这个过程非常慢,影响使用了。

大家有更好的解决办法吗,求教,感谢

6513 次点击
所在节点    程序员
54 条回复
Osk
2020-10-18 11:32:46 +08:00
@love 楼主的可能是两个角度同时拍的考试视频,左右贴一起方便审查时回放,cat 合并的话,审查不方便了点
u6pM63mMZ34z32cE
2020-10-18 11:36:14 +08:00
得加钱
kokutou
2020-10-18 11:40:28 +08:00
直接原始视频提交上去啊...

需要回放的时候做 2 个播放模块,左右一起播放就可以了啊..
ayconanw
2020-10-18 11:47:47 +08:00
按照楼主给的参数看,应该是要把视频画面拼在一起,而不是前后相连。建议提问时候描述的更清晰一些,你只写个合并,多数理解会认为是要时间上前后相连。

画面拼一起的话,这就必须要重编码了,重编码想要速度快,2 个要素:
1.编码硬件强( cpu 多核性能好或者高性能显卡编码)
2.降低画质和压缩率(也就是增大压完之后视频文件的体积),这个就是看你编码参数怎么设置

不过就算你用 x264 的 fast preset,再把分辨率降低到 480p 档次,想要压出勉强能看的画质,也需要不少的时间
如果考试人数不是特别多的话,建议先上传服务器,然后在服务器上重编码
11ze
2020-10-18 11:55:19 +08:00
ffmpeg 支持多线程的, 加一下参数试试
JerryCha
2020-10-18 12:17:14 +08:00
如果你没有必须保留双视频的源文件的必要的话,左右拼接这件事情应该在录制的时候就处理好。
reus
2020-10-18 14:07:38 +08:00
加钱就能解决,越有钱越快
aru
2020-10-18 14:14:15 +08:00
合并快不了
交卷的时候直接将两个原始视频上传吧,然后在服务器队列异步合并。
aru
2020-10-18 14:15:42 +08:00
或者改一下播放器,审查的时候同时播放两个视频,这样就不需要合并了
rund11
2020-10-18 15:16:36 +08:00
本来就不应该客户端合并啊,客户端很多机器配置应该不高,而且合并也耗时间
pjntt
2020-10-18 16:40:12 +08:00
先提交上去,让服务器排队处理。
muzuiget
2020-10-18 16:47:55 +08:00
这种画面左右相连肯定要重编码,再优化也快不了。所以换个思路,从播放端入手,同时同步播放两个视频就行了。
zsdroid
2020-10-18 16:56:52 +08:00
所以到底是同框,还是首尾拼接??
hello2060
2020-10-18 17:00:17 +08:00
如果你们可以控制录像源码的话,第二个录像的开始时间设为第一个的结束时间就可以了。
具体参考 HLS 产生单个视频文件的要求。然后生成一个 m3u8 文件直接播放他就行了。

不过这么做有点小题大做了
Trinity888
2020-10-18 17:18:20 +08:00
我是提问者,不好意思,小弟在描述问题时没说清楚:我这两个视频是要拼接在一个画面中,是要对比看,所以要拼接。不是首尾合在一起。
Trinity888
2020-10-18 17:21:29 +08:00
@ayconanw 谢谢您给小弟的建议,我确实是要将两视频画面,拼在一起。
Trinity888
2020-10-18 17:21:55 +08:00
@zsdroid 同框
weiming
2020-10-18 17:35:32 +08:00
随便来个显卡就可以提高 10 倍以上的速度
rosu
2020-10-18 17:41:09 +08:00
异步队列,或者播放时前端处理。只是后者无法解决下载观看问题。
feedcode
2020-10-18 17:53:35 +08:00
服务端处理+新版 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
```

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

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

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

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

© 2021 V2EX