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

Conceptos básicos de video y televisión

El video no es una continua secuencia de imágenes, sino "fotografía en movimiento" La retina tiene la propiedad de retener durante unos instantes lo último que ha visto de modo cuando vemos una secuencia de imágenes pero que cambia rápidamente, las imágenes se superponen en nuestra retina unas sobre otras dando la sensación de continuidad y movimiento.

Hoy vamos a hablar de una serie de conceptos básicos sobre ,televisión y la edición de video:

Pixel: es la menor unidad homogénea en color que forma parte de una imagen digital, ya sea esta una fotografía, un fotograma de vídeo o un gráfico.

Ampliando lo suficiente una imagen digital - zoom -, por ejemplo en la pantalla de un ordenador, pueden observarse los píxeles que componen la imagen. Los píxeles aparecen como pequeños cuadrados o rectángulos en color, en blanco o en negro, o en matices de gris. Las imágenes se forman como una matriz rectangular de píxeles, donde cada píxel forma un área relativamente pequeña respecto a la imagen total.

En las imágenes de mapa de bits o en los dispositivos gráficos cada píxel se codifica mediante un conjunto de bits de longitud determinada - la llamada profundidad de color -; por ejemplo, puede codificarse un píxel con un byte - 8 bits -, de manera que cada píxel admite 256 variaciones -28 variaciones con repetición de 2 valores posibles en un bit tomados de 8 en 8-. En las imágenes de color verdadero, se suelen usar tres bytes para definir un color; es decir, en total podemos representar un total de 224 colores, que suman 16.777.216 opciones de color -32 bits son los mismos colores que 24 bits, pero tiene 8 bits más para transparencia-.

Para poder transformar la información numérica que almacena un píxel en un color, hemos de conocer, además de la profundidad y brillo del color -el tamaño en bits del píxel-, el modelo de color que estamos usando. Por ejemplo, el modelo de color RGB - Red-Green-Blue - permite crear un color componiendo tres colores básicos: el rojo, el verde y el azul. De esta forma, en función de la cantidad de cada uno de ellos que usemos veremos un resultado u otro.

Dimensiones: están representadas por el ancho y el alto de los videos. Los valores de dos dimensiones se expresa en pixeles. Existen varios stándares al respecto:

- Flash 320x240
- Video-CD 352x288
- Video PAL (DVD) 720x576

Existen otros formatos para video como el 640x480 pero no se usan para reproducir videos en el televisor sino para reproducirlos en el ordenador.

Además en la televisión analógica existen varios sistemas mutuamente incompatibles de televisión, el NTSC se usa típicamente USA a razón de 525 líneas/60 Hz mientras que el PAL es habitual en Europa a razón de TV de 625 líneas/50 Hz. El Secam es propio de Francia y de algunos países de Africa. La tasa de refresco - Hz -: Una tasa de refresco de 50 Hz significa que la imagen será reconstruída 50 veces por segundo. Una mayor tasa de refresco en un monitor o pantalla implica que la imagen se verá mas consistente:

La codificación del formato del vídeo en el DVD varía en PAL o NTSC:

- PAL/SECAM: 720x576 píxeles, 25 fotogramas por segundo.
- NTSC: 720x480 píxeles, 29.97 cuadros por segundo.


En cuanto a la reproducción de los videos, la mayoría de los reproductores DVD y televisores PAL pueden reproducir videos digitales en NTSC. Lo que no suele ser suceder a la inversa. Además, puesto que las películas de cine tienen 24 fps. Al convertirse a PAL son aceleradas un 4% (25 / 24 = 1.04), lo que hace que el audio deba ser ajustado de acuerdo a esto antes de ser codificado. Por esto, al reproducir un DVD en PAL oímos el audio ligeramente más agudo -concretamente, medio semitono-. Al menos, en esto ganamos a los americanos, ya que vemos las mismas películas en menos tiempo que ellos.

Televisión digital: la televisión digital -o DTV, de sus siglas en inglés: Digital TV- se refiere al conjunto de tecnologías de transmisión y recepción de imagen y sonido, a través de señales digitales. En contraste con la televisión tradicional, que codifica los datos de manera analógica, la televisión digital codifica sus señales de forma binaria, habilitando así la posibilidad de crear vías de retorno entre consumidor y productor de contenidos, abriendo la posibilidad de crear aplicaciones interactivas, y la capacidad de transmitir varias señales en un mismo canal asignado, gracias a la diversidad de formatos existentes.

La televisión digital acepta varios formatos de transmisión, a diferentes resoluciones, lo que permite a los productores de televisión crear sub canales de transmisión. A saber:

- 480i - La imagen mide 720x480 pixeles, desplegada a 60 cuadros entrelazados por segundo (30 cuadros completos por segundo).
- 480p - La imagen mide 720x480 pixeles, desplegada a 60 cuadros completos por segundo.
- 576i - La imagen mide 720x576 pixeles, desplegada a 50 cuadros entrelazados por segundo (25 cuadros completos por segundo).
- 576p - La imagen mide 720x576 pixeles, desplegada a 50 cuadros completos por segundo.
- 720p - La imagen mide 1280x720 pixeles, desplegada a 60 cuadros completos por segundo.
- 1080i - La imagen mide 1920x1080 pixeles, desplegada a 60 cuadros entrelazados por segundo (30 cuadros completos por segundo).
- 1080p - La imagen mide 1920x1080 pixeles, desplegada a 60 cuadros completos por segundo.

Visualización de video/esćaneo

Escaneo entrelazado: se usa en los formatos estándar de televisión NTSC, PAL y SECAM y visualiza sólo la mitad de las líneas horizontales en cada pasada (cada fotograma se divide en dos campos, el primero contiene todas las líneas de numero impar y el segundo las de numero par). Debido al fenómeno de "persistencia de nuestra visión", en nuestro cerebro "unimos" las dos pasadas del fotograma entrelazado, quedándonos con una sola imagen. Esto se ha utilizado tradicionalmente para obtener altas velocidades de refresco -50 Hz en PAL, 60 Hz en NTSC- con únicamente la mitad del flujo de datos. A cambio, la resolución horizontal queda afectada, ya que cada fotograma se compone de dos "medias imágenes", que al mezclarse pueden dar lugar a parpadeo, doble imagen. Para ello se utilizan cristales de cuarzo.


Escaneo progresivo: se usa en monitores de computadoras, proyectores y televisión digital y visualiza todas las líneas horizontales de una sola vez como si fuesen un único fotograma.


Bitrate: el bitrate es la cantidad de información que necesita un vídeo en cada segundo. Se suele medir en kilobits por segundo (kbps). A mayor bitrate, mayor calidad. El bitrate puede ser fijo o variable. El variable consigue una mayor calidad de imagen aumentando cuando aparecen escenas complejas y disminuye cuando las escenas están formados por imágenes.


Frame y keyframe: un keyframe es un frame sin comprimir. Un archivo de vídeo no es mas que una sucesión de imágenes -frames- que son mostradas una tras de otra, pero el codec intenta comprimir toda esa información. Los keyframes son útiles para desplazarnos por el vídeo sin tener que volver a recorrer todos los frames desde el principio. Un keyframe cada 5 o 10 segundos es un buen valor para videos largos, y cada segundo para vídeos cortos.

Tasa de frames: representa el número de imágenes -frames- por segundo que tiene el vídeo su unidad es fps -frame per second- . Un valor entre 15 y 30 suele ser el habitual pero por mi experienca aconsejo que sea superior a 20 fps pues pocas imágenes por segundo ofrecerán como resultado un video de una calidad relativamente pobre.

- Animación: 15 fps
- Película: 24 fps
- Vídeos en DVD en Europa: 25 fps.
- Vídeos en DVD en USA: 23.97 fps.

Aspect ratio: es la proporcion de aspecto entre el ancho y el alto del vídeo. El aspect ratio usual para vídeos domésticos es el llamado 4:3 -352 x 288 o el 720 x 576 por ejemplo- Así se vé la imagen ocupando toda la pantalla del televisor sin franjas normalmente de color negro. En DVD también tenemos el 16:9 con resoluciones de 2.35:1 o 1.81:1 o incluso 1.75:1. Al visualizar esos vídeos en una pantalla de televisor, aparecen franjas negras arriba y abajo para mantener la relación de aspecto y no ver las imágenes deformadas. También tengo que decir que aunque muchos de los televisores tienen un aspect radio de 4:3 empezaron a fabricarse hace años televisores en formato panorámico con aspect radio 16:9.


Cropping: consiste en recortar la imagen del vídeo a lo largo de toda su duración . Por ejemplo si nuestro vídeo es 512 x 296 y queremos que quede en 512 x 224.


Resizing: consiste en achatar la imagen de un video sin que por ello suponga una merma en la calidad.


Video compression: consiste en la reducción de calidad usada para representar imagenes que forman parte de un video digital, jugando con una combinación de una compresión de dicha imagen combinada con una compensación temporal de la película a medida que se va codificando la información del video.

Audio compression: es un tipo de compresión en el que la cantidad de datos en una grabación grabada que se reduce para su transmisión

Sample rate: es un concepto de audio que representa la frecuencia de muestreo, y tiene que ver con la calidad del sonido. El oído humano no percibe frecuencias superiores a 20.000 ciclos - Hz - por lo que una frecuencia excesiva solo agrandará el tamaño de tus archivos además de hacerla inaudible.

Es muy dificil englobar todo lo relacionado sobre televisión, video y edición de video en una entrada de blog. Lo que acabais de leer lo he extraído de diferentes webs y yo poco he aportado personalmente.

Saludos.

Fuentes:

Script con una lista de comandos del codificador y conversor de vídeo Mencoder para GNU/LInux

MEncoder es un codificador de vídeo libre liberado bajo licencia GPL que se incluye en el reproductor multimedia MPlayer.  MEncoder ha sido construido usando las fuentes de MPlayer, este codificador permite convertir entre todos los formatos que este reproductor es capaz de soportar. También permite copiar sin modificaciones tanto la cadena de vídeo como la de sonido. Además soporta casi todos los filtros de MPlayer, y este último puede ser usado para visualizar su salida. He decidido actualizar este artículo porque comprobé que varios comandos de MEncoder ya no funcionaban correctamente.

Les dejo este script escrito en lenguaje BASH con una lista de comandos de MEncoder ,lo pueden descargar haciendo click en este link link o  pueden copiar y pegar el código que van a leer a continuación  en un documento de texto.

