viernes, 24 de noviembre de 2017

Shell script en BASH con una lista de comandos de FFmpeg

FFmpeg es una colección de software libre que puede grabar, convertir (transcodificar) y hacer streaming de audio y vídeo. Incluye libavcodec, una biblioteca de códecs. FFmpeg está desarrollado en GNU/Linux, pero puede ser compilado en la mayoría de los sistemas operativos, incluyendo Windows. El proyecto comenzó por Gerard Lantau, un seudónimo de Fabrice Bellard, y ahora es mantenido por Michael Niedermayer. Es destacable que la mayoría de los desarrolladores de FFmpeg lo sean también del proyecto MPlayer (más un miembro del proyecto Xine), y que FFmpeg esté hospedado en el servidor del proyecto MPlayer.

FFmpeg está liberado bajo una licencia GNU Lesser General Public License 2.1+ o GNU General Public License 2+ (dependiendo de qué bibliotecas estén incluidas).2​ Los desarrolladores recomiendan utilizar el último snapshot de Subversion ya que mantienen constantemente una versión estable.

FFmpeg es un programa bastante sencillo y muy fácil de usar, orientado tanto a personas con conocimientos avanzados como usuarios novatos. Es capaz de elegir el códec con sólo escribir la extensión. Por ejemplo, FFmpeg usará x264 si elegimos .mp4, mpeg4 si usamos .avi, VP8 si usamos .webm, etc…


Instalación de FFmpeg en Debian

FFmpeg está en los repositorios y creo que vienen por defecto. En todo caso podeis instalarlos con el terminal, usando los repositorios multimedia de debian, siguiendo estas instrucciones:
# apt update
# apt install FFmpeg
Código: 

#!bin/bash
# Nombre: ffmpeg.sh
# Autor: viriato
# Origen: comunidad exdebian.org
# Lenguaje: BASH
# Licencia: GPL
# Propósito: edición y conversión de videos y audios con FFmpeg
# Dependencias:
# Fecha de creación: 02-mayo-2018

clear
function menu {
echo
echo 'SCRIPT CON UNA LISTA DE COMANDOS FFMPEG'
echo
        echo '____________________MENU__________________________'
echo
echo 'Lista de opciones:'
echo
echo '1)  Convertir un video a otro video en cuaquier formato'
echo '2)  Convertir un video en otro video con formato FLV seleccionando el bitrate'
echo '3)  Convertir un video en otro video con formato THEORA VORBIS'
echo '4)  Convertir un video con H.264 sin pérdida de calidad'
echo '5)  Convertir un video con VP9 en un video WEBM sin pérdida de calidad'
echo '6)  Convertir un video con MPEG-4 en un video AVI'
echo '7)  Convertir un archivo de audio WAV en un archivo de audio MP3 con máxima calidad'
echo '8)  Convertir un archivo de audio AAC (WAV) en un archivo de audio m4a'
echo '9)  Convertir un video con formato AVI en un video con formato DV'
echo '10) Convertir un video con formato AVI en un video con formato MPEG para ver en un reproductor DVD'
        echo '11) Bajar o subir el volumen de audio a un video'
echo '12) Comprimir un video en formato mp4 con 2 pasadas'
echo '13) Convertir video MP4 en otro video WMV'
echo '14) Cambiar el formato de un video de 4:3 a 16:9'
echo '15) Cambiar las dimensiones de un video'
echo '16) Convertir un video en una secuencia de imágenes'
echo '17) Convertir una secuencia de imágenes  alojadas en una carpeta en un video .AVI'
echo '18) Convertir un video en un GIF animado'
echo '19) Recortar un video con el parámetro crop'
echo '20) Añadir sonido a un video'
echo '21) Quitar sonido a un video'
echo '22) Cortar fragmento de video'
echo '23) Convertir disco BLUE-RAY 4K a un video en formato MKV 1080px264'
echo '24) Extraer sonido de un video y guardarlo en un archivo .MP3'
echo '25) Compresión de archivos de MP3'
echo '26) Añadir una marca de agua a un video sin sonido usando una imagen .PNG'
echo '27) Añadir texto que se desplaza de derecha a izquierda'
echo '28) Añadir cronómetro a un video'
echo '29) Modificar la velocidad de un video y su audio'
echo '30) Convertir un fotograma de un video en una imagen con extensión JPG, PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF o SGI'
echo '31) Unir varios videos con el mismo formato'
echo '32) Salir del script'
echo
echo '__________________________________________________'
}

