在 youtube 播放列表中添加单个文件大小以获得总文件大小值

Adding up individual filesizes in a youtube playlist to get total filesize value

我可以获得 YouTube 播放列表中每个文件的文件大小,但是我如何将所有单独的文件大小加在一起以获得以兆字节为单位的总大小或所有这些加在一起的千兆字节?

示例:Linux / Ubuntu 命令

youtube-dl --get-filename -o "File size for %(id)s (%(format_id)s): %(filesize)s = 125*%(duration)s*%(tbr)s" -f "22/best" --ignore-config  "https://www.youtube.com/watch?v=b26ZBgspv7M&list=PLLYQF5WvJdJXE-aP7oF5ucXcCfHmub34A" | (IFS='='; while read -r a b; do echo "$a = $(echo "$b" | bc)"; done)
File size for b26ZBgspv7M (22): NA  = 632016.000
File size for nPr3qtZ5FVE (18): NA  = 47577837.000
File size for 8FCsS6s1Z0k (18): NA  = 67788616.500
File size for TZANoOWFX1M (18): 62402644  = 62393587.750
File size for XA5eobevGv8 (22): NA  = 117960449.500
File size for lDplUpPoCcI (22): NA  = 175676293.75
File size for a7TUIkn3qjY (22): NA  = 299391049.125
File size for HFPObieGamg (22): NA  = 270756696.875
File size for PiiDs8dzSXk (22): NA  = 55946363.250
File size for tth0p7nK18A (22): NA  = 31281180.00
File size for Z_xj9ZTV8ak (22): NA  = 126366879.000
File size for Y_YHqM5nTHA (22): NA  = 42328527.000
File size for BjV-fRCPgAM (22): NA  = 42225633.375

您似乎知道如何拆分输入 - 然后求和。

youtube-dl ..... | (
   sum=0
   while IFS='=' read -r a b; do
       sum=$(echo "$sum + $b" | bc)
   done
   echo "The sum: $sum"
)

awk感兴趣,这是一个非常方便的工具。您可以搜索“如何在 awk 中对列求和”,确保您会得到大量示例。

您快完成了:

youtube-dl ...args...  |
{ while IFS='=' read -r a b; do printf '%s + ' "$b"; done; echo 0; }  | bc

或使用 cuttr:

youtube-dl ...args...  |
{ cut -d= -f2 | tr '\n' +; echo 0; } | bc

或使用sed

youtube-dl ...args...  |
sed 's/.*=//;H;$!d;g;s/.//;s/\n/+/g' | bc

组成整个算法以提供给 bc:

#!/usr/bin/env sh

echo "125*(0$(youtube-dl --get-filename -o "+(%(duration)s*%(tbr)s)" -f "22/best" --ignore-config  "https://www.youtube.com/watch?v=b26ZBgspv7M&list=PLLYQF5WvJdJXE-aP7oF5ucXcCfHmub34A"))" |
{ tr -d '\n'; echo;} |
bc -l

首先打印 125*(0 然后 youtube-dl 打印一系列 +(duration*tbr) 后跟一个换行符, 然后添加尾随 ) 结果是这样的:

125*(0+(duration*tbr)
+(duration*tbr)
+(duration*tbr)
)

要将其转换为有效的 bc 计算语法,需要使用 tr -d '\n' 丢弃换行符,并添加 echo

最后的换行符

包括单个文件大小,最后是总和。

youtube-dl --get-filename -o "File size for %(id)s (%(format_id)s): %(filesize)s = 125*%(duration)s*%(tbr)s" -f "22/best" --ignore-config  "https://www.youtube.com/watch?v=b26ZBgspv7M&list=PLLYQF5WvJdJXE-aP7oF5ucXcCfHmub34A" | (
       sum=0
       while IFS='=' read -r a b; do
           echo "$a = $(echo "$b" | bc)"
           sum=$(echo "$sum + $b" | bc)
       done
       echo "The sum: $sum"
    )

输出:

File size for b26ZBgspv7M (22): NA  = 632016.000
File size for nPr3qtZ5FVE (18): NA  = 47577837.000
File size for 8FCsS6s1Z0k (18): NA  = 67788616.500
File size for TZANoOWFX1M (18): 62402644  = 62393587.750
File size for XA5eobevGv8 (22): NA  = 117960449.500
File size for lDplUpPoCcI (22): NA  = 175676293.75
File size for a7TUIkn3qjY (22): NA  = 299391049.125
File size for HFPObieGamg (22): NA  = 270756696.875
File size for PiiDs8dzSXk (22): NA  = 55946363.250
File size for tth0p7nK18A (22): NA  = 31281180.00
File size for Z_xj9ZTV8ak (22): NA  = 126366879.000
File size for Y_YHqM5nTHA (22): NA  = 42328527.000
File size for BjV-fRCPgAM (22): NA  = 42225633.375
The sum: 1340325129.125