Я уже показал вам в another answer, как итерировать все файлы и добавлять результаты. Вот как вы могли бы вычислить материал в bash
для один файл, используя @LordNeckbeard's ffprobe
команда.
Ваша домашняя работа заключается в изменении и объединении двух ответов.
#!/bin/bash
file=/path/to/file.mp4
if [ ! -f $file ]; then
echo Error: File not found
exit 1
fi
pkt_sizes=$(ffprobe -show_entries frame=pkt_size -of default=noprint_wrappers=1:nokey=1 -i $file -loglevel 0)
function print_sum {
#use `bc` for floating point operations
sum=$(echo "scale=${precision};${sum}/100" | bc -l)
echo "SUM("$start","$i")="$sum
}
i=1
start=1
sum=0
precision=3
#compute/print sum every 50 packets
for size in $pkt_sizes; do
((sum+= size))
if (($i % 50 == 0)); then
print_sum
sum=0
start=$((i + 1))
fi
((i++))
done;
#sum last packets (n < 50)
if (("$start" < "$i")); then
((i--))
print_sum
fi
Это более чем достаточно, чтобы вы начали с арифметикой оболочки так, пожалуйста, обратитесь к документации для дальнейших вопросов.
1. В конце цикла 'for' нет' done'. 2. Используйте правильное форматирование для исходного кода. –
В «-show_frames» нет данных. В каком поле вы хотите grep? Если вы можете объяснить, что именно вы хотите сделать, возможно, это может предложить другой подход. – Alam
Яркое использование данных было примером - я снова отредактировал сценарий. 1) Искать все MP4s в папке, 2) Есть ли ffprobe -show_frames 3) Создать индивидуальный выходной файл для каждого видео в папке 4) Возьмите строку «pkt_size» с выхода 5) Добавить (сумма) pkt_size числа после каждых 50 строк (набор из 50 строк) 6) наконец, разделите на 1000 с каждой суммой (шаг 5) – Ben