Código:
#!bin/bash
# Nombre: mencoder.sh
# Autor: viriato
# Origen: comunidad exdebian.org
# Lenguaje: BASH
# Licencia: GPL
# Propósito: edición y conversión de videos con Mencoder
# Dependencias:
# Código:
clear
function menu
{
echo 'SCRIPT QUE UTILIZA MENCODER'
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 a otro video en cuaquier formato con un escalado diferente'
echo '3)  Concatenar varios videos en un único vídeo'
echo '4)  Cortar un fragmento de un video marcando el tiempo inicial y final o su peso en MB'
echo '5)  Incrustar subtitulos a un video'
echo '6)  Codificación de video en cualquier formato en otro video con un bitrate de superior'
echo '7)  Arreglar videos en formato AVI con índice roto o interpolado debido a errores de flujo en video o/y audio'
echo '8)  Rotar un vídeo en cualquier formato'
echo '9)  Añadir vídeo una pista de audio en formato MP3 a un video'
echo '10) Codificación de un video en 2 pasadas y con reducción del ruido de fondo'
echo '11) Crear un video con imágenes estáticas'
echo '12) Sincronización del video con el audio ligeramente desfasado'
echo '13) Convertir un video en formato MP4 a formato AVI'
echo '14) Convertir un video en formato MP4 a formato MPEG'
echo '15) Convertir un video en formato WMV a formato AVI'
echo '16) Convertir un video en formato OGV a formato AVI'
echo '17) Convertir un video en formato FLV a formato AVI'
echo '18) Convertir un video en formato MOV a formato AVI con una calidad óptima y alta compresión'
echo '19) Convertir sin pérdida de calidad (lossless) a formato AVI'
echo '20) Convertir un DVD a un video AVI con gran calidad'
echo '21) Quitar audio a un video'
echo '22) Modificar la velocidad de reproduccion de un video'
echo '23) Ver sintaxis general de Mencoder'
echo '24) Ver opciones de codificación de video de Mencoder'
echo '25) Ver opciones de codificación de audio de Mencoder'
echo '26) Ver los filtros de video de Mencoder'
echo '27) Ver manual de Mencoder'
echo '28) Salir del script'
echo '__________________________________________________'
}
function write_option
{
echo
echo 'Escribe una opción de 1 a 28:'
read write_option
}
#  1) Convertir un video a otro video en cuaquier formato:
function option_01
{
clear
echo 'CONVERTIR UN VIDEO CON UN FORMATO EN OTRO FORMATO'
echo
echo 'Introduce nombre de video de entrada:'
read video_input
echo
echo 'Introduce el nombre de video de salida:'
read video_output
mencoder $video_input -ovc copy -oac copy -o $video_output
}
#  2) Convertir un video a otro video en cuaquier formato con un escalado diferente // PENDIENTE PR LO DE LA SCALE
function option_02
{
clear
echo 'CONVERTIR UN VIDEO A OTRO FORMATO EN CUALQUIER FORMATO CON ESCALADO DIFERENTE'
echo
echo 'Introduce nombre de video de entrada:'
read video_input
echo
echo 'Introduce el nombre de video de salida:'
read video_output
echo
echo 'Ejemplo: en el caso de que scale=320:260'
  echo 'Width (Ancho): 320 pixels'
echo 'Height (Alto): 260 pixels'
        echo 'usted debe escribir lo que aparece entrecomillas "320:260"   '
echo
echo 'Introduzca los valores de escalado del video:'
read scale_value
        mencoder $video_input -ovc lavc -lavcopts vcodec=mpeg4 -oac pcm -vf scale=$scale_value -o $video_output
}
# 3)  Concatenar una serie de videos con el mismo formato en un video de salida:
function option_03
{
clear
echo 'CONCATENAR UNA SERIE DE VIDEOS CON EL MISMO FORMATO EN UN VIDEO DE SALIDA:'
echo
echo 'Ejemplo de lista de videos -> video 1 video 2 video 3 video 4 video N'
echo
echo 'Introduce los nombres de la lista de videos de entrada por orden y con un espacio en blanco de separacion entre si:'
read videos_input_list
echo
echo 'Introduce el nombre del video resultado de la concatenacion de videos:'
read video_output
echo
mencoder -ovc copy -oac copy $videos_input_list -o $video_output
}
# 4)  Cortar un fragmento de un video marcando el tiempo inicial y final o su peso en MB
function option_04
{
clear
echo 'CORTAR UN FRAGMENTO DE UN VIDEO MARCANDO EL TIEMPO INICIAL Y FINAL O SU PESO EN MB'
echo
echo 'Ejemplo de cortar fragmento de video usando segudos como referencia:'
echo
echo '$ mencoder video_input -ss 10 -endpos 55.5 -ovc copy -oac copy -o video_output'
echo
echo
echo 'Ejemplo de cortar fragmento de video usando minutos como referencia:'
echo
echo '$ mencoder video_input -ss 0:00 -endpos 59:20 -ovc copy -oac copy -o video_output'
echo
echo
echo 'Ejemplo de cortar fragmento  de video usando megas de diferencia:'
echo
echo 'mencoder -ovc copy -oac copy -ss 0 -endpos 700mb -o $video_output $video_input'
echo
echo
echo 'Introduce el nombre del video completo:'
read video_input
echo
echo 'Introduce el nombre del fragmento de video:'
read video_output
echo
echo 'Introduce la posicion inicial en segudos, minutos o MB del fragmento de video:'
read init_position
echo
echo 'Introduce la posicion final en segundos, minutos o MB del  fragmento de video:'
read end_position
echo
mencoder -ovc copy -oac pcm -ss $init_position -endpos $end_position -o $video_output $video_input
}
# 5)  Incrustar subtitulos a un video
function option_05
{
clear
echo 'INCRUSTAR SUBTITULOS A UN VIDEO'
echo
echo 'Introduce nombre de video sin subtítulos:'
read video_input
echo
echo 'Introduce nombre del archivo de subtítulos'''
read subtitles_file
echo
echo 'Introduce nombre de video subtitulado:'
read video_output
echo
mencoder -ovc lavc -oac mp3lame $video_input -o $video_output -sub $subtitles_file -subfont-text-scale 3
# mencoder $video_input -oac copy -ovc lavc -sub $subtitles_file -font /usr/share/fonts/truetype/freefont/FreeSansBold.ttf -subfont-autoscale 3 -ass -ass-color ffff8000 -ass-border-color 00000000 -ass-force-style Bold=1,Outline=1,Shadow=3,Fontsize=30 -fontconfig -subcp ISO-8859-1 -ass-line-spacing 0 -o $video_output
}
# 6)  Codificación de video en cualquier formato en otro video con un bitrate de superior
function option_06
{
clear
echo 'CODIFICACIÓN DE VIDEO EN CUALQUIER FORMATO EN OTRO VIDEO CON UN BITRATE SUPERIOR'
echo
echo 'Introduce nombre de video de entrada:'
read video_input
echo
echo 'Introduce el nombre de video de salida:'
read video_output
echo
mencoder $video_input -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2000:vhq -oac copy -o $video_output
}
# 7)  Arreglar videos en formato .avi con índice roto o interpolado debido a errores de flujo en video o/y audio
function option_07
{
clear
echo 'ARREGLAR VIDEOS EN FORMATO AVI CON INDICE ROTO O INTERPOLADO DEBIDO A ERRORES DE FLUJO EN VIDEO O/Y AUDIO'
echo
echo 'Introduce nombre de video de entrada:'
read video_input
echo
echo 'Introduce el nombre de video de salida:'
read video_output
echo
mencoder -idx $video_input.avi -ovc copy -oac copy -o $video_output.avi
}
# 8) Rotar un vídeo en cualquier formato
function option_08
{
clear
echo 'ROTAR LA IMAGEN DE 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
echo '_____________VALORES DE ROTACION DE IMAGEN DE VIDEO____________________'
echo 
echo 'Las opciones [0-3] son solo para videos horizontales (landscape)'
echo
echo '0 = Rotar 90 grados a la derecha e invertir'
echo '1 = Rotar 90 grados a la derecha'
echo '2 = Rotar 90 grados a la izquierda'
echo '3 = Rotar 90 grados a la izquierda e invertir'
echo
echo 'Las opciones [4-7] son solo para vídeos verticales (portrait):'
echo
echo '4 = Rotar vídeos verticales a la derecha 90° e invertir'
echo '5 = Rotar vídeos verticales a la derecha 90 grados'
echo '6 = Rotar vídeos verticales a la izquierda 90 grados'
echo '7 = Rotar vídeos verticales a la izquierda 90° e invertir'
echo
echo '8 = Volver al menu principal'
echo '________________________________________________________________________'
echo
echo 'Introduce el valor de rotación del video de 1 a 7:'
read rotate_value
echo
if [ $rotate_value -ge 0 ] && [ $rotate_value -le 7 ]; then
mencoder -vf rotate=$rotate_value -oac pcm -ovc lavc $video_input -o $video_output
else
        echo 'Valor de rotación de imagen de video no contemplado'
fi
}
# 9) Añadir audio a un video
function option_09
{
clear
echo '____________________MENÚ DE AÑADIR AUDIO A UN VIDEO ____________________'
echo 
echo '1 = AÑADIR ARCHIVO DE AUDIO .MP3 A UN VIDEO'
echo '2 = AÑADIR ARCHIVO DE AUDIO .WAV A UN VIDEO'
echo '________________________________________________________________________'
echo
echo
echo 'Nota: Sí el video tiene audio será sustituido por el audio que le añadamos y sí la pista de audio es mas larga que la duración del video se cortará donde acabe el video.
Añadir una pista de audio a un vídeo'
echo
echo 'Introduce una opción de 1 a 2:'
read option_audio_to_video
echo
if [ $option_audio_to_video -ge 0 ] && [ $option_audio_to_video -le 2 ]; then
case $option_audio_to_video in
1)
echo 'Introduce archivo de video de entrada:'
read  video_input
echo
echo 'Introduce archivo de audio MP3:'
read  audio_input_mp3
echo
echo 'Introduce archivo de video de salida:'
read video_output
echo
mencoder $video_input -o $video_output -ovc copy -oac copy -audiofile $audio_input_mp3
;;
2)
echo 'Introduce archivo de video de entrada:'
read  video_input
echo
echo 'Introduce archivo de audio WAV:'
read  audio_input
echo
echo 'Introduce archivo de video de salida:'
read video_output
echo
mencoder $video_input -o $video_output -ovc copy -oac mp3lame -audiofile $audio_input
;;
esac else
        echo 'Opción de añadir audio a un video no contemplada'
