/useful/trunk-1

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/useful/trunk-1
18 by Gustav Hartvigsson
* pdf2images.sh:
1
#!/usr/bin/env bash
2
3
######
4
# FILE NAME: wav2mp4.sh
5
#
27 by Gustav Hartvigsson
Added copyright information to all files.
6
# Authors:
7
#    Gustav Hartvigsson 2024
8
#    Distributed under the Cool Licence 1.1
9
#
18 by Gustav Hartvigsson
* pdf2images.sh:
10
# Changes
11
#
12
# 2021-01-31:
13
#   * Fixed up if statments
14
#   * Removed eval.
15
#
16
# 2022-03-22:
17
#   * Make script work with gifs, and Make gifs loop.
18
#
19
# 2024-07-10:
20
#   * Fixed some formating errors.
21
#   * Added sanity check.
22
#   * Use /tmp/ instead of writing to FS.
23
######
24
25
__SANITY=true
26
27
# FIXME: Use mktemp or mkdtemp instea of usin /tmp/ directly
28
__TMP_IMAGE_NAME=/tmp/__SPEAKER_IMAGE.PNG
29
__OUT_NAME=""
30
__IN_NAME=""
31
32
__USE_DIFFERENT_IMAGE=false
33
__OTHER_IMAGE_NAME=""
34
35
__LOOP=false
36
37
function __usage () {
38
  echo "wav2mp4.sh --- Convert audio to a video for upload. "
39
  echo " "
40
  echo "-i <audio.wav>        The input audio."
41
  echo " "
42
  echo "-o <video.mp4>        The output for the video."
43
  echo " "
44
  echo "--image <image.[png,gif]>"
45
  echo "                      Image to use. If none is provided a standard image"
46
  echo "                      will be used."
47
  echo ""
48
  exit 0
49
}
50
51
function __silent () {
52
  $@ >> /dev/null 2>&1
53
  return $?
54
}
55
56
function __sanity_check () {
57
  # Check that we have the tools needed.
58
  ___silent which ffmpeg 
59
60
  if [[ $? -gt 0 ]]; then
61
    echo "    Can't find tool \"ffmpeg\" (Required)."
62
    __SANITY=false
63
  fi
64
  
65
  if [[ $___SANITY == false ]]; then
66
    echo "Please install the missing tools."
67
    echo ""
68
    exit 1
69
  fi
70
}
71
72
function __do_cleanup () {
73
  rm $__TMP_IMAGE_NAME
74
}
75
76
function __do_convertion_gif () {
77
  ffmpeg\
78
         -i "$__IN_NAME"\
79
         -ignore_loop 0\
80
         -i "$__TMP_IMAGE_NAME"\
81
         -c:v libx264 -tune stillimage\
82
         -c:a aac -b:a 256k -pix_fmt yuv420p\
83
         -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -shortest\
84
         "$__OUT_NAME"
85
}
86
87
function __do_convertion () {
88
  
89
  case $__TMP_IMAGE_NAME in
90
    ## FIXME: See if there are othre fileformats that need looping and such.
91
    *.gif)
92
      __do_convertion_gif
93
    ;;
94
    *)
95
    
96
    ffmpeg -loop 1\
97
           -i "$__TMP_IMAGE_NAME"\
98
           -i "$__IN_NAME"\
99
           -c:v libx264 -tune stillimage\
100
           -c:a aac -b:a 256k -pix_fmt yuv420p\
101
           -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -shortest\
102
           "$__OUT_NAME"
103
    ;;
104
  esac
105
}
106
107
108
function __parse_args () {
109
  if [[ -z "$1" ]]
110
  then
111
    echo "Try --help or -h."
112
    exit 1
113
  fi
114
  
115
  
116
  while [[ $# -gt 0 ]]
117
  do
118
    
119
    case "${1}" in
120
      -i)
121
        __IN_NAME="$2"
122
      shift
123
      shift
124
      ;;
125
      -o)
126
        __OUT_NAME="$2"
127
      shift
128
      shift
129
      ;;
130
      --image)
131
        __USE_DIFFERENT_IMAGE=true
132
        __OTHER_IMAGE_NAME="$2"
133
      shift
134
      shift
135
      ;;
136
      --loop)
137
        __LOOP=true
138
      shift
139
      ;;
140
      -h|--help)
141
        __usage
142
      exit
143
      shift
144
      ;;
145
      *)
146
        __usage
147
      exit 1
148
      shift
149
      ;;
150
      --)
151
      shift
152
      break
153
      ;;
154
    esac
155
  done
156
}
157
158
159
function __write_image () {
160
  __IMAGE_BASE64="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"
452
  
453
  echo $__IMAGE_BASE64 | base64 -d -i > $__TMP_IMAGE_NAME
454
  
455
}
456
457
458
function __main () {
459
  __sanity_check
460
  __parse_args "${@}"
461
462
  if [[ $__USE_DIFFERENT_IMAGE == true ]]
463
  then
464
    # Let's not make this any more complicated.
465
    __TMP_IMAGE_NAME=$__OTHER_IMAGE_NAME
466
  else
467
    __write_image
468
  fi
469
  
470
  if [[ ! -e "$__IN_NAME" ]]
471
  then
472
    echo "missing input audio. Please provide."
473
    exit 1
474
  fi
475
  
476
  if [[ $__OUT_NAME == "" ]]
477
  then
478
    echo "missing output file name. Please provide."
479
    exit 1
480
  fi
481
  
482
  __do_convertion
483
  
484
  if [[ $__USE_DIFFERENT_IMAGE == false ]]
485
  then
486
    __do_cleanup
487
  fi
488
}
489
490
__main "${@}"