function write_option {
echo
echo 'Escribe una opción de 1 a 32:'
read write_option
}

#  1) Convertir un video en otro video con cuaquier formato
function option_01 {
clear
echo
echo 'CONVERTIR UN VIDEO CON UN FORMATO EN OTRO FORMATO:'
echo
echo 'Introduce el nombre de video de entrada:'
read video_input
echo
echo 'Introduce el nombre de video de salida:'
read video_output
echo
ffmpeg -i $video_input $video_output
}

#  2) Convertir un video en otro video con formato FLV seleccionando el bitrate
function option_02 {
clear
echo
echo 'CONVERTIR UN VIDEO EN OTRO VIDEO EN FORMATO FLV SELECCIONANDO EL BITRATE:'
echo
echo 'Introduce el nombre de video de entrada:'
read video_input
echo
echo 'Introduce el bitrate para el video de salida (Por ejemplo: 1000k):'
read bitrate
echo
echo 'Introduce el nombre de video de salida:'
read video_output
echo
ffmpeg -i $video_input -ar 44100 -b $bitrate $video_output
}

# 3) Convertir un video en otro video con formato THEORA VORBIS:
function option_03 {
clear
echo
echo 'CONVERTIR UN VIDEO EN OTRO VIDEO CON THEORA VORIS:'
echo
echo 'Introduce el nombre de video de entrada:'
read video_input
echo
echo 'Introduce el valor de la calidad de video de 0 a 10:'
read video_value
echo
echo 'Introduce el valor de la calidad de audio de 0 a 10:'
read audio_value
echo
echo 'Introduce el nombre de video de salida:'
read video_output
echo
ffmpeg -i $video_input -codec:v libtheora -qscale:v $video_value -codec:a libvorbis -qscale:a $audio_value $video_output
}

# 4) Convertir un video con H.264 sin pérdida de calidad:
function option_04 {
clear
echo
echo 'CONVERTIR UN VIDEO CON H.264 sin pérdida de calidad:'
echo
echo 'Introduce el nombre de video de entrada:'
read video_input
echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
ffmpeg -i $video_input -c: v libx264 -preset veryslow -crf 0 $video_output
}

# 5) Convertir un video con VP9 en un video WEBM sin pérdida de calidad:
function option_05 {
clear
echo
echo 'CONVERTIR UN VIDEO CON VP9 EN OTRO VIDEO CON FORMATO WEBM'
echo
echo 'Introduce el nombre de video de entrada:'
read video_input
echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
ffmpeg -i $video_input -c:v libvpx-vp9 -lossless 1 $video_output
}

# 6) Convertir un video con MPEG-4 en un video AVI:
function option_06 {
clear
echo
echo 'CONVERTIR UN VIDEO CON MPEG-4 EN UN VIDEO AVI'
echo
echo 'Introduce el nombre de video de entrada:'
read video_input
echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
        ffmpeg -i $video_input -c:v libx264 -crf 0 -preset veryslow -c:a aac -b:a 192k -ac 2 $video_output
}

# 7) Convertir un archivo de audio WAV en un archivo de audio MP3 con máxima calidad
function option_07 {
clear
echo
echo 'CONVERTIR UN ARCHIVO DE AUDIO WAV EN UN ARCHIVO DE AUDIO MP3 con máxima calidad'
echo
echo 'Introduce el archivo de audio WAV de entrada:'
read audio_input
echo
echo 'Introduce el archivo de audio MP3 de salida:'
read audio_output
echo
ffmpeg -i $audio_input -codec:a libmp3lame -b:a 320k $audio_output
}

# 8) Convertir un archivo de audio AAC (WAV) en un archivo de audio m4a
function option_08 {
clear
echo
echo 'CONVERTIR UN ARCHIVO DE AUDIO AAC (WAV) en un archivo de audio m4a'
echo
echo 'Introduce el archivo de audio AAC (WAV) de entrada:'
read audio_input
echo
echo 'Introduce el archivo de audio m4a de salida:'
read audio_output
echo
ffmpeg -i $audio_input -c:a libfdk_aac -vbr 5 $audio_output
}

