FFMPEG 合并视频文件(无损)

FFMPEG 合并视频文件(无损)

前言

最近在做视频转码相关业务,但是片源商给了一些DVD的零散视频片段,需要自己去合并片段并进行业务转码,本篇文章主要记录视频合并的过程及常见的合并方式。

环境
  • FFMPEG BUILDS 4.4.1

    FFmpeg Builds

  • GeForce GTX 1060(NVIDIA)

    显卡支持列表

  • windows 10

  • OVB格式视频文件

    VTS_01_1.VOB
    VTS_01_2.VOB
    VTS_01_3.VOB
    VTS_01_4.VOB
    VTS_01_5.VOB

视频合并方式
concat 分离器
新建 merge.txt
file 'VTS_01_1.VOB'
file 'VTS_01_2.VOB'
file 'VTS_01_3.VOB'
file 'VTS_01_4.VOB'
file 'VTS_01_5.VOB'
合并视频文件
ffmpeg -f concat -safe 0 -i merge.txt -c copy vts.mp4

PS:如果使用的是相对路径可以不加 -safe 0

文件列表生成技巧

如果视频文件过多,merge.txt 复制很繁琐,所以可以使用命令来快速生成文件列表文件。

windows

(for %i in (*.VOB) do @echo file '%i') > merge.txt

PS:*.VOB 代表视频文件后缀。

linux

# bash 
for f in *.wav; do echo "file '$f'" >> merge.txt; done
# printf
printf "file '%s'\n" *.wav > merge.txt
concat 协议
缺点

这种方式使用范围比较小,只适合MPEG等视频格式;

合并视频
ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy merge.ts
拓展

如果是其他格式文件,则可以先转码在合并,例如

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

PS:-movflags +faststart 使用这两个属性生成的文件可以边下边看。

concat 过滤器(有损)
说明

过滤器适用于同步视频和音频流的段。所有段都必须具有相同数量的每种类型的流,并且也将是输出时的流数。

合并视频
ffmpeg -i input1.mp4 -i input2.webm -i input3.mov \
-filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mkv

PS:输入流有三个,分别是input1.mp4input2.webminput3.mov ,然后告诉ffmpeg取出视频中的视频流及音频流,使用concat过滤器,告知它有三个视频流,他们都分别有一个视频流及一个音频流,连接并产生新的视频流[outv]及音频流[outa],然后映射新的视频流及音频流到新的文件 output.mkv

总结

以上就是使用FFMPEG合并视频的方式及过程,各种方式各有利弊,推荐 concat分离器 > concat协议 > concat过滤器 ,不能说哪种方式最好,只能根据实际情况来选择,如果大家有更好的方式或者建议,欢迎讨论。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值