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

如何在Bash中为mediainfo固定格式输出绑定逻辑含义固定的变量

解决方案

原脚本用tr '|' '\n '加awk '{print $1}'的处理逻辑会直接丢弃空字段,导致字段数量随媒体文件属性变化,最终变量赋值错位。修改后会保留空字段占位,原有变量的逻辑对应关系完全不变,不会出现错位问题。

修改后可直接使用的代码

#!/usr/bin/env bash

function tester_mediainfo() {
    # 原有模板完全保留,字段顺序不变
    template="General;%OverallBitRate/String%|
Video;%Width%|%Height%|%FrameRate/String%|%DisplayAspectRatio/String%|%ScanType/String%|%FrameRate/String%|%ChromaSubsampling/String%|%BitDepth%|%InternetMediaType%|%Format/String%|%Format_Profile%|%Format_Settings%|%BitRate_Mode/String%|%BitRate_Nominal/String%|%BitRate_Maximum/String%|%ColorSpace%|
Audio;%BitRate/String%|%Format/String%|%Channel(s)/String%|%BitRate_Mode/String%|%BitRate/String%|%SamplingRate/String%"

    # 仅替换video/前缀,保留所有|分隔的原始字段,包括空值
    raw_output=$(mediainfo --Output="$template" "$1" | sed 's/video\///g')
    # 直接用|作为分隔符读取,空字段会自动赋值为空字符串,不会占用后续字段位置
    IFS='|' read -r A B C D E F G H I J K L M N _ <<< "$raw_output"
    # 变量顺序和模板字段顺序严格对应,原有逻辑完全不需要改动
}

# 传入路径加双引号,兼容带空格的文件名
tester_mediainfo "$1"

关键修改说明

  • 移除了会丢弃空值的tr、awk处理步骤,从根源避免字段数量变化
  • 直接用模板自带的|作为分隔符读取,空字段会保留为空值,不会触发错位
  • 原有A到N变量的业务含义完全和之前一致,你后续的IF判断逻辑不需要做任何修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:27:02