0%

小飞手4 DVR 卡录转码

小飞手的DVR卡录数据导出后获得的视频比例是2:1,视频长度只有三分钟,格式是 avi 的。并去视频播放进度也只有 10 秒,超过播放进度后还能够继续播放。
这里我提供一个脚本修正以上的问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/usr/bin/env bash

set -e

help="转换小飞手4DVR卡录视频到指定格式
下面列本脚本的所有控制参数:

4x3 转换视频到4:3(附加 mute 可让视频静音)
16x9 转换视频到16:9(附加 mute 可让视频静音)
link 合并视频文件(后面跟需要需要合并的文件名,例如 link 1.avi 2.avi)
linkAndDelete 功能于合并相同,但是在文件合并后会删除输入文件
delOut 删除转换后的文件
clean 删除转换前的文件
"

function join_by {
local d=${1-} f=${2-}
if shift 2; then
printf %s "$f" "${@/#/$d}"
fi
}

if [ "$1" == "" ];then
echo "$help"
exit 0
elif [ "$1" == "link" ] || [ "$1" == "linkAndDelete" ]; then
flg="$1"
randS=$(shuf -er -n8 {A..Z} {a..z} {0..9} | paste -sd "")
linkFile="link_$randS.txt"
extension=""
files=()
arr=()
shift
for v in "${@}";do
# shellcheck disable=SC2179
files+=($v)
filename=$(basename -- "$v")
extension="${filename##*.}"
filename="${filename%.*}"
# shellcheck disable=SC2206
arr+=($filename)
echo "file $v" >> "$linkFile"
done

outFile=$(join_by - "${arr[@]}")
outFile="$outFile.${extension}"

ffmpeg -f concat -i "$linkFile" -c copy "$outFile"
rm "$linkFile"

if [ "$flg" == "linkAndDelete" ];then
for v in "${files[@]}";do
rm "$v"
done
fi
exit 0
fi

dir="./" # 扫描的文件夹
p4x3="640x480" # 4:3
p16x9="854x480" # 16:6
inExt="avi" # 输入文件的文件后缀
outExt="mp4" # 输出文件的文件后缀
lenExt=${#inExt}

mute=""
proportion=""
for v in "$@";do
if [ "$v" == "4x3" ];then
rm "$outFile"
proportion="$p4x3"
elif [ "$v" == "16x9" ]; then
proportion="$p16x9"
elif [ "$v" == "mute" ]; then
mute="-an"
fi
done

files=$(ls ${dir}*.${inExt})
for v in $files; do
outFile="${v:0:-$lenExt}$outExt"

if [ "$1" == "delOut" ];then
rm "$outFile"
elif [ "$1" == "clean" ]; then
rm "$v"
elif [ "${proportion}" != "" ]; then
if [ "$mute" == "" ];then
ffmpeg -i "$v" -s "$proportion" "$outFile"
else
ffmpeg -i "$v" -s "$proportion" "$mute" "$outFile"
fi
else
echo "参数 $1 不在支持访问内"
exit 0
fi
done

注意需要先转码再合并,不然会会出现视频进度不正常的问题。
视频可能会出现一会快一会慢的问题,这是正常的。你可以检查一下原始的视频文件,原始的视频文件,录制出来就有这个问题