# 9) Convertir un video con formato AVI en un video con formato DV
function option_09 {
clear
echo
echo 'CONVERTIR UN VIDEO CON FORMATO AVI EN UN VIDEO CON FORMATO DV:'
echo
echo 'Introduce el nombre de video de entrada:'
read video_input
echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
ffmpeg -i $video_input -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 $video_output
}

# 10) Convertir un video con formato AVI en un video con formato MPEG para ver en un reproductor DVD
function option_10 {
clear
echo
echo 'CONVERTIR UN VIDEO EN FORMATO AVI EN UN VIDEO CON FORMATO MPEG PARA VER EN UN REPRODUCTOR DVD:'
echo
echo 'Introduce el nombre de video de entrada:'
read video_input
echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
ffmpeg -i $video_input -target pal-dvd -ps 2000000000 -aspect 16:9 $video_output
}

# 11) Bajar o subir el volumen de audio a un video
function option_11 {
   clear
   echo
   echo 'BAJAR O SUBIR EL VOLUMEN DE AUDIO A UN VIDEO'
   echo
   echo 'Introduce el nombre del video de entrada:'
   read video_input
   echo
   echo 'Ejemplo: si el valor de volumen de audio de un video elegido es 2, el audio modificado se escuchará con el doble de potencia: si el valor es 0.5 con la mitad de potencia'
   echo 'Introduce el valor de volumen a un video'
   read volume_value
   echo
   echo 'Introduce el nombre del video de salida:'
   read video_output
   echo
   ffmpeg -i $video_input -af "volume=$volume_value" $video_output

}

# 12) Comprimir un video en formato mp4 con 2 pasadas
function option_12 {
clear
echo
echo 'COMPRIMIR UN VIDEO'
echo
echo 'Íntroduce el nombre del video de entrada:'
read  video_input
echo
echo 'Parametros de velocidad de compresión: ultrafast,superfast,veryfast,faster,fast,medium,default preset,slow,slower,veryslow'
echo 'Parámetro recomendado: medium'
echo 'Introduzca el parámetro de compresión de video:'
read  compression_speed_parameter
echo
echo 'Valor recomendado 80k, esto reduce el tamaño del archivo a la mitad con buena calidad'
echo 'Introduce el valor de compresión de video:'
read  video_compression_value
echo
echo 'Íntroduce el nombre del video de salida:'
read  video_output
echo
ffmpeg -y -i $video_input -c:v libx264 -preset $compression_speed_parameter -b:v $video_compression_value -pass 1 -c:a libfdk_aac -b:a 128k -f mp4 /dev/null && \
ffmpeg -i $video_output -c:v libx264 -preset $compression_speed_parameter -b:v $video_compression_value -pass 2 -c:a libfdk_aac -b:a 128k $video_output
}

# 13) Convertir video MP4 en otro video WMV
function option_13 {
clear
echo
echo 'CONVERTIR VIDEO MP4 EN OTRO VIDEO WMV'
echo
echo 'Íntroduce el nombre del video de entrada'
read video_input
echo
echo 'Introduce el valor de compresión de video:'
read compression_video_value
echo
echo 'Introduce el nombre  del video de salida:'
read video_output
echo
        ffmpeg -i $video_input -c:v wmv2 -b:v $compression_video_value -c:a wmav2 -b:a 192k $video_output

}

# 14) Cambiar el formato de un video cualquiera de 4:3 a 16:9
function option_14 {
clear
echo
echo 'CAMBIAR EL FORMATO DE UN VIDEO 4:3 A 16:9'
echo
echo 'Íntroduce el nombre del video de entrada:'
read video_input
echo
echo 'Introduce el nombre  del video de salida:'
read video_output
echo
        ffmpeg -i $video_input -aspect 16:9 $video_output
}

