众所周知,从某些视频网站下载的视频是分段的。比如新浪视频每隔6分钟分段,俗称“6分钟诅咒”。现在的任务是将这些视频片段合并起来,并且尽量无损。

  • 方法一:FFmpeg concat 协议

对于 MPEG 格式的视频,可以直接连接:

ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg

对于非 MPEG 格式容器,但是是 MPEG 编码器(H.264、DivX、XviD、MPEG4、MPEG2、AAC、MP2、MP3 等),可以包装进 TS 格式的容器再合并。在新浪视频,有很多视频使用 H.264 编码器,可以采用这个方法

ffmpeg -i input1.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts
ffmpeg -i input2.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts
ffmpeg -i input3.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input3.ts
ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4

保存 QuickTime/MP4 格式容器的时候,建议加上 -movflags +faststart。这样分享文件给别人的时候可以边下边看。

  • 方法二:FFmpeg concat 分离器

这种方法成功率很高,也是最好的,但是需要 FFmpeg 1.1 以上版本。先创建一个文本文件filelist.txt

file 'input1.mkv'
file 'input2.mkv'
file 'input3.mkv'

然后:ffmpeg -f concat -i filelist.txt -c copy output.mkv
注意:使用 FFmpeg concat 分离器时,如果文件名有奇怪的字符,要在 filelist.txt 中转义。

  • 方法三:Mencoder 连接文件并重建索引
    这种方法只对很少的视频格式生效。幸运的是,新浪视频使用的 FLV 格式是可以这样连接的。对于没有使用 MPEG 编码器的视频(如 FLV1 编码器),可以尝试这种方法,或许能够成功。
mencoder -forceidx -of lavf -oac copy -ovc copy -o output.flv input1.flv input2.flv input3.flv
  • 方法四:使用 FFmpeg concat 过滤器重新编码(有损)

语法有点复杂,但是其实不难。这个方法可以合并不同编码器的视频片段,也可以作为其他方法失效的后备措施。

ffmpeg -i input1.mp4 -i input2.webm -i input3.avi -filter_complex
'[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] concat=n=3:v=1:a=1 [v] [a]'
-map '[v]' -map '[a]' <编码器选项> output.mkv

如你所见,上面的命令合并了三种不同格式的文件,FFmpeg concat 过滤器会重新编码它们。注意这是有损压缩。
[0:0] [0:1] [1:0] [1:1] [2:0] [2:1] 分别表示第一个输入文件的视频、音频、第二个输入文件的视频、音频、第三个输入文件的视频、音频。concat=n=3:v=1:a=1 表示有三个输入文件,输出一条视频流和一条音频流。[v] [a] 就是得到的视频流和音频流的名字,注意在 bash 等 shell 中需要用引号,防止通配符扩展。

  • 提示
以上三种方法,在可能的情况下,最好使用第二种。第一种次之,第三种更次。第四种是后备方案,尽量避免。

规格不同的视频合并后可能会有无法预测的结果。
有些媒体需要先分离视频和音频,合并完成后再封装回去。
对于 Packed B-Frames 的视频,如果封装成 MKV 格式的时候提示 Can't write packet with unknown timestamp,尝试在 FFmpeg 命令的 ffmpeg 后面加上 -fflags +genpts

官网地址

ffmpeg  -i tmp/1.wav -i tmp/3.wav  -filter_complex '[0:0] [1:0]
concat=n=2:v=0:a=1[out]' -map '[out]' tmp/concat_1.wav

