Update 2024-02-14 07:51 OpenBSD/amd64-x13
This commit is contained in:
396
.bin/OLD/gopro
Executable file
396
.bin/OLD/gopro
Executable file
@@ -0,0 +1,396 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
function get-output-filename {
|
||||
# takes fileinput, returns fileoutput name; takes optional $2 argument to tack onto end of name
|
||||
name="$(cut -d'.' -f1 <<<"$1")"
|
||||
ext="$(cut -d'.' -f2 <<<"$1")"
|
||||
echo "${name}_${2}.${ext}"
|
||||
}
|
||||
|
||||
function timelapse() {
|
||||
framerate="$1"
|
||||
filename="$2"
|
||||
resolution_width="$3"
|
||||
resolution_height="$4"
|
||||
$(type -P ls) -1tr ./*.JPG >gopro_timelapse_list.txt
|
||||
mencoder -nosound -ovc x264 \
|
||||
-vf scale="$resolution_width":"$resolution_height" -mf type=jpeg:fps="$framerate" \
|
||||
mf://@gopro_timelapse_list.txt -o "$filename"
|
||||
rm gopro_timelapse_list.txt
|
||||
}
|
||||
|
||||
function superview() {
|
||||
for i in *.MP4; do
|
||||
name=$(echo "$i" | cut -d'.' -f1)+S
|
||||
echo "$name"
|
||||
ffmpeg -i "$i" -q:a 1 -q:v 1 0 -vcodec mpeg4 -acodec ac3 -aspect 16:9 -strict experimental "$name".MP4
|
||||
done
|
||||
}
|
||||
|
||||
function fisheye() {
|
||||
#echo "https://gopro.com/help/articles/Question_Answer/HERO4-Field-of-View-FOV-Information"
|
||||
echo -ne "Resolution:\n-[0] 4:3 Wide FOV\n-[1] 4:3 Medium FOV\n-[2] 4:3 Narrow FOV\nPhoto resolution: "
|
||||
read -r res
|
||||
distortion_args=""
|
||||
case $res in
|
||||
0*)
|
||||
distortion_args="0 0 -0.3"
|
||||
;;
|
||||
1*)
|
||||
distortion_args="0 0 -0.2"
|
||||
;;
|
||||
2*)
|
||||
distortion_args="0 0 -0.1"
|
||||
;;
|
||||
esac
|
||||
if [[ $1 == "" ]]; then
|
||||
for photo in *.JPG; do
|
||||
timestamp=$(stat -c %y "$photo")
|
||||
mogrify -distort barrel "$distortion_args" "$photo"
|
||||
touch -d "$timestamp" "$photo"
|
||||
done
|
||||
else
|
||||
timestamp=$(stat -c %y "$1")
|
||||
mogrify -distort barrel "$distortion_args" "$1"
|
||||
touch -d "$timestamp" "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
function fisheye_video() {
|
||||
#echo "https://gopro.com/help/articles/Question_Answer/HERO4-Field-of-View-FOV-Information"
|
||||
#https://gopro.com/help/articles/question_answer/HERO3-Black-Edition-Field-of-View-FOV-Information
|
||||
#https://gopro.com/help/articles/Question_Answer/HERO4-Field-of-View-FOV-Information
|
||||
#https://gopro.com/help/articles/Question_Answer/HERO5-Black-Field-of-View-FOV-Information
|
||||
#http://www.kolor.com/wiki-en/action/view/Autopano_Video_-_Focal_length_and_field_of_view
|
||||
#https://gopro.com/help/articles/question_answer/hero6-black-field-of-view-fov-information
|
||||
|
||||
vfov=0
|
||||
hfov=0
|
||||
diag=0
|
||||
|
||||
echo -ne "Camera:
|
||||
-[0] HERO3
|
||||
-[1] HERO4/5
|
||||
-[2] HERO6
|
||||
>> Camera: "
|
||||
read -r cam
|
||||
case $cam in
|
||||
0*)
|
||||
echo ">> HERO3"
|
||||
echo -ne "Resolution:
|
||||
-[0] 4:3 Wide FOV
|
||||
-[1] 4:3 Medium FOV
|
||||
-[2] 4:3 Narrow FOV
|
||||
-[3] 16:9 Wide FOV
|
||||
-[4] 16:9 Medium FOV
|
||||
-[5] 16:9 Narrow FOV
|
||||
>> Video resolution: "
|
||||
read -r res
|
||||
case $res in
|
||||
0*)
|
||||
hfov=94.4
|
||||
vfov=122.6
|
||||
diag=149.2
|
||||
;;
|
||||
1*)
|
||||
hfov=72.2
|
||||
vfov=94.4
|
||||
diag=115.7
|
||||
;;
|
||||
2*)
|
||||
hfov=49.1
|
||||
vfov=64.6
|
||||
diag=79.7
|
||||
;;
|
||||
3*)
|
||||
hfov=69.5
|
||||
vfov=118.2
|
||||
diag=133.6
|
||||
;;
|
||||
4*)
|
||||
hfov=55
|
||||
vfov=94.4
|
||||
diag=107.1
|
||||
;;
|
||||
5*)
|
||||
hfov=37.2
|
||||
vfov=64.4
|
||||
diag=73.6
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
1*)
|
||||
echo ">> HERO4"
|
||||
echo -ne "Resolution:
|
||||
-[0] 4:3 Wide FOV
|
||||
-[1] 4:3 Medium FOV
|
||||
-[2] 4:3 Narrow FOV
|
||||
-[3] 16:9 Wide FOV
|
||||
-[4] 16:9 Medium FOV
|
||||
-[5] 16:9 Narrow FOV
|
||||
>> Video resolution: "
|
||||
read -r res
|
||||
case $res in
|
||||
0*)
|
||||
hfov=94.4
|
||||
vfov=122.6
|
||||
diag=149.2
|
||||
;;
|
||||
1*)
|
||||
hfov=72.2
|
||||
vfov=94.4
|
||||
diag=115.7
|
||||
;;
|
||||
2*)
|
||||
hfov=49.1
|
||||
vfov=64.6
|
||||
diag=79.7
|
||||
;;
|
||||
3*)
|
||||
hfov=69.5
|
||||
vfov=118.2
|
||||
diag=133.6
|
||||
;;
|
||||
4*)
|
||||
hfov=55
|
||||
vfov=94.4
|
||||
diag=107.1
|
||||
;;
|
||||
5*)
|
||||
hfov=37.2
|
||||
vfov=64.4
|
||||
diag=73.6
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
2*)
|
||||
echo ">> HERO6"
|
||||
echo -ne "Resolution:
|
||||
-[0] 4:3 Wide FOV ZOOM 0
|
||||
-[1] 4:3 Wide FOV ZOOM 100
|
||||
-[2] 16:9 Wide FOV ZOOM 0
|
||||
-[3] 16:9 Wide FOV ZOOM 100
|
||||
>> Video resolution: "
|
||||
read -r res
|
||||
case $res in
|
||||
0*)
|
||||
hfov=94.4
|
||||
vfov=122.6
|
||||
diag=149.2
|
||||
;;
|
||||
1*)
|
||||
hfov=49.1
|
||||
vfov=64.6
|
||||
diag=79.7
|
||||
;;
|
||||
2*)
|
||||
hfov=69.5
|
||||
vfov=118.2
|
||||
diag=133.6
|
||||
;;
|
||||
3*)
|
||||
hfov=35.7
|
||||
vfov=62.2
|
||||
diag=70.8
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
flength=$(echo "$vfov/$hfov*$diag" | bc -l | head -n1 | cut -d "." -f1)
|
||||
if [[ $1 == "" ]]; then
|
||||
for video in *.MP4; do
|
||||
name=$(echo "$video" | cut -d'.' -f1)_corrected
|
||||
ffmpeg -i "$video" -vf "lenscorrection=cx=0.5:cy=0.5:k1=-0.$flength:k2=-0.022" -q:a 1 -q:v 1 -vcodec libx264 "$name".mp4
|
||||
done
|
||||
else
|
||||
name=$(echo "$1" | cut -d'.' -f1)_corrected
|
||||
ffmpeg -i "$1" -vf "lenscorrection=cx=0.5:cy=0.5:k1=-0.$flength:k2=-0.022" -q:a 1 -q:v 1 -vcodec libx264 "$name".mp4
|
||||
fi
|
||||
}
|
||||
|
||||
function convert() {
|
||||
if [[ $1 == "" ]]; then
|
||||
for i in *.MP4; do
|
||||
name=$(echo "$i" | cut -d'.' -f1)
|
||||
echo "$name"
|
||||
ffmpeg -i "$i" -q:a 1 -q:v 1 -vcodec mpeg4 "$name".mov
|
||||
done
|
||||
else
|
||||
name=$(echo "$1" | cut -d'.' -f1)
|
||||
echo "$name"
|
||||
ffmpeg -i "$1" -q:a 1 -q:v 1 -vcodec mpeg4 "$name".mov
|
||||
fi
|
||||
}
|
||||
|
||||
function convert-h265-to-h264 {
|
||||
fileout="$(get-output-filename ${1} h264)"
|
||||
ffmpeg -i "$1" -bsf:v h264_mp4toannexb -vcodec libx264 -c:a copy "$fileout"
|
||||
}
|
||||
|
||||
function slowmo() {
|
||||
ffmpeg -i "$1" -r 25 -vf "setpts=($3/1)*PTS" -q:a 1 -q:v 1 -vcodec libx264 "$2"
|
||||
echo "Video slowed down, use trim to trim the video"
|
||||
}
|
||||
|
||||
function speed() {
|
||||
ffmpeg -i "$1" -r "$4" -vf "setpts=($3/1)*PTS" -q:a 1 -q:v 1 -vcodec libx264 "$2"
|
||||
echo "finished $1"
|
||||
}
|
||||
|
||||
function trim() {
|
||||
ffmpeg -i "$1" -ss "$3" -t "$4" -q:a 1 -q:v 1 -vcodec libx264 "$2"
|
||||
}
|
||||
|
||||
function merge() {
|
||||
LIST_FILE="$(mktemp)"
|
||||
printf "file '$PWD/%s'\n" *.MP4 > $LIST_FILE
|
||||
ffmpeg -f concat -safe 0 -i $LIST_FILE -c copy "$1"
|
||||
rm $LIST_FILE
|
||||
}
|
||||
|
||||
function rotate90deg {
|
||||
fileout="$(get-output-filename ${1} rotated)"
|
||||
# use 'transpose=2' for counter-clockwise
|
||||
ffmpeg -i "$1" -filter:v transpose=1 -metadata:s:v rotate="" "$fileout"
|
||||
}
|
||||
|
||||
function stabilize() {
|
||||
ffmpeg -i "$1" -vf deshake "$2"
|
||||
}
|
||||
|
||||
function sort() {
|
||||
mkdir -p videos/{single,chaptered,thumbnails,lowresvideos}
|
||||
mkdir -p photos/{single,timelapse-burst-continuous}
|
||||
if [[ $1 == "move" ]]; then
|
||||
mv GOPR*.MP4 videos/single
|
||||
mv GP*.MP4 videos/chaptered
|
||||
mv GOPR*.JPG photos/single
|
||||
mv G*.JPG photos/timelapse-burst-continuous
|
||||
mv ./*.LRV videos/lowresvideos
|
||||
mv ./*.THM videos/thumbnails
|
||||
else
|
||||
cp -p GOPR*.MP4 videos/single
|
||||
cp -p GP*.MP4 videos/chaptered
|
||||
cp -p GOPR*.JPG photos/single
|
||||
cp -p G*.JPG photos/timelapse-burst-continuous
|
||||
cp -p ./*.LRV videos/lowresvideos
|
||||
cp -p ./*.THM videos/thumbnails
|
||||
fi
|
||||
echo "Finished!"
|
||||
}
|
||||
|
||||
function wifiinfo() {
|
||||
echo "is $(pwd) the root of your SD card?"
|
||||
read -r
|
||||
echo -ne "Enter current (default) wifi password: "
|
||||
read -r defssid
|
||||
echo -ne "Enter Wifi SSID: "
|
||||
read -r wifissid
|
||||
echo -ne "Enter password: "
|
||||
read -r wifipassword
|
||||
{
|
||||
echo "$defssid"
|
||||
echo "EVssidprimary,$wifissid"
|
||||
echo "EVpassphrase,$wifipassword"
|
||||
} >>gpauto
|
||||
echo "Done. Insert SD card into the camera, remove battery, insert battery and power on twice."
|
||||
}
|
||||
|
||||
function update() {
|
||||
curl https://raw.githubusercontent.com/KonradIT/gopro-linux/master/version
|
||||
curl https://raw.githubusercontent.com/KonradIT/gopro-linux/master/gopro >/usr/bin/gopro
|
||||
}
|
||||
|
||||
function gif() {
|
||||
convert -size "$1" ./*.JPG -delay 5 -resize "$1" "$2"
|
||||
}
|
||||
function proxy() {
|
||||
if [[ $1 == "rename" ]]; then
|
||||
mkdir lowres highres
|
||||
mv ./*.MP4 highres/
|
||||
mv ./*.LRV lowres/
|
||||
for i in lowres/*.LRV; do
|
||||
name=$(echo "$i" | cut -d'.' -f1)
|
||||
mv "$i" "$name".MP4
|
||||
done
|
||||
fi
|
||||
if [[ $1 == "move" ]]; then
|
||||
mv highres/*.MP4 lowres/
|
||||
fi
|
||||
}
|
||||
|
||||
function help() {
|
||||
echo 'GoPro Tool for Linux OS
|
||||
Available commands:
|
||||
- gopro
|
||||
>>Check for missing dependencies, e.g. ffmpeg, imagemagick and mencoder
|
||||
|
||||
- gopro timelapse [fps] [outfilename] [res width] [res height]
|
||||
>>Makes a timelapse with pictures in the current folder, make sure to cd to a DCIM/XXXGOPRO folder!
|
||||
>>Example: gopro timelapse 30 goproTL.mp4 1920 1080
|
||||
|
||||
- gopro superview
|
||||
>>Applies SuperView to all GoPro videos in the current dir
|
||||
|
||||
- gopro fisheye
|
||||
>>Fixes barrel distorsion to all GoPro pictures in the current folder
|
||||
|
||||
- gopro fisheye_video [video]
|
||||
>>Fixes barrel distorsion on GoPro videos, [video] is optional, remove to apply to all mp4 videos in current dir
|
||||
>>Also needs camera name input
|
||||
|
||||
- gopro convert
|
||||
>>Converts all GoPro MP4 videos to MPEG4 MOV videos for easy editing
|
||||
|
||||
- gopro convert-h265-to-h264 [input_video]
|
||||
>>Converts videos with h.265 codecs to h.264
|
||||
>>This is useful for backwards compatibility. Some videos recorded on HERO Black 7 devices cannot be played on older hardware until codecs are converted.
|
||||
|
||||
- gopro slowmo [video]
|
||||
>>Reduces the speed in a High FPS GoPro Video
|
||||
>>Example: gopro slowmo GOPRO0553.MP4
|
||||
|
||||
- gopro trim [input video] [output video] [HH:MM:SS start] [HH:MM:SS end]
|
||||
>>Trims a video to start and end times
|
||||
>>Example: gopro trim GOPR0553.MP4 Trimmed.mp4 00:05:04 00:07:43
|
||||
|
||||
- gopro merge [output_video]
|
||||
>>Merges all videos present in the current folder to [output_video]
|
||||
|
||||
- gopro rotate90deg [input_video]
|
||||
>>Rotates video 90 degrees clockwise (edit "translate=2" argument for counter-clockwise)
|
||||
|
||||
- gopro stabilize
|
||||
>>Stabilizes video
|
||||
>>Example: gopro GOPRO0005.MP4 Stabilized.MP4
|
||||
|
||||
- gopro sort
|
||||
>>Sorts media, please execute in DCIM/XXXGOPRO
|
||||
|
||||
- gopro wifiinfo
|
||||
>>Sets Wifi SSID and Password for HERO5, 6, 7 cameras
|
||||
|
||||
- gopro gif
|
||||
>>Makes gif from images in current dir
|
||||
>>Example: gopro gif 800x600 animation.gif
|
||||
|
||||
- gopro proxy [option]
|
||||
>>[rename] = renames .LRV to lowres/*.MP4
|
||||
>>[move] = when finish editing, moves highres/*.MP4 to lowres/
|
||||
|
||||
- gopro update
|
||||
>>Updates this script
|
||||
|
||||
- gopro help
|
||||
>>show this usage message'
|
||||
}
|
||||
|
||||
echo "GoPro Tool for Linux"
|
||||
echo "To see a list of commands and syntax available run: gopro help"
|
||||
echo "Checking dependencies..."
|
||||
hash ffmpeg 2>/dev/null || { echo >&2 "ffmpeg ..... Not installed!"; }
|
||||
hash mogrify 2>/dev/null || { echo >&2 "mogrify ..... Not installed!"; }
|
||||
hash mencoder 2>/dev/null || { echo >&2 "mencoder ..... Not installed!"; }
|
||||
hash bc 2>/dev/null || { echo >&2 "bc ..... Not installed!"; }
|
||||
"$@"
|
||||
Reference in New Issue
Block a user