ffmpeg无损合并视频的多种方法

转载 2016年08月01日 11:19:23
众所周知,从某些视频网站下载的视频是分段的。比如新浪视频每隔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 中需要用引号,防止通配符扩展。

提示

  1. 以上三种方法,在可能的情况下,最好使用第二种。第一种次之,第三种更次。第四种是后备方案,尽量避免。
  2. 规格不同的视频合并后可能会有无法预测的结果。
  3. 有些媒体需要先分离视频和音频,合并完成后再封装回去。
  4. 对于 Packed B-Frames 的视频,如果封装成 MKV 格式的时候提示 Can't write packet with unknown timestamp,尝试在 FFmpeg 命令的 ffmpeg 后面加上 -fflags +genpts

FFMpeg无损合并视频的多种方法

众所周知,从某些视频网站下载的视频是分段的。比如新浪视频每隔6分钟分段,俗称“6分钟诅咒”。 现在的任务是将这些视频片段合并起来,并且尽量无损。 方法一:FFmpeg concat 协议 ...
  • doublefi123
  • doublefi123
  • 2015年08月04日 14:51
  • 34702

使用ffmpeg合并视频文件的三种方法

原文  http://itindex.net/detail/52379-ffmpeg-合并-视频 主题 FFmpeg ffmpeg合并视频的方法有三种。国内大多数仅介绍了其中之一。于是觉得有必...
  • u012587637
  • u012587637
  • 2016年06月14日 13:27
  • 12962

ffmpeg综合应用示例(五)——多路视频合并

本文的示例将实现:把多个子视频根据配置参数在空间上合并成一个视频,并可以对每一路的视频和音频加入特效。示例包含了 1、如何利用avfilter编程实现视频合并以及加入各类不同滤镜的功能 具有较强的综...
  • nonmarking
  • nonmarking
  • 2017年09月09日 20:06
  • 1460

使用ffmpeg合并视频文件的三种方法

ffmpeg合并视频的方法有三种。国内大多数仅介绍了其中之一。于是觉得有必要翻译一下。其实在ffmpeg的 FAQ文档中有比较详细的说明。  使用concat协议进行视频文件的合并 ...
  • spark_csdn
  • spark_csdn
  • 2017年02月25日 14:21
  • 1597

【ffmpeg】——批量合并视频

最近在做一个项目,关于视频下载的,需要同时对多个视频进行处理,这时我们用到了一个工   具——ffmpeg,工具具体的安装步骤大家可以度娘,在这就不一一介绍啦。        下面进入正题,...
  • hanxintong9
  • hanxintong9
  • 2016年12月20日 10:49
  • 2106

ffmpeg之多个MP4视频合并一个MP4视频文件(附遇见的bug)

准备材料:两张jpg照片、两个MP3 首先将两张照片和MP3文件合并为两个MP4视频文件。 照片的地址分别为:/home/ffmpeg_data/001.jpg、/home/ffmpeg_data...
  • zt_fucker
  • zt_fucker
  • 2017年02月17日 16:39
  • 3130

使用ffmpeg合并视频文件的三种方法

使用ffmpeg合并视频文件
  • charleslei
  • charleslei
  • 2016年12月14日 10:11
  • 351

使用ffmpeg合并视频文件的三种方法

ffmpeg合并视频的方法有三种。国内大多数仅介绍了其中之一。于是觉得有必要翻译一下。其实在ffmpeg的 FAQ文档中有比较详细的说明。  使用concat协议进行视频文件...
  • xiaojun111111
  • xiaojun111111
  • 2016年09月05日 10:47
  • 4561

ffmpeg合并视频

  • 2015年05月14日 18:16
  • 28.32MB
  • 下载

ffmpeg裁剪合并视频

这里裁剪是指时间轴裁剪,不是空间裁剪。   比如说,你想把视频的从一分20秒开始,30秒的视频裁剪出来,保存成一个视频。这是这个文章要讨论的问题。   一 裁剪视频 ...
  • xiunai78
  • xiunai78
  • 2013年07月30日 17:44
  • 22244
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ffmpeg无损合并视频的多种方法
举报原因:
原因补充:

(最多只允许输入30个字)