fi
}
# 10) Codificación de un video en 2 pasadas y con reducción del ruido de fondo'
function option_10
{
echo 'CODIFICACION DE UN VIDEO EN 2 PASADAS Y CON REDUCCION DEL RUIDO DE FONDO'
echo
echo 'Introduce nombre de video de entrada:'
read video_input
echo
echo 'Introduce el nombre de video de salida:'
read video_output
echo
mencoder $video_input -o $video_output -oac copy -ovc x264 -x264encopts  bitrate=3000 pass=2 nr=2000
}
 # 11) Crear un video con imágenes estáticas
function option_11
{
clear
echo 'CREACION UN VIDEO A PARTIR DE IMÁGENES ESTÁTICAS'
echo
echo '__________________MENÚ DE CREACION DE UN VIDEO A PARTIR DE IMAGENES ESTATICAS _____________________'
echo 
echo '1 = CREAR UN VIDEO A PARTIR DE IMÁGENES ESTÁTICAS'
echo '2 = CREAR UN VIDEO A PARTIR DE IMAGENES ESTATICAS REDIMENSIONANDO LAS IMAGENES CON EL MISMO TAMAÑO'
echo '__________________________________________________________________________________________________'
echo
echo
echo 'Introduce una opción de 1 a 2'
read option_images_to_video
echo
if [ $option_images_to_video -ge 0 ] && [ $option_images_to_video -le 2 ]; then
case $option_images_to_video in
1)
echo 'CREAR UN VIDEO A PARTIR DE IMÁGENES ESTÁTICAS'Á
echo   
echo 'Si fps = 1, cada imagen se verá durante 1 segundo y el video duraría 3 segundos'
echo
echo 'Introduce la extensión (jpg, jpeg, png, etc) de las imágenes:'
read image_ext
echo
echo 'Introduce el numero de frames por segundo (fps):' read fps_value
echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
mencoder mf://*.$image_ext -mf fps=$fps_value -ovc lavc -oac copy -o $video_output
;;
2)
echo 'CREAR UN VIDEO A PARTIR DE IMÁGENES ESTÁTICAS REDIMENSIONADO EL TAMAÑO DE LAS IMAGENES'
echo       
echo
echo 'Si fps = 1, cada imagen se verá durante 1 segundo y el video duraría 3 segundos.'
echo
echo 'Introduce la extensión (jpg, jpeg, png, etc) de las imágenes:'
read image_ext
echo
echo 'Introduce el numero de frames por segundo (fps):' read fps_value
echo
echo 'Introduce el ancho de las imágenes para su redimensionado:' read width_value
echo echo 'Introduce el alto de las imágenes para su redimensionado:' read height_value
echo echo 'Introduce el nombre del video de salida:'
read video_output
echo
mencoder mf://*.$image_ext -mf w=$width_value:h=$height_value:fps=$fps_value:type=$image_ext -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o $video_output
;;
esac
else
        echo 'Opción de convertir imágenes estáticas en un video no contemplada'
