ffprobe | ShowFrames |包大小|划分|加

时间:2015-05-07 13:47:28

标签: bash shell ffmpeg grep ffprobe

我在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行之后添加(sum)pkt_size行号。

1 个答案:

答案 0 :(得分:1)

我已经在another answer向您展示了如何迭代所有文件并附加结果。这是使用 @LordNeckbeard &#39> 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算法,因此请参阅文档以获取更多问题。