-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconvertVideosFolder.sh
More file actions
executable file
·177 lines (162 loc) · 5.84 KB
/
convertVideosFolder.sh
File metadata and controls
executable file
·177 lines (162 loc) · 5.84 KB
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#!/bin/bash
# This command takes all videos in VIDEO_DIR/input and does
# * merges all videos into one video uning ffmepg
# * it writes the timestamp of the first video file to the generated output file
# * generates an outputfilename based on input parameter and timestamp of first input file
source /links/bin/video_functions.sh
# getTimestamps()
# {
# if [ "${EXTENSION}" == "MTS" ]; then
# TIMESTAMP=$(mediainfo --Inform="General;%Recorded_Date%" "${1}")
# else
# TIMESTAMP=$(mediainfo --Inform="Video;%Encoded_Date%" "${1}")
# ## hardcode timestamp if not available
# #TIMESTAMP="UTC 2013-05-24 19:35:22"
# TIMESTAMP=${TIMESTAMP:4}
# fi
# echo "MEDIATIMESTAMP=$TIMESTAMP" # UTC 2020-01-18 13:27:09
# ORIGTIMESTAMP_UNIX_UTC=$(TZ=UTC date +'%s' -d "${TIMESTAMP}")
# echo "ORIGTIMESTAMP_UNIX_UTC=${ORIGTIMESTAMP_UNIX_UTC}"
# ORIGTIMESTAMP_UNIX=$(TZ="Europe/Berlin" date +'%s' -d@"${ORIGTIMESTAMP_UNIX_UTC}")
# #echo "ORIGTIMESTAMP_UNIX=${ORIGTIMESTAMP_UNIX}"
# ORIGTIMESTAMP_ISO8601=$(date -d@"${ORIGTIMESTAMP_UNIX}" +'%Y%m%dT%H%M%S')
# #echo "ORIGTIMESTAMP_ISO8601=${ORIGTIMESTAMP_ISO8601}"
# #ORIGTIMESTAMP_UNIX=`stat -c %Y "${1}"`
# ORIGTIMESTAMP=$(date -d@"${ORIGTIMESTAMP_UNIX}" +'%Y%m%d_%H%M%S')
# DATESTAMP4FILENAME=$(date -d@"${ORIGTIMESTAMP_UNIX}" +'%m%d')
# TIMETAMP4FILENAME=$(date -d@"${ORIGTIMESTAMP_UNIX}" +'%H%M')
# echo "ORIGTIMESTAMP=${ORIGTIMESTAMP}"
# #ORIGTIMESTAMP4FFMPEG=$(date -d@"${ORIGTIMESTAMP_UNIX}" +'%Y%m%d %H%M%S')
# }
processFile()
{
FBNAME=$(basename "${1}")
echo FBNAME=$FBNAME
FBNAME_NOEXTENSION="${FBNAME%.*}"
EXTENSION="${FBNAME##*.}"
#echo "EXTENSION=${EXTENSION}"
resetValuesToConfig
verifyOutputExtension "${1}"
getVideoTitle "${1}"
if [ "${CONFIG[TIMESTAMP_METHOD]}" == "" ];
then
getTimestamps "${1}"
else
getTimestampsFromFilename "${1}"
fi
getGPSInfo "${1}"
getCamera "${1}"
#temp fix new files already concatenated but not renamed
if [[ "${TITLE}" != "" ]];
then
#TITLE was not set, we need to compute filename
if [ $ADD_INDEX_TO_FILENAME ]; then
OUTPUTFILENAME="${VIDEO_DIR}/output/${DATESTAMP4FILENAME}_${PADDEDINDEX}_${OUTPUTNAME}_${TIMESTAMP4FILENAME}.${OUTPUTEXTENSION}"
else
OUTPUTFILENAME="${VIDEO_DIR}/output/${DATESTAMP4FILENAME}_${OUTPUTNAME}_${TIMESTAMP4FILENAME}.${OUTPUTEXTENSION}"
OUTPUTFILENAME="${VIDEO_DIR}/output/${DATESTAMP4FILENAME}_${OUTPUTNAME}.${OUTPUTEXTENSION}"
fi
else
# Title was already set use original filename
echo FBNAME=$FBNAME
OUTPUTFILENAME="${VIDEO_DIR}/output/${FBNAME_NOEXTENSION}.${OUTPUTEXTENSION}"
fi
# if already in correct format
if $SKIP ;
then
cmd="cp -p \"${1}\" \"${OUTPUTFILENAME}\""
echo "Skipping Conversion copying File:" $cmd
eval $cmd
else
setStreamCopyOption
cmd="ffmpeg -loglevel info -y \
-i \"${1}\" \
-metadata title=\"${OUTPUTNAME}\" \
-metadata date=${ORIGTIMESTAMP} \
-metadata creation_time=\"${ORIGTIMESTAMP_ISO8601}\" \
-metadata Make=\"${CAMERA_MANUFACTURER}\" \
-metadata \"Camera Manufacturer Name\"=\"${CAMERA_MANUFACTURER}\" \
-metadata \"Camera Model Name\"=\"${CAMERA_MODEL_NAME}\" \
-metadata location=\"${GPSCOORDINATES}\" \
-${STREAM_COPY_OPTION} \
-avoid_negative_ts 1 \
-ignore_unknown \
-movflags use_metadata_tags \
\"${OUTPUTFILENAME}\" "
echo $cmd
valuesSummary
#askContinue
eval $cmd
touch -d @${ORIGTIMESTAMP_UNIX} "${OUTPUTFILENAME}"
fi
displayVideoInfo "${OUTPUTFILENAME}"
ls -l "${OUTPUTFILENAME}"
}
function usage() {
echo "-o extension of video e.g. mkv"
echo "-n \"Title of Video\""
echo "-i \"Add Padding to Filename\""
echo "-c \"Manufacturer of camera\""
echo "-s \"Source directoy: default:${VIDEO_DIR}/temp/input\""
echo "-t \"GetTimestamp from filename, not from Metadata or fileTimestamp\""
}
# main
declare -A CONFIG
if [[ $1 == "" ]]; then
usage;
exit;
else
while getopts "i:o:c:n:s:t" OPTNAME
do
case "${OPTNAME}" in
"i")
CONFIG[ADD_INDEX_TO_FILENAME]=true
PADDING=${OPTARG}
;;
"o")
CONFIG[OUTPUTEXTENSION]=${OPTARG}
echo "Option ${OPTNAME} is specified OUTPUTEXTENSION=${CONFIG[OUTPUTEXTENSION]}"
;;
"c")
# append this value to title
CONFIG[CAMERA]=${OPTARG}
echo "Option ${OPTNAME} is specified CAMERA=${CONFIG[CAMERA]}"
;;
"n")
# use this value as title
CONFIG[OUTPUTNAME]=${OPTARG}
echo "Option ${OPTNAME} is specified OUTPUTNAME=${CONFIG[OUTPUTNAME]}"
;;
"s")
CONFIG[SRCDIR]="${OPTARG}"
echo "Option ${OPTNAME} is specified SRCDIR=\"${CONFIG[SRCDIR]}\""
;;
"t")
CONFIG[TIMESTAMP_METHOD]="FileNamePrefix"
echo "Option ${OPTNAME} is specified TIMESTAMP_METHOD=\"${CONFIG[TIMESTAMP_METHOD]}\""
;;
esac
#echo "OPTIND is now $OPTIND"
done
fi
VIDEO_DIR=${VIDEO_DIR:-/links/FamilienVideos-ssd/temp}
LIST_FILE=${VIDEO_DIR}/videos.lst
rm ${LIST_FILE}
if [ "${CONFIG[SRCDIR]}" == "" ];
then
find ${VIDEO_DIR}/input -type f -printf "%p\n" | sort >> ${LIST_FILE}
else
find "${CONFIG[SRCDIR]}" -type f -printf "%p\n" | sort >> ${LIST_FILE}
fi
#find ${VIDEO_DIR}/input -type f -printf "file '%p'\n" | sort >> ${LIST_FILE}
#find ${VIDEO_DIR}/input -type f -printf "%T+\t%p\n" | sort | awk '{$1=""; print substr($0,2)}' | xargs -I % echo file \'%\' >> ${LIST_FILE}
index=1
while read -u 10 CURFILE
do
echo "---------------------------------------------------------------------"
echo "Processing $CURFILE"
printf -v PADDEDINDEX "%0${PADDING}d" $index
processFile "$CURFILE"
((index++))
#echo PADDEDINDEX=$PADDEDINDEX
done 10<"${LIST_FILE}"