fi
}
# 12) Sincronización del video con el audio ligeramente desfasado
function option_12
{
clear
echo 'SINCRONIZACION DE VIDEO CON EL AUDIO LIGERAMENTE DESFASADO'
echo
echo 'Esto soluciona demoras en audio por retraso en el encabezado del vídeo.'
        echo 'Los valores positivos retrasan el audio, y los valores negativos retrasan el video.'
        echo 'Un valor -0.325 retrasa el video para que sincronice con el video'
echo
echo 'Introduce nombre de video de entrada:'
read video_input
echo
echo 'Introduce el nombre de video de salida:'
read video_output
echo
echo 'Introduce el valor de delay del video con signo - si es negativo:'
read audio_relay_value
mencoder $video_input -ovc copy -oac mp3lame -audio-delay $audio_relay_value -o $video_output
}
# 13) Convertir un video en formato MP4 a formato AVI
function option_13
{
clear
echo 'CONVERTIR UN VIDEO EN FORMATO MP4 A FORMATO AVI'
echo
echo 'Introduce nombre de video de entrada con la extensión MP4:'
read video_input
echo
echo 'Introduce el nombre de video de salida con la extensión AVI:'
read video_output
echo
        mencoder $video_input -of avi -oac lavc -ovc lavc -lavcopts acodec=ac3:abitrate=192:vcodec=mpeg4:v4mv:keyint=100:vbitrate=2000 -o $video_output
}
# 14) Convertir un video en formato MP4 a formato MPEG
function option_14
{
clear
echo 'CONVERTIR UN VIDEO EN FORMATO MP4 A FORMATO MPEG'
echo
echo 'Introduce nombre de video de entrada con la extensión MP4:'
read video_input
echo
echo 'Introduce el nombre de video de salida con la extensión MPEG:'
read video_output
echo
        mencoder $video_input -of mpeg -oac lavc -ovc lavc -lavcopts acodec=ac3:abitrate=192:vcodec=mpeg2video:vhq:keyint=32:vbitrate=2000 -ofps 25 -o $video_output
}
# 15) Convertir un video en formato WMV a formato AVI
function option_15
{
clear
echo 'CONVERTIR UN VIDEO EN FORMATO WMV A FORMATO AVI'
echo
echo 'Introduce nombre de video de entrada con la extensión WMV:'
read video_input
echo
echo 'Introduce el nombre de video de salida con la extensión AVI:'
read video_output
echo
        mencoder $video_input -ofps 23.976 -ovc lavc -oac copy -o $video_output
}
# 16) Convertir un video en formato OGV a formato AVI
function option_16
{
clear
echo '____________________MENÚ DE CONVERTIR VIDEO OGV EN AVI ____________________'
echo 
echo '1 = CONVERTIR VIDEO OGV EN AVI'
echo '2 = CONVERTIR VIDEO OGV EN AVI CON MJPEG'
echo '________________________________________________________________________'
echo
echo
echo
echo 'Introduce una opción de 1 a 2:'
read option_ogv_to_avi
echo
if [ $option_ogv_to_avi -ge 0 ] && [ $option_ogv_to_avi -le 2 ]; then
case $option_ogv_to_avi in
1)
echo 'Introduce archivo de video de entrada con la extensión OGV:'
read  video_input
echo
echo 'Introduce archivo de video de salida con la extensión AVI:'
read video_output
echo
mencoder $video_input -ovc xvid -oac mp3lame -xvidencopts pass=1 -o $video_output
;;
2)
echo 'Introduce archivo de video de entrada con la extensión OGV:'
read  video_input
echo
echo 'Introduce archivo de video de salida con la extensión AVI:'
read video_output
echo
mencoder -idx $video_input -ovc lavc -oac pcm -lavcopts vcodec=mjpeg -o $video_output
;;
esac else
        echo 'Opción de añadir audio a un video no contemplada'
