-2

我在 shell 中运行这个语句

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. 然后在每 50 行之后添加(总和)pkt_size 行号。
4

1 回答 1

1

我已经在另一个答案中向您展示了如何迭代所有文件并附加结果。这就是你将如何使用@LordNeckbeard的命令bash一个文件计算内容的方法。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

这足以让您开始使用 shell 算术,因此请参阅文档以了解更多问题。

于 2015-05-08T09:35:53.187 回答