怎么用脚本提取视频音频

wen 实用脚本 3

本文目录导读:

怎么用脚本提取视频音频

  1. 使用 FFmpeg(最常用)
  2. Python 脚本
  3. 批量处理脚本
  4. 高级功能脚本
  5. 一键执行脚本(Shell)
  6. 使用建议

使用 FFmpeg(最常用)

安装 FFmpeg

# Ubuntu/Debian
sudo apt install ffmpeg
# macOS
brew install ffmpeg
# Windows 下载安装包
https://ffmpeg.org/download.html

提取音频脚本

#!/bin/bash
# extract_audio.sh
# 基本提取
ffmpeg -i input.mp4 -vn -acodec copy output.aac
# 提取为 MP3
ffmpeg -i input.mp4 -vn -acodec libmp3lame -q:a 2 output.mp3
# 提取为 WAV
ffmpeg -i input.mp4 -vn -acodec pcm_s16le output.wav
# 提取高质量音频
ffmpeg -i input.mp4 -vn -b:a 320k output.mp3
# 批量提取当前目录所有视频
for file in *.mp4; do
    ffmpeg -i "$file" -vn "${file%.mp4}.mp3"
done

Python 脚本

使用 moviepy

# extract_audio.py
from moviepy.editor import VideoFileClip
def extract_audio(video_path, output_path):
    video = VideoFileClip(video_path)
    audio = video.audio
    audio.write_audiofile(output_path)
    audio.close()
    video.close()
    print(f"音频已提取到: {output_path}")
# 使用示例
extract_audio("video.mp4", "output.mp3")

使用 pydub

# extract_audio_pydub.py
from pydub import AudioSegment
import subprocess
import os
def extract_audio_ffmpeg(video_path, output_path):
    # 使用 ffmpeg 提取
    cmd = f'ffmpeg -i {video_path} -vn -acodec pcm_s16le temp.wav'
    subprocess.run(cmd, shell=True)
    # 使用 pydub 处理
    audio = AudioSegment.from_wav("temp.wav")
    audio.export(output_path, format="mp3")
    # 清理临时文件
    os.remove("temp.wav")
extract_audio_ffmpeg("video.mp4", "output.mp3")

批量处理脚本

Python 批量处理

# batch_extract.py
import os
import subprocess
from pathlib import Path
def batch_extract_audio(input_dir="videos", output_dir="audios"):
    # 创建输出目录
    Path(output_dir).mkdir(exist_ok=True)
    # 支持的视频格式
    video_formats = ['.mp4', '.avi', '.mkv', '.mov', '.wmv', '.flv']
    for file in os.listdir(input_dir):
        file_path = os.path.join(input_dir, file)
        if os.path.isfile(file_path) and Path(file).suffix.lower() in video_formats:
            # 生成输出文件名
            audio_name = Path(file).stem + '.mp3'
            output_path = os.path.join(output_dir, audio_name)
            # 提取音频
            cmd = f'ffmpeg -i "{file_path}" -vn -acodec libmp3lame "{output_path}"'
            print(f"正在处理: {file}")
            subprocess.run(cmd, shell=True)
    print("批量提取完成!")
if __name__ == "__main__":
    batch_extract_audio()

高级功能脚本

提取并转换格式

# advanced_extract.py
import subprocess
import os
class AudioExtractor:
    def __init__(self, video_path):
        self.video_path = video_path
    def extract_with_params(self, output_path, format="mp3", bitrate="192k", 
                          start_time=None, duration=None):
        """
        带参数的音频提取
        """
        # 构建命令
        cmd = ['ffmpeg', '-i', self.video_path]
        # 添加时间参数
        if start_time:
            cmd.extend(['-ss', start_time])
        if duration:
            cmd.extend(['-t', duration])
        # 添加音频参数
        cmd.extend(['-vn'])
        if format == "mp3":
            cmd.extend(['-acodec', 'libmp3lame', '-b:a', bitrate])
        elif format == "wav":
            cmd.extend(['-acodec', 'pcm_s16le'])
        # 输出文件
        num_ext = '.' + format
        if not output_path.endswith(num_ext):
            output_path += num_ext
        cmd.append(output_path)
        # 执行
        subprocess.run(cmd, check=True)
        print(f"提取成功: {output_path}")
    def extract_audio_fragment(self, output_path, start, duration):
        """提取音频片段"""
        self.extract_with_params(output_path, start_time=start, duration=duration)
    def extract_high_quality(self, output_path):
        """提取高质量音频"""
        self.extract_with_params(output_path, bitrate="320k")
# 使用示例
extractor = AudioExtractor("video.mp4")
extractor.extract_with_params("audio", format="mp3", bitrate="256k")
extractor.extract_audio_fragment("fragment.mp3", "00:01:30", "00:00:30")

一键执行脚本(Shell)

#!/bin/bash
# extract_all_audio.sh
# 显示帮助
usage() {
    echo "使用方法: $0 [输入目录] [输出格式]"
    echo "示例: $0 ./videos mp3"
    exit 1
}
# 检查参数
if [ $# -lt 1 ]; then
    usage
fi
INPUT_DIR="${1:-.}"
OUTPUT_FORMAT="${2:-mp3}"
OUTPUT_DIR="extracted_audios"
# 创建输出目录
mkdir -p "$OUTPUT_DIR"
# 遍历视频文件
find "$INPUT_DIR" -type f \( -name "*.mp4" -o -name "*.avi" -o -name "*.mkv" \
    -o -name "*.mov" -o -name "*.wmv" -o -name "*.flv" \) | while read file; do
    filename=$(basename "$file")
    basename="${filename%.*}"
    echo "正在处理: $filename"
    # 提取音频
    if [ "$OUTPUT_FORMAT" = "wav" ]; then
        ffmpeg -i "$file" -vn -acodec pcm_s16le "$OUTPUT_DIR/$basename.wav" -y
    else
        ffmpeg -i "$file" -vn -acodec libmp3lame -q:a 2 "$OUTPUT_DIR/$basename.mp3" -y
    fi
done
echo "完成!音频文件已保存到 $OUTPUT_DIR 目录"

使用建议

  1. 安装依赖:确保已安装 FFmpeg
  2. 选择合适的格式
    • MP3:通用性好,适合日常使用
    • WAV:无损,但文件大
    • AAC:质量高,体积小
  3. 调整参数:根据需求修改码率、采样率等

需要更多具体的功能吗?比如批量处理特定格式、添加音频过滤等?

抱歉,评论功能暂时关闭!