Проблема с сохранением вывода времени видео mediainfo в массив

Хоть убей, я не могу понять, почему я не могу сохранить вывод команды mediainfo --Inform в массив. Раньше я делал циклы for в Bash без проблем, возможно, здесь мне не хватает чего-то действительно очевидного. Или, возможно, я иду об этом совершенно неправильно.

#!/bin/bash

for file in /mnt/sda1/*.mp4

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

done

echo ${vidtime[@]}

Выходом всегда является время последнего файла, обработанного в цикле, а остальные элементы массива равны нулю.

Я работаю над сценарием для бесконечного воспроизведения видео на Raspberry Pi, но обнаружил, что omxplayer не всегда завершает работу в конце видео, это действительно сложно воспроизвести, поэтому я отказался от устранения неполадок с корнем. причина. Я пытаюсь построить некоторую логику, чтобы убить любые процессы omxplayer, которые работают дольше, чем должны.


person ErichL    schedule 30.06.2014    source источник


Ответы (2)


Попробуйте. Обратите внимание на оператор +=. Вы также можете добавить кавычки вокруг $file, если ваши имена файлов содержат пробелы:

#!/bin/bash

for file in /mnt/sda1/*.mp4

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

done

echo ${vidtime[@]}
person brianlq    schedule 30.06.2014
comment
Это исправило, спасибо! Почему в данном случае требуется оператор +=? Я не вижу, чтобы он использовался ни в одном из примеров, на которые я ссылался в прошлом. - person ErichL; 01.07.2014
comment
Поскольку вы повторяете команды mediainfo для набора файлов по одному, ваш массив vidtime постоянно сбрасывается, что объясняет, почему вы можете видеть только последний файл в своем массиве. - person brianlq; 03.07.2014

Эффективнее сделать это следующим образом:

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

Нет необходимости использовать цикл for и многократно вызывать mediainfo.

person konsolebox    schedule 02.07.2014
comment
Я за то, чтобы сделать вещи более эффективными, спасибо за совет! - person ErichL; 03.07.2014