2015-05-07 4 views
-2

Я бегу это утверждение в оболочкеffprobe | Показать иллюстрацию Размер пакета | Разделить | Добавить

for file in /path/to/files/*.mp4; do ffprobe -show_frames $file | grep "pkt_size" > ${file}.txt 

сделано

Было бы замечательно, если бы я мог получить эту информацию тоже;

  1. Когда я Grep pkt_size строки с числами, то я хочу, чтобы сценарий - разделяй каждый pkt_size номер с 100,
  2. затем добавить (сумма) pkt_size ряд чисел каждой после 50 строк.
+0

1. В конце цикла 'for' нет' done'. 2. Используйте правильное форматирование для исходного кода. –

+0

В «-show_frames» нет данных. В каком поле вы хотите grep? Если вы можете объяснить, что именно вы хотите сделать, возможно, это может предложить другой подход. – Alam

+0

Яркое использование данных было примером - я снова отредактировал сценарий. 1) Искать все MP4s в папке, 2) Есть ли ffprobe -show_frames 3) Создать индивидуальный выходной файл для каждого видео в папке 4) Возьмите строку «pkt_size» с выхода 5) Добавить (сумма) pkt_size числа после каждых 50 строк (набор из 50 строк) 6) наконец, разделите на 1000 с каждой суммой (шаг 5) – Ben

ответ

1

Я уже показал вам в 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 

Это более чем достаточно, чтобы вы начали с арифметикой оболочки так, пожалуйста, обратитесь к документации для дальнейших вопросов.

+0

Hi Aergistal, Большое спасибо за ваши усилия. Действительно ценю это. Я действительно новичок в этом программировании оболочки. Вот, пожалуйста, игнорируйте мои глупые вопросы. Я сохранил ваш код с правильным путем/в/file/file.mp Но это то, что происходит, Ben @ ben-VirtualBox ~/Downlaods $, который bash /bin/bash Ben @ ben-VirtualBox ~/Downlaods $ chmod + x script.sh Команда не найдена Ben @ ben-VirtualBox ~/Downlaods $ script.sh Команда не найдена – Ben

+0

Пожалуйста, руководство для выполнения этого конкретного файла. – Ben

 Смежные вопросы

  • Нет связанных вопросов^_^