4 votos

¿Hay alguna manera de convertir un montón de archivos .ogg en una carpeta a .mp3 utilizando ffmpeg?

¿Hay alguna manera de convertir un montón de archivos .ogg en unas 30 carpetas en una carpeta que contiene esas carpetas a archivos .mp3 y ponerlos en otra carpeta utilizando el comando ffmpeg ? Todos los métodos anteriores que he probado conducen al mismo error: "*.ogg no existe tal archivo o directorio"

Si es posible, ¿podría decirme cómo? No puedo encontrar nada relacionado con esta pregunta específica.

Edición: He intentado editar el comando y ahora me da este error: (esto va para todos los archivos de la carpeta)

/Users/Macbook/Downloads/Minecraft+Sound+Pack+1.13/step/wood6.ogg~/Downloads/Minecraft\ Sounds/step/wood6.mp3: No such file or directory

Usé esto:

$ for file in ~/Downloads/Minecraft+Sound+Pack+1.13/step/*.ogg 
> do
>     fullfilename=$(basename "${file}")
>     filename="${fullfilename%.*}"
>     ffmpeg -i "$file""~/Downloads/Minecraft\ Sounds/step/$filename.mp3"
> done

Creo que está tratando de enlazar ambos directorios.

0 votos

El código anterior no funcionó. Si se supone que ffmpeg debe leer en carpetas dentro del directorio, entonces algo está mal con ffmpeg. He probado "ffmpeg -i "{}" "{.}.mp3" ::: .ogg", "for i in *.ogg; do ffmpeg -i "$i" "${i%. }.mp3"; hecho" y el código anterior.

0 votos

@user10829240 ¿Intentaste convertir un archivo por separado para comprobar si ffmpeg funciona en tu sistema? ffmpeg -i file_name.ogg file_name.mp3

0 votos

Si ya tienes un fragmento de código, añádelo directamente a la pregunta y explica en qué falla.

4voto

¿No es asombroso cómo problemas tan pequeños crean un montón de soluciones :-)

Descargue el archivo ZIP y ejecute

unzip "Minecraft Sound Pack 1.13.zip" -d mc
cd mc/
find . -type f -iname '*.ogg' -execdir sh -c \
    'ffmpeg -v 8 -i "$1" "${1%.*}.mp3" && rm -- "$1" && echo "$1"' sh {} \;

Esto sustituirá a todos los .ogg archivos con el .mp3 versión, borrando el .ogg en el proceso. Todavía tienes los datos originales en el archivo ZIP si los necesitas.

  • -type f garantiza que sólo se comparen los archivos (de lo contrario, un directorio llamado foo.ogg se pasaría a ffmpeg para el procesamiento también)
  • El -execdir ejecuta el siguiente comando dentro del directorio en el que se encontró el archivo (por lo que no hay que preocuparse de eliminar los nombres de las rutas)
  • Porque -execdir sólo puede ejecutar un iniciamos un nuevo shell y pasamos el conjunto de comandos a través de -c
  • ffmpeg -v 8 -i "$1" "${1%.*}.mp3" && rm -- "$1" && echo "$1" es el comando que se ejecuta, con el nombre del archivo a convertir como $1
  • sh {} son los parámetros que se pasan al shell script como $0 y $1 respectivamente. sh sólo es necesario por razones sintácticas (se puede poner cualquier palabra, algunas personas utilizan _ por ejemplo), {} se sustituye por el archivo encontrado actualmente
  • \; termina el -execdir parte (en realidad ; lo hace, pero necesita ser escapado de bash, que de otro modo lo interpretaría como un terminador de comando)

PD: Si quieres ver los detalles de ffmpeg eliminar el -v 8 parte.

0 votos

¡Gracias! Esto resolvió mi problema. Le agradezco su ayuda.

2voto

user3439894 Puntos 5883

Como ejemplo, tengo un montón de .ogg archivos en mi Downloads directorio, así que... para convertir por lotes un montón de .ogg archivos en un directorio determinado a .mp3 en el mismo directorio, hice lo siguiente en Terminal :

cd Downloads
for f in *.ogg; do ffmpeg -i "$f" "${f%.*}.mp3"; done

Esto creó una .mp3 archivo para cada .ogg archivo que tengo en mi Descargas directorio.

Así que, utilizando la ruta de su directorio, haga lo siguiente:

cd ~/Downloads/Minecraft+Sound+Pack+1.13/step
for f in *.ogg; do ffmpeg -i "$f" "${f%.*}.mp3"; done

Dicho esto y teniendo en cuenta que se trata de un paquete de archivos de sonido que se ha descargado de Internet, Minecraft+Sound+Pack+1.13.zip, que contiene 131 directorios algunos anidados a 3 o más niveles de profundidad, y 1406 .ogg archivos, de los cuales algunos nombres de archivo son los mismos, yo manejaría la situación teniendo en cuenta las siguientes condiciones.

  1. He descargado el Minecraft+Sound+Pack+1.13.zip de Internet.
  2. Expandí el archivo zip haciendo doble clic en él en mi carpeta de descargas en el Finder. Tenga en cuenta que esto se debe a que no dejo que el navegador descomprima los archivos comprimidos descargados. Esto también conserva una copia del archivo zip en caso de que todavía lo necesite después.

Una vez hecho esto, utilicé lo siguiente ejemplo bash script para convertir cada .ogg dentro del archivo estructura jerárquica de carpetas a un .mp3 en la misma ubicación. A continuación, elimine el .ogg archivos, ya que todavía tengo el archivo zip original.

#!/bin/bash

    # s="/Path/To/Source/Files"

s="$HOME/Downloads/Minecraft+Sound+Pack+1.13"

for d in $(find "$s" -type f -iname '*.ogg' | sed -E 's|/[^/]+$||' | sort -u); do
    cd "$d"
    for f in *.ogg; do
        ffmpeg -i "$f" "${f%.*}.mp3"
        rm "$f"
    done
done
  • Sólo hay que cambiar el valor de s="..." como o si es necesario y como regla general me gusta usar $HOME en lugar de ~ .

Tenga en cuenta que esto es sólo cómo elijo para hacer frente a la situación en el momento y hay muchas maneras diferentes que un script podría ser escrito. Sin embargo, creo que esto logra el objetivo final de tener el estructura jerárquica de carpetas del 131 directorios intacto con el 1406 convertido .mp3 archivos .

Por cierto... En mi viejo MacBook Pro, (Retina, 15 pulgadas, principios de 2013) 2,8 GHz Intel Core i7, tomó un poco menos de 9 minutos para procesar el 1406 .ogg archivos .

0 votos

Los cracks de la shell script en Unix&Linux probablemente tendrían un día de campo con el análisis de find resultados (aunque no se rompa para el problema específico) :-)

0 votos

@nohillside, normalmente está analizando la salida de ls que normalmente se derriba y se analiza find es la recomendación sobre el mismo. Voy a decir que para otro tipo de escenario particular de una sola vez que usaría de nuevo lo que he publicado, ya que fue probado varias veces y trabajó sin problemas y yo no quería tomar el tiempo para formular la línea de comandos necesarios en conjunción con -execdir y find y pasar por las pruebas, ya que me resultó más fácil probar la dirección que tomé. ¡Sin embargo, no hay duda en mi mente que su respuesta es la mejor manera de ir entre ellos, sólo que no es la única manera!

0 votos

Sé que sabe lo que está haciendo aquí :-)

0voto

Douglas Puntos 10417

Utilizando la lógica de base del post, ¿Sugerencias para un convertidor de audio por lotes? sólo tenemos que hacer un simple anidado for/do para iterar por cada uno de sus directorios. Suponiendo que en el mejor de los casos los directorios sólo tienen un directorio hijo y los archivos están bastante limpios (nada más que .ogg ) este script convertirá automáticamente los archivos por ti.

#!/bin/bash

base_dir="~/Downloads"
newbase_dir="~/Downloads/New Sounds"

cd "$base_dir"
for dir in */
do
  for file in *
  do
    fullfilename=$(basename "${file}")
    newfilename="${fullfilename%.*}"
    echo
    echo "Converting ${file} to $newfilename.mp3
    ffmpeg -i "$file" "${newbasedir}/${dir}/${filename}.mp3"
  done
done

script Lógica

Básicamente, iterará a través de cada archivo en cada directorio procesándolo a través de ffmpeg convirtiendo de .ogg a .mp3 manteniendo la estructura de directorios del original. Hay dos variables que debes establecer:

  • base_dir - el punto de partida de la ubicación de los archivos
  • new_base_dir - el directorio donde quieres que acaben todos los archivos.

Si no quieres que se mantenga la estructura de directorios, sólo tienes que reescribir el ffmpeg línea para leer:

ffmpeg -i "$file" "${newbase_dir}/${filename}.mp3"

0 votos

@user3439894 - Hice suposiciones que detallé en el primer párrafo.... Se arregla fácilmente con añadir el ogg extensión. Podría haber añadido la comprobación de errores tanto para el directorio como para el archivo, pero esto es sólo para la lógica de script.

0 votos

Teniendo en cuenta que el OP está tratando con un paquete de archivos de sonido descargado de Internet, Minecraft+Sound+Pack+1.13.zip, que contiene 131 directorios, algunos anidados 3 o más de profundidad, y 1406 archivos .ogg ... su script como actualmente codificado falla por múltiples razones.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X