Share

实现对指定目录下所有视频文件截取前20秒并保存到名为20s的文件夹中

如果目录中还包含.mp3格式的音频文件,并且你希望对它们进行处理,你可以使用pydub库来截取音频的前20秒。以下是如何修改之前的脚本以支持.mp3文件:

首先,确保安装了pydubffmpeg

pip install pydub

ffmpeg是一个强大的多媒体框架,pydub依赖它来处理媒体文件。你可以从FFmpeg官网下载并安装。

更新脚本如下:

import os
from moviepy.editor import VideoFileClip
from pydub import AudioSegment

def clip_video(video_path, output_path, duration=20):
    clip = VideoFileClip(video_path).subclip(0, duration)
    clip.write_videofile(output_path, codec='libx264')

def clip_audio(audio_path, output_path, duration=20):
    audio = AudioSegment.from_file(audio_path)
    # 截取音频前duration秒
    if len(audio) > duration * 1000:  # 将秒转换为毫秒
        clip = audio[:duration * 1000]
    else:
        clip = audio
    # 导出截取的音频
    clip.export(output_path, format="mp3")

def main(directory):
    output_dir = os.path.join(directory, '20s')
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    for filename in os.listdir(directory):
        if filename.endswith(('.mp4', '.avi', '.mov', '.mkv')):
            video_path = os.path.join(directory, filename)
            output_path = os.path.join(output_dir, filename)
            print(f"Processing video {filename}...")
            clip_video(video_path, output_path)
        elif filename.endswith('.mp3'):
            audio_path = os.path.join(directory, filename)
            output_path = os.path.join(output_dir, filename)
            print(f"Processing audio {filename}...")
            clip_audio(audio_path, output_path)

if __name__ == "__main__":
    directory = 'path_to_your_media_directory'  # 替换为你的媒体文件目录
    main(directory)