抱歉,麻煩大佬看看這段代碼問題在哪裏?

查看 71|回复 1
作者:zjvbqla   
我用 chatgpt:
寫一段代碼,使用 ffmpeg 把當前目錄下的長視頻分割成 4-8 隨機秒數的若干段視頻,並且把分割後的視頻隨機排序,但排序要確保原來相鄰的片段不再相鄰,最後按照排序后的順序合成新的視頻,輸入文件名不要固定爲 input.mp4 ,而是要遍歷當前目錄下的任意文件名視頻文件。
代碼是可以運行,並且也在切割,但是切割完成,到最後全部刪光了,連最後的合成視頻也刪掉了。問題出在哪?
import random
import glob
# 获取当前工作目录
current_dir = os.getcwd()
# 视频文件名,使用 glob 模块获取
video_files = glob.glob("*.mp4") + glob.glob("*.avi") + glob.glob("*.mkv")
# 分割后的视频文件名前缀
output_file_name = "output"
# 随机分割时间的范围,单位:秒
min_duration = 4
max_duration = 8
# 对每个视频文件执行分割、随机化和合并操作
for video_file_name in video_files:
    # 获取视频文件时长
    get_duration_cmd = f"ffprobe -i {video_file_name} -show_entries format=duration -v quiet -of csv='p=0'"
    duration = float(os.popen(get_duration_cmd).read().strip())
    # 计算分割次数
    num_pieces = int(duration // min_duration)
    # 分割视频
    for i in range(num_pieces):
        start_time = random.uniform(0, duration - min_duration)
        end_time = min(start_time + random.uniform(min_duration, max_duration), duration)
        output_file = f"{output_file_name}_{i}.mp4"
        trim_cmd = f"ffmpeg -i {video_file_name} -ss {start_time} -to {end_time} -c copy -avoid_negative_ts 1 {output_file}"
        os.system(trim_cmd)
    # 随机排序分割后的视频
    pieces = os.listdir(current_dir)
    random.shuffle(pieces)
    # 确保原来相邻的视频不再相邻
    for i in range(1, num_pieces):
        prev_file = pieces[i-1]
        curr_file = pieces
        if prev_file.startswith(output_file_name) and curr_file.startswith(output_file_name):
            temp_file = f"temp_{curr_file}"
            os.rename(curr_file, temp_file)
            os.rename(prev_file, curr_file)
            os.rename(temp_file, prev_file)
    # 合成分割后的视频
    concat_cmd = "ffmpeg"
    for i in range(num_pieces):
        input_file = f"{output_file_name}_{i}.mp4"
        concat_cmd += f" -i {input_file}"
    concat_cmd += f" -filter_complex \"{''.join([f'[{i}:0]' for i in range(num_pieces)])} concat=n={num_pieces}:v=0:a=1 [a]\" -map [a] {output_file_name}hhh.mp4"
    os.system(concat_cmd)
    # 删除临时视频文件
    for i in range(num_pieces):
        os.remove(f"{output_file_name}_{i}.mp4")```

num_pieces, 視頻, 分割, range

cutepig   
會寫代碼不會 debug ?
您需要登录后才可以回帖 登录 | 立即注册

返回顶部