ffpeg 使用:多段 mp4 视频合成一个 python 脚本

将多个 mp4 文件直接拼接会使得视频偏长,原本多个视频文件加起来可能只有几秒,合并之后变为几分钟了

这里采取的策略是将 mp4 转为 ts 文件之后再合并。

记得在 outputs 上级目录执行

import os
# mp4 存放地址
output = 'outputs'
mp4_files = [file for file in os.listdir(output) if file.endswith('.mp4')]
mp4_files.sort()

# 新建一个 ts_output 文件夹,用于存放新生成的 ts 视频文件
ts_files = []
ts_output = 'ts_output'

# mp4 视频转为 ts
for mp4_file in mp4_files:
    input_file = output+'/'+mp4_file
    
    file_name = mp4_file.split(".")[0]+".ts"
    output_file = ts_output+'/'+file_name
    os.system(f'ffmpeg -i {input_file} -c:v copy {output_file}')
    ts_files.append(file_name)

# 所有 ts 文件地址写到 list-of-files.txt 文本中
with open('list-of-files.txt', 'w') as f: 
    for file in ts_files: 
        file = ts_output+'/'+file
        f.write(f"file {file}\n")

# 合并 list-of-files.txt 文本中视频,输出一个文件
output_file = "output.ts"
os.system(f'ffmpeg -f concat -safe 0 -i list-of-files.txt -c copy {output_file}')

# 视频中添加音乐
import ffmpeg
video = ffmpeg.input(output_file)
audio = ffmpeg.input('imagenet_song.mp3')
ffmpeg.concat(video, audio, v=1, a=1).output('output.mp4', strict='-2').run()

outputs 文件夹:
ffpeg 使用:多段 mp4 视频合成一个 python 脚本_第1张图片

ts_output 文件夹:
ffpeg 使用:多段 mp4 视频合成一个 python 脚本_第2张图片

list-of-files.txt 文本:
ffpeg 使用:多段 mp4 视频合成一个 python 脚本_第3张图片

你可能感兴趣的:(Windows,Python,音视频,python,ffmpeg,视频合成,时长边长)