# 15) Cambiar las dimensiones de un video
function option_15 {
clear
echo
echo 'CAMBIAR LAS DIMENSIONES DE UN VIDEO'
echo
echo 'Íntroduce el nombre del video de entrada:'
read  video_input
echo
        echo 'Introduce el ancho del video'
        read  width_value
        echo
echo 'Introduce el alto del video'
read  height_value
echo
echo 'Íntroduce el nombre del video de  salida:'
read  video_output
echo
ffmpeg -i $video_input -filter:v scale=$width_value:$height_value -c:a copy $video_output
}

# 16 Convertir un video en una secuencia de imágenes
function option_16 {
clear
echo
echo 'CONVERTIR UN VIDEO EN UNA SECUENCIA DE IMÁGENES'
echo
echo 'Introduce el nombre de video de entrada:'
read video_input
read
echo 'Introduce el nombre de la extensión de las imágenes jpg, pgm, ppm ,pam, pgmyuv, jpeg, gif, png, tiff o sgi:'
read ext_image
echo
ffmpeg -i $video_input image%d.$ext_image
}

# 17 Convertir una secuencia de imágenes alojadas en una carpeta en un video .AVI
function option_17 {
clear
echo
echo 'CONVERTIR UNA SECUENCIA DE IMÁGENES EN UNA CARPETA EN UN VIDEO AVI'
echo
        echo 'Introduce el tiempo de duración de cada imagen. Si el tiempo de imagen es 0.2 la duración de cada imagen es de 5 segundos';
read time_image
echo
echo 'Ejemplo, una secuencia de imaágenes foto0001,foto0002,foto0003....se escribiria asi: foto%04d'
echo 'Introduzca el nombre de la secuencia de imágenes:'
read images_sequence
echo
        echo 'Introduce el nombre de la extensión de las imágenes jpg, pgm, ppm ,pam, pgmyuv, jpeg, gif, png, tiff o sgi:'
read ext_image
        echo
echo
echo 'Introduce el nombre de video de salida:'
read video_output
echo
ffmpeg -f image2 -r $time_image -i $images_sequence.$ext_image -r 25 $video_output
}

# 18 Convertir un video en un GIF animado
function option_18 {
clear
echo
echo 'CONVERTIR UN VIDEO EN UN GIF ANIMADO'
echo
echo 'Introduce el nombre del video de entrada'
read video_input
echo
echo 'Introduce el nombre del GIF ANIMADO de salida'
read gif_output
echo
echo 'Recomendación: Abrir el archivo .gif con el navegador Firefox'
echo
ffmpeg -i $video_input -pix_fmt rgb24 $gif_output.gif
}

# 19 Recortar un video con el parámetro crop
function option_19 {
clear
echo
echo 'RECORTAR UN VIDEO CON UN PARÁMETRO CROP'
echo
echo 'Introduce el nombre del video de entrada:'
read video_input
echo
echo 'Introduce el valor del ancho (weight) del rectángulo del video original que desea recortar:'
read  w
echo
echo 'Introduce el valor de la altura (height) del video original que desea recortar:'
read  h
echo
echo 'Introduce el valor de la coordenada x del rectángulo del video original que desea recortar:'
read  x
echo
echo 'Introduce el valor de la coordenada y del rectángulo del video original que desea recortar:'
read  y
echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
        ffmpeg -i $video_input -filter:v "crop=$w:$h:$x:$y" $video_output
}

# 20 Añadir sonido a un video
function option_20 {
clear
echo
echo 'AÑADIR UN ARCHIVO DE AUDIO A UN VIDEO'
echo
echo 'Introduce el nombre del archivo de audio:'
read audio_input
echo
echo 'Introduce el nombre del video de entrada:'
read video_input
echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
ffmpeg -i $audio_input -i $video_input $video_output
}

# 21 Quitar el sonido a un video
function option_21 {
clear
echo
echo 'QUITAR UN ARCHIVO DE AUDIO A UN VIDEO'
echo
echo 'Introduce el nombre del video de entrada:'
read video_input
echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
ffmpeg -i $video_input -an $video_output
}

# 22 Cortar un fragmento de video
function option_22 {
clear
echo
echo 'CORTAR UN FRAGMENTO DE VIDEO'
echo
echo 'Introduce el inicio en formato hh:mm:ss:'
read init_time
echo
echo 'Introduce la duracion del video en segundos:'
read end_time
echo
echo 'Introduce el nombre del video de entrada:'
read video_input
echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
ffmpeg -ss $init_time -t $end_time -i $video_input $video_output
}

