【2025-04-23】mkv文件用ffmpeg批量提取音频文件

178 阅读1分钟

下载ffmpeg并实现mkv文件提取.wav文件

brew install ffmpeg

for file in *.mkv; do ffmpeg -i "$file" -vn -acodec pcm_s16le -ar 44100 -ac 2 "${file%.mkv}.wav"; done
  • ffmpeg -i "$file" :调用 ffmpeg 命令,并指定输入文件为当前遍历到的 .mkv 文件。
  • -vn :去掉视频流,因为我们只需要音频部分。
  • -acodec pcm_s16le :指定音频编码器为 pcm_s16le(这是常见的 WAV 音频编码格式,16 位小端序 PCM 编码)。
  • -ar 44100 :设置音频采样率为 44100Hz,这是 CD 音质标准采样率,可根据实际需求调整。
  • -ac 2 :设置音频声道数为 2(立体声),也可根据原视频音频声道情况调整(如原音频是 5.1 声道,可设为 6 等)。
  • "${file%.mkv}.wav" :通过参数替换去掉原文件名的 .mkv 后缀,并添加 .wav 后缀作为输出文件名,这样输出的 WAV 文件名与原 MKV 文件名对应。

注册google cloud并下载.json的秘钥

github.com/apachecn/co…

设置环境变量

vi ~/.zshrc


export GOOGLE_APPLICATION_CREDENTIALS="/path_xxx/xxx.json"


source ~/.zshrc

用python切分文件

import os
import subprocess

# 遍历当前目录下所有的 .wav 文件
for filename in os.listdir("."):
    if filename.endswith(".wav"):
        # 获取不包含扩展名的文件名
        base_name = os.path.splitext(filename)[0]
        # 切分的时长,这里是 9 分钟,转换为秒是 540
        segment_duration = 540

        # 使用 ffmpeg 进行切分
        command = [
            "ffmpeg",
            "-i", filename,  # 输入文件
            "-f", "segment",  # 使用 segment 格式
            "-segment_time", str(segment_duration),  # 设置每段时长
            "-c", "copy",  # 直接复制,不重新编码
            f"{base_name}_%03d.wav"  # 输出文件名,包含序号
        ]

        # 执行命令
        subprocess.run(command)