fi
}

# 17) Convertir un video en formato FLV a formato AVI
function option_17
{
clear
echo 'CONVERTIR UN VIDEO EN FORMATO FLV A FORMATO AVI'
echo
echo 'Introduce nombre de video de entrada con extensión FLV:'
read video_input
echo
echo 'Introduce el nombre de video de salida con la extensión AVI:'
read video_output
echo
        mencoder -oac mp3lame -lameopts cbr=128 -ovc xvid -xvidencopts bitrate=1200 $video_input -o $video_output
}
# 18) Convertir un video en formato MOV a formato AVI
function option_18
{
clear
echo 'CONVERTIR UN VIDEO EN FORMATO MOV A FORMATO AVI'
echo
echo 'Introduce nombre de video de entrada con la extensión MOV:'
read video_input
echo
echo 'Introduce el nombre de video de salida con la extensión AVI:'
read video_output
echo
        # Primera pasada
mencoder $video_input -ovc xvid -xvidencopts bitrate=600:pass=1 -vf scale=320:240 -oac mp3lame -lameopts abr:br=64 -o $video_output
# Segunda pasada
mencoder $video_input -ovc xvid -xvidencopts bitrate=600:pass=2 -vf scale=320:240 -oac mp3lame -lameopts abr:br=64 -o $video_output
}
# 19) Convertir sin pérdida de calidad (lossless) a formato AVI
function option_19
{
clear
echo 'CONVERTIR VIDEO A FORMATO AVI SIN PÉRDIDA DE CALIDAD'
echo
echo 'Introduce el nombre del video de entrada:'
read video_input
echo
echo 'Introduce el nombre del video de salida con la extensión AVI:'
read video_output
echo
mencoder -ovc lavc -oac pcm -lavcopts vcodec=ffv1 $video_input -o $video_output
}
# 20) Convertir un DVD a un video AVI con gran calidad'
function option_20
{
clear
echo 'CONVERTIR DVD A FORMATO AVI Y MP3 EN 2 PASADAS'
echo
echo 'ADVERTENCIA: MENCODER NO CONVIERTE DVDS ENCRIPTADOS'
echo
echo 'Introduce el nombre de video de salida con extensión AVI:'
read video_output
mencoder dvd:// -oac mp3lame -lameopts cbr:br=128:vol=5 -srate 44100 -ovc xvid -xvidencopts pass=1 -o /dev/null
mencoder dvd:// -oac mp3lame -lameopts cbr:br=128:vol=5 -srate 44100 -ovc xvid -xvidencopts pass=2:bitrate=1500 -o $video_output
}
# 21) Quitar audio a un video
function option_21
{
clear
echo 'QUITAR 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
mencoder -ovc copy -nosound $video_input -o $video_output
}
# 22) Modificar la velocidad de reproduccion de un video
function option_22
{
clear
echo 'MODIFICAR LA VELOCIDAD DE UN VIDEO'
echo 
echo 'Introduce el nombre del video de origen:'
read video_input
echo
echo 'Introduce el nombre del video de salida:'
read video_output
echo
echo 'Ejemplo: Si el valor de la velocidad es 2, el video resultante se reproducirá el doble de rapido'
echo
echo 'Introduce la velocidad del video:'
read speed_value
echo
mencoder -speed $speed_value -o $video_output -ovc lavc -oac pcm $video_input
}
# 23) Ver sintaxis general de Mencoder
function option_23
{
clear
echo 'SINTAXIS GENERAL DE MENCODER'
echo
echo 'mencoder input.ogg -oac [codec] [codec opts] -ovc  [codec] [codec opts] -vf [filter opts] -other_opts [other_opts opt] -o output.avi'
}
# 24) Ver opciones de codificación de video de Mencoder
function option_24
{
mencoder -ovc help
}
# 25) Ver opciones de codificación de audio de Mencoder
function option_25
{
mencoder -oac help
}
# 26) Ver los filtros de video de Mencoder'
function option_26
{
mencoder -vf help
}
# 27) Ver manual de Mencoder'
function option_27
{
man mencoder
}
# 28) Salir del script
function option_28
{
echo 'Salir del script'
}
write_option=0
go_out=28
while [ $write_option -ne $go_out ];
do 
   clear
   menu
   write_option
     
   if [ $write_option -ge 1 ] && [ $write_option -le 28 ];
   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
;;
      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/mencoder.sh para poder ejecutarlo desde cualquier directorio
2) Concede permisos de ejecución en modo root:
# chmod + x mencoder.sh
3) Ejecuta el script en modo usuario:
$ bash mencoder.sh

[1] http://www.mplayerhq.hu/DOCS/HTML/en/index.html
[2] http://www.mplayerhq.hu/DOCS/HTML/es/index.html
[3] http://www.mplayerhq.hu/design7/news.html