如何让mediainfo输出的文件时长以逗号分隔或换行显示?
解决批量获取视频时长并格式化输出的问题
首先修正原脚本的核心问题:原命令for i in /Volumes/foo仅会遍历这个目录本身,而非目录下的所有文件。要批量处理目录内的文件,需要调整遍历路径,再结合需求修改输出格式:
方案1:每个时长单独换行显示
直接调整遍历路径为目录下的所有文件,mediainfo的输出会自动每行一个时长:
for i in /Volumes/foo/*; do mediainfo --Inform="Video;%Duration%" "$i" done
如果需要包含子目录里的文件,用find更稳妥:
find /Volumes/foo -type f -exec mediainfo --Inform="Video;%Duration%" {} \;
方案2:用逗号分隔所有时长
方法A:通过变量收集后输出
先把所有时长存到变量里,最后统一拼接成逗号分隔的格式:
durations="" for i in /Volumes/foo/*; do duration=$(mediainfo --Inform="Video;%Duration%" "$i") durations="${durations}${duration}," done echo "$durations"
方法B:用paste命令合并输出
通过管道把所有单行输出合并成逗号分隔的字符串:
for i in /Volumes/foo/*; do mediainfo --Inform="Video;%Duration%" "$i" done | paste -sd ',' -
如果要处理子目录文件,结合find使用:
find /Volumes/foo -type f -exec mediainfo --Inform="Video;%Duration%" {} \; | paste -sd ',' -
注:如果部分文件不含视频流,mediainfo会输出空值,最终结果会出现连续逗号,可根据需求添加判断逻辑过滤空值。
内容的提问来源于stack exchange,提问作者Bleakley
相关产品推荐
相关产品推荐

