代码之家  ›  专栏  ›  技术社区  ›  Rick T

将youtube播放列表中的单个文件大小相加以获得总文件大小值

  •  -1
  • Rick T  · 技术社区  · 4 年前

    我可以得到 文件大小 youtube播放列表中的每个文件,但是 如何将所有单独的文件大小加在一起,以获得所有文件加在一起的总大小(MB或GB) ?

    示例:Linux/Uubuntu命令

    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
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   Arkadiusz Drabczyk    4 年前

    你似乎不知道如何分割输入——然后求和就可以了。

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

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

        2
  •  1
  •   M. Nejat Aydin    4 年前

    你几乎做到了:

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

    或使用 cut 和 tr :

    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
    
        3
  •  1
  •   Léa Gris    4 年前

    编写要馈送的整个算术 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

        4
  •  0
  •   Rick T    4 年前

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

    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
    
    推荐文章