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 请注意,这也将为您转换小时等:). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |