很多电影视频是有中、英、粤语等多个音频轨的,如果直接转换成音频,很有可能不是自己想要的那种语音。 可以先查看音频流信息,确定属于哪个音频轨: Reading video file: E:\1-7\比得兔1.mp4 输出音频流信息 Available audio streams: Stream 0: und - aac Stream 1: und - aac Stream 2: und - aac Stream 3: und - aac Stream 0应该是英语; 然后,在Deepseek中输入提示词: 你是一个Python编程专家,写一个Python脚本: 读取视频:"E:\1-7\比得兔1.mp4" 这个Mp4视频有多个音频轨,选择其中的Stream 0音频轨,提取出来保存为mp3音频文件,保存在和视频同一个文件夹中。 注意:每一步都要输出信息到屏幕上 源代码: import ffmpeg import os def extract_audio_from_video(video_path, stream_index=0): # 获取视频文件的目录和文件名 video_dir, video_filename = os.path.split(video_path) video_name, video_ext = os.path.splitext(video_filename) # 输出信息 print(f"Reading video file: {video_path}") # 使用 ffmpeg 获取视频的音频流信息 try: probe = ffmpeg.probe(video_path) except ffmpeg.Error as e: print(e.stderr, file=sys.stderr) sys.exit(1) audio_streams = [stream for stream in probe['streams'] if stream['codec_type'] == 'audio'] # 输出音频流信息 print("Available audio streams:") for i, stream in enumerate(audio_streams): print(f"Stream {i}: {stream['codec_name']}") if stream_index >= len(audio_streams): print(f"Stream index {stream_index} is out of range.") return selected_stream = audio_streams[stream_index] # 输出选择的音频流信息 print(f"Selected audio stream: Stream {stream_index} - {selected_stream['codec_name']}") # 构建输出音频文件路径 output_audio_path = os.path.join(video_dir, f"{video_name}_stream{stream_index}.mp3") # 使用 ffmpeg 提取音频并保存为 MP3 文件 try: ( ffmpeg .input(video_path) .output(output_audio_path, map=f"0:a:{stream_index}", acodec='libmp3lame') .run(capture_stdout=True, capture_stderr=True) ) except ffmpeg.Error as e: print(e.stderr.decode(), file=sys.stderr) sys.exit(1) # 输出完成信息 print(f"Audio extracted and saved to: {output_audio_path}") # 使用函数 video_path = "E:\\1-7\\比得兔1.mp4" extract_audio_from_video(video_path) |
|