FFMpeg无损合并视频的多种方法
众所周知,从某些视频网站下载的视频是分段的。比如新浪视频每隔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,然后用for循环输出以下内容:
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
转自:http://blog.csdn.net/doublefi123/article/details/47276739
链接: http://www.ffmpeg.org/download.html
windos 下下载 .ZIP 格式的 ffmpeg 直接解压即可,无需安装,之后配置好环境变量就好了。
配置完打开cmd命令窗口 输入ffmpeg 即可看到版本号和命令提示信息。
2. 使用简单的 ffmpeg 命令批量合并视频文件
先看看要合并的视频文件
一共1500+ 个小的视频文件,每个只有几秒钟
合并视频文件前还需要一个txt文件,里面是要合...
爬取完视频发现都是 ts 文件,而且都是 几百k的视频片段 ,所以要对视频进行一下评价,得到高人指点,推荐了ffmpeg 这个好用又变态的东西。
1 下载ffmpeg
官网直接下载
windows下下载zip文件解压配置环境就可以使用
2 环境配置
2.1 复制路径
2.2 环境配置
打开电脑属性
然后一直确定即可
在cmd下输入ffmpeg
出现上图所示,表示成功
4 合并视频(...
所用的ffmpeg的语法:
1.剪辑单个视频
`ffmpeg -i [2021-11-24-1-2.mp4] -vcodec copy -acodec copy -ss [00:00:00] -to [00:00:05] [output/p3.mp4]`[ ]中三个参数依次为:剪辑视频源文件;第一个时间为剪辑的起始时间;第二个时间为视频持续的时间长度; 剪辑好的文件名
2.合并视频片段
` ffmpeg -f concat -safe 0 -i [cutfiles.txt] -c copy [out
由于腾讯视频将一个视频分割成多个20M左右的小文件,所以必须合并起来成为一个完整视频文件,用什么工具来合并这些文件呢,想到了已经安装好的ffmpeg,开源免费,又是现成的。
两种方法:
方法1、直接写文件名,使用“|”来分割:
ffmpeg -i "concat:f00282urkwd.321002.1.ts|f00282urkwd.321002.2.ts|f00282urkwd.321002.3.ts|f00282urkwd.321002.4.ts|f00282urkwd.321002.5.ts|f00
一、将MP4格式的视频转为其他格式,合并起来之后再转回MP4
1、将mp4转成mpeg(也是一种视频格式)文件,然后利用ffmpeg命令合并起来,然后再转为mp4格式
ffmpeg -i test.mp4 -qscale 4 1.mpg
ffmpeg -i test2.mp4 -qscale 4 2.mpg
ffmpeg -i "concat:1.mpg|2.mpg" -c copy output.mpg
ffmpeg -i out
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.
FFmpeg是一种强大的多媒体处理工具,可以用来处理音频和视频文件。使用FFmpeg,用户可以轻松地进行音频和视频的格式转换、剪切、合并、裁剪以及其他各种操作。
其中,无损合并视频是FFmpeg的重要功能之一。无损合并是指将多个视频文件合并到一起,且合并后的视频质量与原始视频质量完全一致,没有任何损失。合并后的视频不会产生任何图像质量的损失,不会有任何的时间空隙,也不会产生任何的卡顿。
要实现无损合并视频,首先需要下载并安装FFmpeg,在安装完成之后,打开命令行窗口(Windows用户)或Terminal(Mac用户/Linux用户),输入以下命令:
ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -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 [v] [a]" -map "[v]" -map "[a]" output.mp4
其中,input1.mp4、input2.mp4和input3.mp4是要合并的视频文件名称,output.mp4是合并后的视频文件名称。如果需要合并多个视频,可以根据需要添加更多的-i参数。
以上命令中,filter_complex参数的作用是将多个视频文件合并在一起,n=3表示有三个输入文件,v=1表示合并视频流,a=1表示合并音频流。
输入完命令后,按下回车键,等待合并过程完成即可。合并后的视频质量与原始视频质量完全一致,没有任何损失,用户可以用来进行后续编辑和制作。