You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从命令行批量提取.mpga音频文件的时长属性

批量提取Ubuntu下.mpga音频文件时长的方法

stat命令仅能获取文件系统层面的属性(如大小、修改时间),无法读取媒体文件的元数据(如播放时长),你可以用以下几种成熟工具批量提取信息,无需手动解析文件头:

方法一:使用ffprobe(ffmpeg套件)

ffprobe是ffmpeg套件中专门用于提取媒体元数据的工具,Ubuntu下可直接安装:

sudo apt update && sudo apt install ffmpeg

单个文件提取时长

执行以下命令可输出单个.mpga文件的时长(单位:秒):

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 你的文件.mpga

如果需要转成时:分:秒.毫秒的格式,可搭配awk处理:

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 你的文件.mpga | awk '{printf "%02d:%02d:%02.2f", int($1/3600), int(($1%3600)/60), $1%60}'

批量提取脚本

创建bash脚本批量处理当前目录下所有.mpga文件,将文件名和时长写入audio_info.txt:

#!/bin/bash
output_file="audio_info.txt"
# 写入表头
echo "文件名,时长(时分秒),时长(秒)" > "$output_file"

for file in *.mpga; do
    # 跳过目录,只处理文件
    if [ -f "$file" ]; then
        # 获取秒数时长
        duration_sec=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file")
        # 转成时分秒格式
        duration_hms=$(echo "$duration_sec" | awk '{printf "%02d:%02d:%02.2f", int($1/3600), int(($1%3600)/60), $1%60}')
        # 写入文件
        echo "$file,$duration_hms,$duration_sec" >> "$output_file"
    fi
done

保存为extract_audio_info.sh,赋予执行权限后运行:

chmod +x extract_audio_info.sh && ./extract_audio_info.sh

方法二:使用mediainfo

mediainfo是一款专门显示媒体文件详细信息的工具,输出格式更人性化:

sudo apt update && sudo apt install mediainfo

单个文件提取时长

直接输出格式化的时长:

mediainfo --Output="Audio;%Duration/String3%" 你的文件.mpga

批量提取脚本

同样用bash批量处理:

#!/bin/bash
output_file="audio_info.txt"
echo "文件名,时长" > "$output_file"

for file in *.mpga; do
    if [ -f "$file" ]; then
        duration=$(mediainfo --Output="Audio;%Duration/String3%" "$file")
        echo "$file,$duration" >> "$output_file"
    fi
done

方法三:Python脚本(mutagen库)

如果你更熟悉Python,可使用mutagen库读取MP3/MPGA文件的元数据:
首先安装依赖:

pip install mutagen

然后创建Python脚本:

from mutagen.mp3 import MP3
import os

# 输出文件路径
output_path = "audio_info.txt"

with open(output_path, "w", encoding="utf-8") as f:
    # 写入表头
    f.write("文件名,时长(秒),时长(时分秒)\n")
    # 遍历当前目录下的文件
    for filename in os.listdir("."):
        if filename.lower().endswith(".mpga") and os.path.isfile(filename):
            try:
                # 读取音频文件信息
                audio = MP3(filename)
                duration_sec = audio.info.length
                # 转换为时分秒格式
                hours = int(duration_sec // 3600)
                minutes = int((duration_sec % 3600) // 60)
                seconds = duration_sec % 60
                duration_hms = f"{hours:02d}:{minutes:02d}:{seconds:.2f}"
                # 写入行
                f.write(f"{filename},{duration_sec:.2f},{duration_hms}\n")
            except Exception as e:
                print(f"处理{filename}时出错: {str(e)}")

运行脚本即可生成结果文件。

内容的提问来源于stack exchange,提问作者user25235208

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 15:30:11