【问题标题】:How to add many values?如何添加多个值?
【发布时间】:2011-09-08 12:48:28
【问题描述】:

在我之前的post 中,我学习了如何从ffmpeg 中提取一个文件的持续时间。

ffmpeg -i file.mp4 2>&1 | grep Duration | awk '{print $2}' | tr -d ,

这将输出类似于00:08:07.98 的内容。

我想最终得到一个脚本,我可以说

get_duration.sh *

它会添加所有持续时间长度并输出类似于04:108:1107.198 的内容。

它不必将分钟转换为小时等等。不过会很好=)

我可以列出所有的长度

for f in *; do
  ffmpeg -i "$f" 2>&1 | grep Duration | awk '{print $2}' | tr -d ,;
done

但是如何添加这些奇怪的格式数字呢?

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    使用以下 awk 脚本应该可以正常工作:

    BEGIN { h=0; m=0; s=0; cs=0; }
    /Duration:/  { 
      split($2, time_arr, ":");
      h = h + time_arr[1];
      m = m + time_arr[2];
      split(time_arr[3],time_arr2,".");
      s = s + time_arr2[1];
      cs = cs + time_arr2[2];
      }
    END {
      s = s + int(cs/100);
      cs = cs % 100;
      m = m + int(s / 60);
      s = s % 60;
      h = h + int(m / 60);
      m = m % 60;
      printf "%02d:%02d:%02d.%02d\n", h, m, s, cs;
    }
    

    把这个放到add_durations.awk,就可以了:

    for f in *; do ffmpeg -i "$f" 2>&1; done | awk -f add_durations.awk
    

    请注意,这也会为您转换时间等 :)。

    【讨论】:

    • 小心:我认为您的毫秒值会将 9 毫秒打印为 0.9,而不是 0.009。
    • 谢谢!希望现在更正。我愚蠢地将它误读为“s.ms”而不是百分之一秒。我现在为所有数字添加了零填充,例如 ffmpeg 命令。
    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 2019-05-30
    • 2020-02-21
    • 2020-03-06
    相关资源
    最近更新 更多