跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • ffmpeg 合并 2 个视频文件时 太慢的问题怎么解决?
未分類
25 10 月 2020

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

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

資深大佬 : Trinity888 4

情况描述:

  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

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

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

大佬有話說 (54)

  • 資深大佬 : falcon05

    异步队列

  • 資深大佬 : wunonglin

    RTX3090 + PCI SSD

  • 資深大佬 : coderluan

    主你这个参数需要重新编解码吧,自然很慢,如果视频本身的参数相同,可以直接用 concat 命令,非常快。

  • 資深大佬 : mumbler

    系统设计有问题,应该只提交原始资料,后台再统一合并,估计是想节约服务器了。

    合并用 ffmpeg 肯定慢,可以试试 mp4box

  • 資深大佬 : wdhwg001

    如果是直接复制流的话应该不会太慢啊,或者用 mkv 做容器?

  • 資深大佬 : yangxin0

    加上 copy 选项就快了

  • 資深大佬 : yangxin0

    你这个只是 remux 就行了

  • 資深大佬 : coderluan

    上面没看仔细,主并不是合并视频,是把视频左右拼接了,这种怎么样都不会太快的。

  • 資深大佬 : AX5N

    把视频拼在一个画面里需要重编码,重编码没有快的,去搞台配置牛 B 的电脑慢慢跑。

  • 資深大佬 : coderluan

    没拼接,迷糊了,还是用 ffmpeg concat 就行

  • 資深大佬 : mingl0280

    你这不是拼接,你这是重编码,不应该在上传前处理的。 其实上传后服务器丢到队列里慢慢处理就行了……

  • 資深大佬 : fyooo

    同意 #3 答案,视乎视频的参数设置啊

    https://stackoverflow.com/questions/7333232/how-to-concatenate-two-mp4-files-using-ffmpeg/11175851#11175851

  • 資深大佬 : love

    相同参数的视频貌似可以直接拼接或剪切不用重新编码

  • 資深大佬 : laminux29

    视频拼接更像是 c 女膜修复手术,左右两瓣都要进行缝合处理( decode + fix + render + encode )才行,并不是说把左右两瓣贴在一起(concat or append)它们就自然黏上了。

  • 資深大佬 : wangxkww

    要是想快速完成这件事情,在服务端展示的时候放俩播放控件,只要控制能同时播放就好了

  • 資深大佬 : mio4

    @laminux29 这个比喻绝了

  • 主 資深大佬 : Trinity888

    @coderluan 您理解的正确,我们是需要把分别录制的 2 个不同的视频文件,合并拼接在 1 个视频文件中。

  • 資深大佬 : incheon

    格式工厂

  • 資深大佬 : Osk

    @Trinity888 快不起来,考试视频动不动几十分钟,cpu 转码速度太慢了,甚至可能 0.几倍的速度,转一个花半小时以上太夸张,除非调用硬件加速试试,但客户端硬件配置不能被你们控制的话会带来一堆问题。
    服务器转码也不是不行,但也太烧时间和算力了。

    还是尝试一下魔改播放器同时播放吧,要控制俩视频同步播放,应该有解决方案的

  • 資深大佬 : love

    @laminux29 不要误导人,就主这种情况很可能是可以直接 append 的,而 ffmpeg 也有这类功能。
    我平时也做视频编辑,把一个文件的视频剪几段下来,再拼回一个新文件,中间并不需要重编码。除非是压制参数不同的片段。

  • 資深大佬 : Osk

    @love 主的可能是两个角度同时拍的考试视频,左右贴一起方便审查时回放,cat 合并的话,审查不方便了点

  • 資深大佬 : mebtte

    得加钱

  • 資深大佬 : kokutou

    直接原始视频提交上去啊…

    需要回放的时候做 2 个播放模块,左右一起播放就可以了啊..

  • 資深大佬 : ayconanw

    按照主给的参数看,应该是要把视频画面拼在一起,而不是前后相连。建议提问时候描述的更清晰一些,你只写个合并,多数理解会认为是要时间上前后相连。

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

    不过就算你用 x264 的 fast preset,再把分辨率降低到 480p 档次,想要压出勉强能看的画质,也需要不少的时间
    如果考试人数不是特别多的话,建议先上传服务器,然后在服务器上重编码

  • 資深大佬 : 11ze

    ffmpeg 支持多线程的, 加一下参数试试

  • 資深大佬 : JerryCha

    如果你没有必须保留双视频的源文件的必要的话,左右拼接这件事情应该在录制的时候就处理好。

  • 資深大佬 : reus

    加钱就能解决,越有钱越快

  • 資深大佬 : aru

    合并快不了
    交卷的时候直接将两个原始视频上传吧,然后在服务器队列异步合并。

  • 資深大佬 : aru

    或者改一下播放器,审查的时候同时播放两个视频,这样就不需要合并了

  • 資深大佬 : rund11

    本来就不应该客户端合并啊,客户端很多机器配置应该不高,而且合并也耗时间

  • 資深大佬 : pjntt

    先提交上去,让服务器排队处理。

  • 資深大佬 : muzuiget

    这种画面左右相连肯定要重编码,再优化也快不了。所以换个思路,从播放端入手,同时同步播放两个视频就行了。

  • 資深大佬 : zsdroid

    所以到底是同框,还是首尾拼接??

  • 資深大佬 : hello2060

    如果你们可以控制录像源码的话,第二个录像的开始时间设为第一个的结束时间就可以了。
    具体参考 HLS 产生单个视频文件的要求。然后生成一个 m3u8 文件直接播放他就行了。

    不过这么做有点小题大做了

  • 主 資深大佬 : Trinity888

    我是提问者,不好意思,小弟在描述问题时没说清楚:我这两个视频是要拼接在一个画面中,是要对比看,所以要拼接。不是首尾合在一起。

  • 主 資深大佬 : Trinity888

    @ayconanw 谢谢您给小弟的建议,我确实是要将两视频画面,拼在一起。

  • 主 資深大佬 : Trinity888

    @zsdroid 同框

  • 資深大佬 : weiming

    随便来个显卡就可以提高 10 倍以上的速度

  • 資深大佬 : rosu

    异步队列,或者播放时前端处理。只是后者无法解决下载观看问题。

  • 資深大佬 : feedcode

    服务端处理+新版 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
    “`

  • 資深大佬 : feedcode

    ffmpeg -i a.mp4 -i b.mp4 -filter_complex hstack output.mp4

  • 資深大佬 : laqow

    录的时候在线合是 1x 的速度,提交的时候合是几十 x 的速度

  • 資深大佬 : expy

    改下录制程序吧,原始流先别编码,处理成一个之后再编码。

  • 資深大佬 : Lemeng

    合并的有很多,有些付费的不错,以前用过一个软件一月的 vip,只是太贵,用不起

  • 資深大佬 : youxiachai

    重编码怎么可能快。。。。

  • 資深大佬 : JerryV2

    @expy
    赞同,录制的时候就处理成一个视频,边录边拼

  • 資深大佬 : dlllcs

    总结:

    上策:
    @expy 录制的时候就处理成一个视频,边录边拼
    中策:@feedcode 使用 hstack 新特性,会比重新编码快很多
    下策:

  • 資深大佬 : dlllcs

    总结:

    上策:
    1. @expy 录制的时候就处理成一个视频,边录边拼
    2. @Osk 播放器同时播放吧,要控制俩视频同步播放
    中策:@feedcode 使用 hstack 新特性,会比重新编码快很多

  • 資深大佬 : royzxq

    学到了… 之前都拿 CPU 硬转, 刚才拿硬件加速试了一下, 0.3x -> 2x

  • 資深大佬 : expy

    还有质量要求不高的监控可以考虑砍帧率分辨率降低编码器参数,
    搞个 480p 10fps x264 预设 veryfast 计算量会小很多。

  • 資深大佬 : doyel

    需求里没有说要重编码,直接 copy 拼接不就完了。。。

  • 資深大佬 : newmlp

    可以录的时候就拼好啊

  • 資深大佬 : RangerWolf

    至少可以使用 intel cpu 的核心显卡,实测过,这个速度是纯 cpu 的 150%

  • 資深大佬 : qianlige

    做个同时播放的功能吧

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具