zoukankan      html  css  js  c++  java
  • [转载]用 FFMPEG 合并 MP4 视频

    因为 ffmpeg 是支持切分 mp4 视频的,所以我就理所当然的以为 ffmpeg 是支持视频合并。直到今天同事找我问方法,才发现一直以为的方法是错误的, mp4 不支持直接 concate(丢人了。。。),赶紧补了一下能量,从网上抓来了多种实现。

    注: 这里的 mp4 指的是网上最多见的 h264+aac mpeg4 容器的方式

    1). ffmpeg + mpeg

    这种是网上最常见的,基本思路是将 mp4 先转码为 mpeg 文件,mpeg是支持简单拼接的,然后再转回 mp4。

      ffmpeg -i 1.mp4 -sameq 1.mpg
      ffmpeg -i 2.mp4 -sameq 2.mpg
      cat 1.mpg 2.mpg | ffmpeg -f mpeg -i - -sameq -vcodec mpeg4 output.mp4

    这种方式弊端很明显,需要转码。而抛开转码本身会造成的质量损失,这个效率真心无法忍受。

    2). MP4Box

    这个是 gpac 搞的专门处理 mp4 的工具,由于它会自己内部处理连接部分的数据,所以可以简单的使用类似 concate 的语法:

    MP4Box -cat 1.mp4 -cat 2.mp4 output.mp4

    问题是,还要引入一个新的工具,而不能统一用 ffmpeg。这个也不爽。更不用说在 centos 下,你需要装一堆库,然后源码编译。有兴趣的朋友可以参考:

    http://howto-heaven.blogspot.jp/2011/01/how-to-install-mp4box-on-centos.html

    3). ffmpeg + ts 蹦蹦蹦蹦~~,重磅推出终极解决方案。这个的思路是先将 mp4 转化为同样编码形式的 ts 流,因为 ts流是可以 concate 的,先把 mp4 封装成 ts ,然后 concate ts 流, 最后再把 ts 流转化为 mp4。

    ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
    ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
    ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4

    转自:http://yonsm.net/mp4merge/

  • 相关阅读:
    vue this触发事件
    jQuery获取地址栏中的链接参数
    vue 省市区三级联动
    图片文字css小知识点
    sticky footer 模板
    Django学习——用户自定义models问题解决
    Django学习——全局templates引用的问题
    Django的学习——全局的static和templates的使用
    selenium登录爬取知乎出现:请求异常请升级客户端后重试的问题(用Python中的selenium接管chrome)
    使用python远程连接数据库
  • 原文地址:https://www.cnblogs.com/jameszh/p/5547542.html
Copyright © 2011-2022 走看看