如何从命令行批量提取.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
相关产品推荐
相关产品推荐

