输入:一段音频
输出:duration长度的视频文件
运行亲测试有效
import os
import subprocess
import cv2
from moviepy.editor import VideoFileClip, clips_array
def modify_video_duration(input_file, duration, output_file):
"""
使用FFmpeg命令行工具修改视频时长
:param input_file:
:param duration:
:param output_file:
:return:
"""
"""
修改视频时长
:return:
"""
fps = get_video_fps(input_file)
# 获取输入视频的信息
ffprobe_cmd = f'ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 {input_file}'
input_duration = float(subprocess.check_output(ffprobe_cmd, shell=True))
if input_duration < duration:
# 计算需要重复添加的帧数
input_frames = int(input_duration * fps) # 25帧/秒,可以根据实际情况调整
target_frames = int(duration * fps) # 25帧/秒,可以根据实际情况调整
repeat_frames = target_frames - input_frames
# 复制最后一帧并重复添加直到达到目标时长
command = f'ffmpeg -i {input_file} -filter_complex "[0:v]trim=0:{duration}[a];[a]loop={repeat_frames}:1:0[v]" -map "[v]" -c:v libx264 -t {duration} -pix_fmt yuv420p {output_file}'
subprocess.call(command, shell=True)
else:
command = f'ffmpeg -i {input_file} -t {duration} -c copy -shortest {output_file}'
subprocess.call(command, shell=True)
if __name__ == "__main__":
modify_video_duration('./in_file/figure.mp4', 55, './out_file/figure_55s.mp4')
modify_video_duration('./in_file/figure.mp4', 300, './out_file/figure_5min.mp4')