LINUX.ORG.RU

История изменений

Исправление crutch_master, (текущая версия) :

Подсчёт длительности в сек (avconv выдаёт hh:MM:ss, переводим в секунды)

#!/bin/bash
d=$(avconv -i "$1" |& grep Duration | cut -d , -f 1 | cut -d " " -f 4 | cut -b -8)
s=$(date -ud "1970-01-01 $d" +%s)
echo $s
Составление списка (~/sh/durations.sh - скрипт выше)
#!/bin/bash
sum=0;
dir=$1; #каталог с файлами
dur=$2; #общая длительность не менее сек
cd $dir;
IFS=$(echo -en "\n\b");
ls -1 --sort=t | tac | while read f; do 
	t=$(~/sh/duration.sh "$f");
	if [ $dur -ge $sum ]; then 
            echo $f
        fi
	sum=$(($sum+$t)); #длительность не менее $dur
done
Потом делаешь sort -R выхлопа и скармливаешь его твоему проигрывателю. Тут --sort=t, потому что я делал touch всех проигрываемых файлов. Работает так: берётся x файлов на y минут, которые давно не проигрывались, перемешивается и скармливается vlc.
inb4: по нескольким каталогам - прикрути find вместо ls.

Исправление crutch_master, :

Подсчёт длительности в сек (avconv выдаёт hh:MM:ss, переводим в секунды)

#!/bin/bash
d=$(avconv -i "$1" |& grep Duration | cut -d , -f 1 | cut -d " " -f 4 | cut -b -8)
s=$(date -ud "1970-01-01 $d" +%s)
echo $s
Составление списка (~/sh/durations.sh - скрипт выше)
#!/bin/bash
sum=0;
dir=$1; #каталог с файлами
dur=$2; #общая длительность не менее сек
cd $dir;
IFS=$(echo -en "\n\b");
ls -1 --sort=t | tac | while read f; do 
	t=$(~/sh/duration.sh "$f");
	if [ $dur -ge $sum ]; then 
            echo $f
        fi
	sum=$(($sum+$t)); #длительность не менее $dur
done
Потом делаешь sort -R выхлопа и скармливаешь его твоему проигрывателю. Тут --sort=t, потому что я делал touch всех проигрываемых файлов. Работает так: берётся x файлов на y минут, которые давно не проигрывались, перемешивается и скармливается vlc.

Исходная версия crutch_master, :

Подсчёт длительности в сек (avconv выдаёт hh:MM:ss, переводим в секунды)

#!/bin/bash
d=$(avconv -i "$1" |& grep Duration | cut -d , -f 1 | cut -d " " -f 4 | cut -b -8)
s=$(date -ud "1970-01-01 $d" +%s)
echo $s
Составление списка (~/sh/durations.sh - скрипт выше)
#!/bin/bash
sum=0;
dir=$1; #каталог с файлами
dur=$2; #общая длительность не менее сек
cd $dir;
IFS=$(echo -en "\n\b");
ls -1 --sort=t | tac | while read l; do 
	t=$(~/sh/duration.sh "$l");
	if [ $dur -ge $sum ]; then 
            echo $l
        fi
	sum=$(($sum+$t)); #длительность не менее $dur
done
Потом делаешь sort -R выхлопа и скармливаешь его твоему проигрывателю. Тут --sort=t, потому что я делал touch всех проигрываемых файлов. Работает так: берётся x файлов на y минут, которые давно не проигрывались, перемешивается и скармливается vlc.