# Convertir disco BLUE-RAY 4K a un video en formato MKV 1080px264
function option_23 {
clear
echo
echo 'CONVERTIR DISCO BLUE-RAY 4K A UN VIDEO EN FORMATO MKV 1080px264'
echo
echo 'Introduce el nombre del video de entrada:'
read  video_input
echo
echo 'Introduce el nombre del video de salida:'
read  video_output
ffmpeg -y -i $video_input.m2ts -c:v libx264 -pix_fmt yuv420p -preset slow -crf 18 -x264-params me=umh:merange=24:trellis=1:level=4.1:ref=5 -filter:v "crop=3840:1600:0:280, scale=1920:800" -an "1080_"$video_output.mkv
}


# 24 Extraer sonido de un video y guardarlo en un archivo .MP3
function option_24 {
clear
echo
echo 'EXTRAER SONIDO DE UN VIDEO Y GUARDARLO EN UN ARCHIVO .MP3'
echo
echo 'Introduce el nombre del video de entrada:'
read  video_input
echo
echo 'Introduce el valor del bitrate de audio (P.e: 320):'
read  ab_value
echo
echo 'Introduce el nombre del audio de salida:'
read  audio_output
echo
ffmpeg -i $video_input -vn -ar 44100 -ac 2 -ab $ab_value -f mp3 $audio_output.mp3
}

# 25) Compresión de archivos de MP3
# -acodec es el codec de audio utilizado.
# -ab es el bitrate de audio en el cual comprimimos nuestro archivo.mp3 para dar salida a un archivo en .mp3 comprimido.
function option_25 {
clear
echo
echo 'COMPRESIÓN DE UN ARCHIVO DE AUDIO .MP3'
echo
echo 'Introduce el nombre del archivo de audio MP3 de entrada:'
read  audio_input
echo
echo 'Introduce el valor del bitrate de audio de compresión (Por ejemplo 8k) :'
read  ab_compression
echo
echo 'Introduce el nombre del archivo de audio MP3 de salida:'
read  audio_output
echo
ffmpeg -i $audio_input.mp3 -acodec libmp3lame -ab $ab_compression $audio_output.mp3
}

# 26) Añadir una marca de agua a un video sin sonido usando una imagen .PNG
function option_26 {
clear
echo
echo 'AÑADIR UNA MARCA DE AGUA A UN VIDEO SIN SONIDO USANDO UNA IMAGEN .PNG'
echo
echo 'Introduce el nombre del video de entrada:'
read video_input
echo
echo 'Introduce el nombre de la imagen PNG con la marca de agua:'
read water_mark
        echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
ffmpeg -i $video_input -i $water_mark -filter_complex "overlay=10:10" $video_output
}

# 27 Añadir texto que se desplaza de derecha a izquierda
function option_27 {
clear
echo
echo 'AÑADIR TEXTO QUE SE DESPLAZA DE IZQUIERDA A DERECHA'
echo
echo 'Introduce el nombre del video de entrada:'
read video_input
echo
echo 'Introduce el texto:'
read text
        echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
ffmpeg -i $video_input -vf "drawtext=text='$text':fontfile=bpmono.ttf:y=h-line_h-10:x=w-mod(max(t-0.5\,0)*(w+tw)/10\,(w+tw)):fontcolor=ffcc00:fontsize=40:shadowx=2:shadowy=2" $video_output
}

# 28 Añadir cronómetro a un video
function option_28 {
clear
echo
echo 'AÑADIR CRONÓMETRO A UN VIDEO'
echo
echo 'Introduce el nombre del video de entrada:'
read video_input
echo
echo 'El tiempo del cronometro apareceóó en horas,minutos,segundos y centésimas de segundo con el siguiente formato 00:00:00:00'
echo
echo 'Introduce la hora del tiempo de inicio del cronometro'
read hours
echo
echo 'Introduce los minutos del tiempo de inicio del cronometro'
read minutes
echo
echo 'Introduce los segundos del tiempo de inicio del cronometro'
read seconds
echo
echo 'Introduce las centesimas de segundo del tiempo de inicio del cronometro'
read hundredths
echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
ffmpeg -i $video_input -vf "drawtext=fontfile=/usr/share/fonts/truetype/DroidSans.ttf: timecode='$hours\:$minutes\:$seconds\:$hundredths': r=25: \
x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1: boxcolor=0x00000000@1" -an -y $video_output
}

