加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 如何添加许多值?

发布时间:2020-12-14 00:51:25 所属栏目:Linux 来源:网络整理
导读:在我之前的 post中,我学会了如何从一个文件的ffmpeg中提取持续时间. ffmpeg -i file.mp4 21 | grep Duration | awk '{print $2}' | tr -d, 这会产生类似于00:08:07.98的东西. 我想最终得到的是一个脚本,我可以说 get_duration.sh * 它会添加所有持续时间长
在我之前的 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

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

解决方法

使用以下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.%02dn",h,m,s,cs;
}

把它放在add_durations.awk中,然后你可以这样做:

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

请注意,这也将为您转换小时等:).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读