Cómo usar FFMPEG para convertir múltiples archivos multimedia a la vez en Linux
- 4254
- 980
- Eduardo Tapia
Objetivo
Escriba un script bash simple para la conversión de archivos de lotes FFMPEG.
Distribuciones
Esto funcionará en todas las distribuciones de Linux.
Requisitos
Una instalación de Linux que funciona con FFMPEG instalada.
Convenciones
- # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de
sudo
dominio - ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado
Introducción
FFMPEG inmensamente poderoso cuando se trata de manipular y convertir archivos multimedia, pero carece de una característica importante. FFMPEG no tiene la capacidad de manejar varios archivos a la vez. Entonces, qué puede hacer usted al respecto? Eres un usuario de Linux. No vas a sentarte allí y escribir manualmente en el mismo comando una y otra vez, ¿estás??
FFMPEG es completamente scriptable. Por lo tanto, puede escribir un script bash simple para recorrer el contenido de un directorio especificado y realizar la conversión que desea en cada archivo. Si bien eso puede parecer mucho, realmente no es. El guión será de menos de 20 líneas de fiesta.
Configurar el archivo
Comience por configurar su archivo. Hazlo en cualquier lugar que quieras.
$ touch ffmpeg-batch.mierda
Entonces, hazlo ejecutable.
$ chmod +x ffmpegatatch.mierda
Abra el archivo y configúrelo para comenzar a escribir.
#! /bin/bash
Planifique sus variables
Tendrá que pasar múltiples argumentos a su script si desea que sea lo suficientemente flexible como para manejar la mayoría de los escenarios para los que usaría FFMPEG. Por eso, necesitarás bastantes variables. Claro, puede usar las entradas sin procesar, pero será mucho más difícil hacer un seguimiento.
srcext = $ 1 portext = $ 2 srcdir = $ 3 Destdir = $ 4 opts = $ 5
Tienes cinco variables en total; Una extensión de origen, un destino o una extensión resultante, un directorio de origen, un directorio de destino y sus opciones. Las opciones son cualquier opción que desee en su comando ffmpeg. Hay otras formas de hacer esto, pero simplemente pasarlos como una cuerda funciona, y es súper simple.
El lazo
Este guión se centra en un para
bucle para iterar sobre el contenido del directorio especificado. Necesitas crear ese bucle a continuación. Empiece con solo configurar la idea.
para el nombre de archivo en la carpeta; hacer hecho
Por supuesto, CARPETA
no es nada. Debe configurar el bucle para iterar sobre el contenido de un directorio, y ese directorio se almacena en srcdir
. También debe decirle que solo necesita recorrer los archivos con una extensión específica, srcext
. Entonces, la combinación que estás buscando se ve así:
"$ srcdir"/*.$ srcext
El comodín (*
) lo dice a todos los archivos, luego el .$ srcext
le da la extensión completa para buscar. Las citas son necesarias alrededor $ srcdir
para evitar que tratara todo como una cadena y no funcione correctamente.
Todo el asunto juntos se ve así:
para el nombre de archivo en "$ srcdir"/*.$ srcext; hacer hecho
Tu comando ffmpeg
Conoces la sintaxis básica de ffmpeg, pero eso no va demasiado lejos aquí. Todo se compone de variables. Hablando de variables, vas a necesitar un par más. Para obtener piezas correctas para la carpeta de destino y los archivos, los nombres de archivo originales deben cortarse y reorganizarse.
Primero, cree una nueva variable, basepath
y establecerlo igual a esta expresión regular: $ nombre de archivo%.*
.
basepath = $ nombre de archivo%.*
La expresión despierta todo después del .
desde el camino, lo que significa la extensión.
Ahora, necesitas deshacerte del camino en sí. Para hacer eso, establecer nombre de base
igual a $ basepath ##*/
.
Basename = $ BasePath ##*/
Que se encarga de todo lo demás, hasta el nombre de archivo en sí.
Puede armar las piezas para formar la llamada a ffmpeg ahora.
ffmpeg -i "$ nombre de archivo" $ opts "$ Destdir"/"$ Basename"."$ Derext"
Como puede ver, es lo mismo que una llamada normal a FFMPEG, pero usando las variables. La pieza más complicada es el destino, pero simplemente combina las piezas individuales del destino para formar una ruta completa con nombre de archivo y extensión.
Terminando
Si lo desea, puede obtener un mensaje de éxito para cuándo se completa la conversión. Tírelo al final de su guión después del para
bucle.
Echo "Conversión de $ srcext a $ Destrext Complete!"
Todo debería verse algo así:
#! /bin/bash srcext = $ 1 portext = $ 2 srcdir = $ 3 destdir = $ 4 opts = $ 5 para el nombre de archivo en "$ srcdir"/*.$ srcext; hacer basepath = $ nombre de archivo%.* basename = $ BasePath ##*/ ffmpeg -i "$ FileName" $ Opts "$ Destdir"/"$ Basename".Conversión de "$ Destrext" Done Echo "de $ Srcext a $ Destrext Complete!"
Ejecute su guión
Finalmente, ahora puede ejecutar su script para realizar conversiones de archivos por lotes. Eche un vistazo a este ejemplo para ver cómo se ve la sintaxis.
$ FFMPEG-Batch.SH FLAC MP3/PATH/TO/FILES/PATH/TO/Dest '-AB 320K'
No es tanto mucho más de lo normal. Solo ahora, está convirtiendo un directorio completo de archivos, en lugar de solo uno.
Pensamientos de cierre
Este script debe ser lo suficientemente flexible para la mayoría de las situaciones, y eso incluye video. Puede agregar el script a un sistema local o de sistema papelera
camino para que sea más fácilmente accesible desde fuera de su directorio.
Tutoriales de Linux relacionados:
- Cosas para instalar en Ubuntu 20.04
- Ubuntu 20.04 Instalación de FFMPEG
- Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
- Comandos de Linux: los 20 comandos más importantes que necesitas ..
- Cómo lanzar los archivos de música para convertir con ffmpeg
- Descarga de Linux
- Una introducción a la automatización, herramientas y técnicas de Linux
- La mejor distribución de Linux para desarrolladores
- Comandos básicos de Linux
- Archivos de configuración de Linux: los 30 principales más importantes
- « Instale y reproduce Overwatch en Linux con vino
- Escuche su estación de radio favorita con un solo comando en Linux »