# 29 Modificar la velocidad de un video y su audio
function option_29 {
clear
echo 'Si la velocidad del video y del audio es mayor que 1, el resultado sera un video y audio a camara rapida'
echo 'Si la velocidad del video y del audio es menor que 1, el resultado sera un video y audio a camara rapida'
echo
echo 'Introduce el nombre del video de entrada:'
read video_input
echo
echo 'Introduce la velocidad de un video:'
read video_speed
        echo
echo 'Introduce la velocidad del audio de un video:'
read audio_speed
echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
ffmpeg -i $video_input -filter_complex "setpts=PTS/$video_speed;atempo=$audio_speed" $video_output
}

# 30 Convertir un fotograma de un video en una imagen con extensión JPG, PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF o SGI
function option_30 {
        clear
echo
echo 'CONVERTIR UN FOTOGRAMA DE UN VIDEO EN UNA IMAGEN CON EXTENSION JPG, PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF o SGI:'
echo
echo 'Introduce el nombre de video de entrada:'
read video_input
echo
echo 'Introduce el nombre del fotograma de salida:'
read image_output
echo
echo 'Introduce el vcodec del fotograma jpg, pgm, ppm ,pam, pgmyuv, jpeg, gif, png, tiff o sgi:'
read vcodec_image
echo
echo 'Introduce la posición temporal del fotograma de salida en el video. Por ejemplo, la posición de un fotograma ubicado el segundo 4 sería 00:00:04:'
read image_time
ffmpeg -i $video_input -vcodec $vcodec_image -vframes 1 -ss $image_time -an -f rawvideo $image_output
}

# 31) Unir varios videos con el mismo formato
function option_31 {
        clear
echo
echo 'UNIR VARIOS VIDEOS CON EL MISMO FORMATO'
echo
echo  "Ejemplo de lista de videos de entrada-> 01.avi|02.avi|03.avi"
echo
echo 'Introduce los nombres de video de entrada:'
echo
read videos_input_list
echo
echo 'Introduce el nombre del video de salida:'
echo
read video_output
echo
ffmpeg -i "concat:$videos_input_list" -c copy $video_output
}

# 32) Salir del script
function option_32 {
echo 'Salir del script'
}

write_option=0
go_out=32

while [ $write_option -ne $go_out ];
do 
   clear
   menu
   write_option
   
   if [ $write_option -ge 1 ] && [ $write_option -le 32 ];
   then
      clear
      case $write_option in   # Acciones para las diferentes opciones del menu
         1)
         option_01
         ;;     
         2)
option_02
         ;;
         3)
option_03
         ;;
         4)
         option_04
         ;;
         5)
         option_05
         ;;
         6)
         option_06
;;
7)
         option_07
;;
8)
option_08
;;
9)
option_09
;;
10)
option_10
;;
11)
         option_11
         ;;
12)
option_12
;;
13)
option_13
;;
14)
option_14
;;
15)
option_15
;;
16)
option_16
;;
17)
option_17
         ;;
18)
option_18
         ;;
19)
option_19
;;
20)
option_20
;;
21)
option_21
;;
22)
option_22
;;
23)
option_23
;;
24)
option_24
;;
25)
option_25
;;
26)
option_26
;;
27)
option_27
;;
         28)
         option_28
;;
29)
option_29
;;
30)
option_30
;;
31)
option_31
;;
32)
option_32
;;
      esac
   else
      echo '¡No ha introducido una opcion correcta!'
   fi
   echo
   echo 'Pulse una tecla...'
   read
done

Uso:
1) Copia el script en la siguiente ruta /usr/local/bin/ffmpeg.sh para poder ejecutarlo desde cualquier directorio
2) Concede permisos de ejecución en modo root:
# chmod + x ffmpeg.sh
3) Ejecuta el script en modo usuario:
$ bash ffmpeg.sh