使用ffmpeg连接音视频相关推荐

  1. 基于ffmpeg的音视频转码、压制、录屏、裁切、合并、提取

    ffmpeg转码.压制.录屏.裁切.合并.提取 1.ffmpeg介绍 2.转换格式 3.音频转码 4.视频转码 5.码率控制模式 6.合并.提取音视频 7.截取.连接音视频 8.截图.水印.动图 9. ...

  2. 【FFmpeg】使用 FFmpeg 处理音视频格式转换流程 ( 解复用 | 解码 | 帧处理 | 编码 | 复用 )

    FFmpeg 系列文章目录 [FFmpeg]Windows 搭建 FFmpeg 命令行运行环境 [FFmpeg]FFmpeg 相关术语简介 [FFmpeg]FFmpeg 相关术语简介 二 [FFmpe ...

  3. 使用ffmpeg打印音视频的详细信息

    使用ffmpeg打印音视频的详细参数非常简单,仅仅需要三个函数接口实现: /*所有进行操作前,先执行以下,否则需要自己制定类型*/av_register_all/*Open an input stre ...

  4. FFmpeg Android 学习(一):Android 如何调用 FFMPEG 编辑音视频

    一.概述 在Android开发中,我们对一些音视频的处理比较无力,特别是编辑音视频这部分.而且在Android上对视频编辑方面,几乎没有任何API做支持,MediaCodec(硬编码)也没有做支持.那 ...

  5. FFMPEG开源音视频项目学习汇总

    ~非常感谢雷霄骅老师的无私帮助,本文转载自:http://blog.csdn.net/leixiaohua1020/article/details/42658139~       本文汇总一下自己视音 ...

  6. C# 调用FFmpeg处理音视频的示例

    FFmpeg 开源.跨平台.体积小.功能强大,提供了录制.转换以及流化音视频的完整解决方案. 官网:https://www.ffmpeg.org/ 百科:https://baike.baidu.com ...

  7. javaCV入门指南:调用FFmpeg原生API和JavaCV是如何封装了FFmpeg的音视频操作?

    JavaCV入门指南系列: JavaCV入门指南:序章(看完本章后,不想看原理的小伙伴可直接跳转到<快速上手篇>) JavaCV入门指南:调用FFmpeg原生API和JavaCV是如何封装 ...

  8. linux下ffmpeg采集音视频设备

    Linux下查看音视频设备 1.视频输入设备: 命令查看:ls /sys/class/video4linux/ 执行结果如下: 如果系统存在video4linux文件夹说明已安装过视频驱动,video ...

  9. ffmepg:使用ffmpeg转换音视频格式

    收藏一下大神的作品:https://blog.csdn.net/ETalien_/article/details/102917887 使用ffmpeg转换音视频格式 转换音频格式 ffmpeg -i ...

最新文章

  1. Spring应用架构
  2. null或空值的判断处理-java
  3. 【论文笔记】From Facial Parts Responses to Face Detection: A Deep Learning Approach
  4. Jenkins+Spring Boot构建部署
  5. win10下怎么运行java,如何在Windows 10中运行Java程序
  6. android 性能测试 简介,android性能测试工具traceview简介[转载]
  7. webex java插件_Linux安装Java和Webex
  8. python 图片文字转换成word_如何把图片文字转换成word文字?
  9. 使用函数求余弦函数的近似值
  10. 人脸识别门禁系统设计(一)
  11. 9步搞定:用迅雷等工具下载百度网盘资源
  12. 精选1000个机械原理动图
  13. oracle执行计划px,【Oracle】并行等待之PX Deq: Execution Msg
  14. C++封装dll供C#调用获取U盘/磁盘序列号信息
  15. 通俗易懂的YOLO系列(从V1到V5)模型解读!
  16. win10计算机管理没有蓝牙,win10系统中缺少打开或关闭蓝牙选项的解决方法
  17. 2018最新廖雪峰全套Java完整版
  18. 思维导图怎么画?思维导图快速绘制教程
  19. linux 大牛博客,大牛
  20. 嵌入式开发板更换开机LOGO

热门文章

  1. poj3090(欧拉函数)
  2. javaScript 压缩混淆反混淆
  3. 定时器的应用(三):数码时钟
  4. pikachu之unsafe upfileupload
  5. 集团企业IT数据安全及权限管理制度
  6. 产品包装设计怎么分类
  7. 红外通讯之红外遥控器让你的舵机转圈圈
  8. anchor free和anchor base
  9. vscode 文件夹中查找_vscode搜索所有文件夹中所有文件的方法
  10. 服务器安全软件--服务器安全狗windows V4.2枸杞版发布