【快速生成短视频】ffmpeg合并多个视频
实例1: 把4个视频(1.f4v, 2.f4v, 3.f4v, 4.f4v)合并成一个文件(out.mp4)
基本无损,而且速度飞快!
#-vcodec copy -acodec copy == -c copy
ffmpeg.exe -i 1.f4v -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg.exe -i 2.f4v -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg.exe -i 3.f4v -vcodec copy -acodec copy -vbsf h264_mp4toannexb 3.ts
ffmpeg.exe -i 4.f4v -vcodec copy -acodec copy -vbsf h264_mp4toannexb 4.ts
ffmpeg.exe -i "concat:1.ts|2.ts|3.ts|4.ts" -acodec copy -vcodec copy -absf aac_adtstoasc out.mp4
实例2: 有若干个文件053.mp4,054.mp4,...,065.mp4, 合并成一个MP4文件
# -*- coding: utf-8 -*-
import os
#先获取这些MP4文件,转换成ts格式
for each in os.listdir():
if each[-3:] == 'mp4':
os.system('ffmpeg.exe -i %s -c copy -vbsf h264_mp4toannexb %s.ts' % (each, each[:-4]))
#再把这些ts文件合并成MP4文件
li = ['0%d.ts'%i for i in range(53,66)]
input_file = '|'.join(li)
command = 'ffmpeg.exe -i "concat:%s" -c copy -absf aac_adtstoasc out.mp4' % input_file
os.system(command)
测试示例:
#coding=utf-8
import os
# 获取ffmpeg目录绝对路径
global FFmpeg
FFmpeg = os.path.abspath('./ffmpeg/ffmpeg')
video_path = "E:\pyvideo\TestVideo\\1"
# 先获取这些MP4文件,转换成ts格式
for each in os.listdir(video_path):
if each[-3:] == 'mp4':
print(' -i %s\\%s -c copy -vbsf h264_mp4toannexb %s\\%s.ts' % (video_path, each, video_path, each[:-4]))
os.system(FFmpeg + ' -i %s\\%s -c copy -vbsf h264_mp4toannexb %s\\%s.ts' % (video_path, each, video_path, each[:-4]))
# 再把这些ts文件合并成MP4文件
li = [video_path+'\\'+str(int(i+1))+'.ts' for i in range(4)]
input_file = '|'.join(li)
command = FFmpeg + ' -i "concat:%s" -c copy -absf aac_adtstoasc %s\\out.mp4' % (input_file, video_path)
os.system(command)