如何保持ffmpeg作物检测的最高值

时间:2015-07-15 20:30:33

标签: bash video ffmpeg grep sh

案例:

我正在转换18000个商业广告的旧档案 我想自动将这种从DV转换为更轻和最新的h264 mp4

整个过程已经准备就绪,但我在第一部分停留:裁剪黑条......

使用的工具:

事情是:所有视频都不同,我不能使用一个静态值,因此我使用ffmpeg的精彩cropdetect工具,它在cli中输出这种行:

[Parsed_cropdetect_0 @ 0xbe5e960] x1:22 x2:697 y1:93 y2:483 w:672 h:384 x:24 y:98 pts:63 t:2.520000 crop=672:384:24:98
[Parsed_cropdetect_0 @ 0xbe5e960] x1:22 x2:697 y1:93 y2:483 w:672 h:384 x:24 y:98 pts:64 t:2.560000 crop=672:384:24:98
[Parsed_cropdetect_0 @ 0xbe5e960] x1:22 x2:697 y1:93 y2:484 w:672 h:384 x:24 y:98 pts:65 t:2.600000 crop=672:384:24:98
[Parsed_cropdetect_0 @ 0xbe5e960] x1:22 x2:697 y1:93 y2:496 w:672 h:400 x:24 y:96 pts:66 t:2.640000 crop=672:400:24:96
[Parsed_cropdetect_0 @ 0xbe5e960] x1:2 x2:717 y1:80 y2:496 w:704 h:416 x:8 y:80 pts:67 t:2.680000 crop=704:416:8:80
[Parsed_cropdetect_0 @ 0xbe5e960] x1:1 x2:718 y1:80 y2:496 w:704 h:416 x:8 y:80 pts:68 t:2.720000 crop=704:416:8:80
[Parsed_cropdetect_0 @ 0xbe5e960] x1:1 x2:718 y1:80 y2:496 w:704 h:416 x:8 y:80 pts:69 t:2.760000 crop=704:416:8:80
[Parsed_cropdetect_0 @ 0xbe5e960] x1:1 x2:718 y1:80 y2:496 w:704 h:416 x:8 y:80 pts:70 t:2.800000 crop=704:416:8:80
[Parsed_cropdetect_0 @ 0xbe5e960] x1:1 x2:718 y1:80 y2:496 w:704 h:416 x:8 y:80 pts:71 t:2.840000 crop=704:416:8:80

所以最后一部分:crop=给出剩余帧的结果(宽度,高度,从y点开始的x点。裁剪视频..

但是这些值在一个视频中并不总是相同如何从这几百行中提取“最大值”?

在这种情况下,只需保留crop=704:416:8:80

修改

实际上,结果应考虑最低x1,最高x2,最低y1和最高y2,然后在其中创建一个16的矩形...

2 个答案:

答案 0 :(得分:0)

有更好的方法可以肯定,但也许这可以作为你的蹦床:

#!/bin/bash

IFS=':'
while read a b c d; do
    w+=("$a")
    h+=("$b")
    x+=("$c")
    y+=("$d")
done < <(sed 's/.*crop=\(.*\)/\1/g' file)

IFS=$'\n'
echo "w_max=$(echo "${w[*]}" | sort -nr | head -n1)"
echo "w_min=$(echo "${w[*]}" | sort -n  | head -n1)"
echo "h_max=$(echo "${h[*]}" | sort -nr | head -n1)"
echo "h_min=$(echo "${h[*]}" | sort -n  | head -n1)"
echo "x_max=$(echo "${x[*]}" | sort -nr | head -n1)"
echo "x_min=$(echo "${x[*]}" | sort -n  | head -n1)"
echo "y_max=$(echo "${y[*]}" | sort -nr | head -n1)"
echo "y_min=$(echo "${y[*]}" | sort -n  | head -n1)"
# do your math here

输出结果为:

w_max=704
w_min=672
h_max=416
h_min=384
x_max=24
x_min=8
y_max=98
y_min=80

你最后仍然应该做&#34; 16&#34; 数学的倍数。

答案 1 :(得分:0)

输出中的每一行显示到目前为止该过程遇到的最大区域,而不是每一帧的确切区域。