【问题标题】:Trouble storing the output of mediainfo video times into an array无法将 mediainfo 视频时间的输出存储到数组中
【发布时间】:2014-08-21 09:36:05
【问题描述】:

对于我的一生,我无法弄清楚为什么我不能将 mediainfo --Inform 命令的输出存储到一个数组中。我之前在 Bash 中完成了 for 循环没有问题,也许我在这里遗漏了一些非常明显的东西。或者,也许我的做法完全错误。

#!/bin/bash

for file in /mnt/sda1/*.mp4

  do vidtime=($(mediainfo --Inform="Video;%Duration%" $file))

done

echo ${vidtime[@]}

输出始终是循环中处理的最后一个文件的时间,数组的其余元素为空。

我正在编写一个脚本以在 Raspberry Pi 上无休止地播放视频,但我发现 omxplayer 并不总是在视频结束时退出,它真的很难重现,所以我放弃了排除根本原因。我正在尝试构建一些逻辑来终止任何运行时间超过应有时间的 omxplayer 进程。

【问题讨论】:

    标签: arrays bash shell raspbian mediainfo


    【解决方案1】:

    试一试。注意 += 运算符。如果您的文件名包含空格,您可能还想在 $file 周围添加引号:

    #!/bin/bash
    
    for file in /mnt/sda1/*.mp4
    
      do vidtime+=($(mediainfo --Inform="Video;%Duration%" "$file"))
    
    done
    
    echo ${vidtime[@]}
    

    【讨论】:

    • 解决了,谢谢!为什么在这种情况下需要 += 运算符?我没有看到它在我过去引用的任何示例中使用过。
    • 由于您一次遍历一组文件的 mediainfo 命令,因此您的 vidtime 数组正在不断重置,这可以解释为什么您只能看到最后一个文件你的数组。
    【解决方案2】:

    这样做效率更高:

    read -ra vidtime < <(exec mediainfo --Inform='Video;%Duration% ' -- /mnt/sda1/*.mp4)
    

    无需使用for 循环并重复调用mediainfo

    【讨论】:

    • 我全力支持让事情变得更有效率,感谢您的提示!
    猜你喜欢
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2012-10-30
    • 2014-07-10
    • 2019-03-10
    • 2013-12-31
    相关资源
    最近更新 更多