很多电影视频是有中、英、粤语等多个音频轨的,如果直接转换成音频,很有可能不是自己想要的那种语音。
可以先查看音频流信息,确定属于哪个音频轨:
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)