2015-05-07 39 views
-2

我在外殼ffprobe | ShowFrames |數據包大小|除| |添加

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

運行此語句,這將是巨大的,如果我能得到這個信息太;

  1. 當我用grep pkt_size一行數字,然後我想腳本 - 分 100每pkt_size號,
  2. 然後添加(總和)pkt_size行後50行數每。
+0

1.'for'循環末尾沒有'done'。 2.使用正確格式的源代碼。 –

+0

-show_frames輸出中沒有「數據」字段。你想grep哪個領域?如果你能解釋你想要做什麼,那麼可能會提出不同的方法。 – Alam

+0

對數據進行了很好的處理就是一個例子 - 我已經重新編輯了腳本。 1)搜索文件夾中所有的mp4文件, 2)不要ffprobe -show_frames 3)文件夾 4在每個視頻創建單獨的輸出文件)從輸出 5拍攝「pkt_size」行)添加(和)每隔50行(50行)後的pkt_size數字 6)最後,用每一個和除1000(步驟5) – Ben

回答

1

我已經在another answer中向您展示瞭如何迭代所有文件並追加結果。這是你如何去計算bash一個文件,使用@ LordNeckbeardffprobe命令。

你的作業是修改和整合兩個答案。

#!/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算法,所以請參考文檔以獲取更多問題。

+0

嗨Aergistal, 非常感謝您的努力。真的很感激它。我對這個shell編程真的很陌生。這是請忽略我愚蠢的問題。 我把你的代碼保存到了正確的路徑/ to/file/file.mp4 Ben @ VirtualBox〜/ Downlaods $ chmod + x script.sh 未找到命令 Ben @ ben-VirtualBox〜/ Downlaods $ script.sh 未找到命令 – Ben

+0

請指導執行此特定文件。 – Ben