
Estoy intentando copiar un archivo grande de videos (ubicados en subcarpetas) a una estructura de carpetas paralela mientras convierto los videos de mov a mp4 (además de algunos otros ajustes). Este es el comando:
for f in Users/me/VIDEOARCHIVE/*/*.mov; do ffmpeg -i "$f" "Users/me/CONVERTED/${f%.mov}.mp4"; done
Sin embargo, aparece "no existe tal archivo o directorio" para el archivo de salida. Sé que hay muchas preguntas similares en este sitio, pero ninguna de ellas fue útil para mi situación.
También intenté crear una estructura de carpetas vacía de antemano de modo que solo tuviera que crear el archivo .mp4, pero sigo apareciendo el mismo error.
Funciona cuando la estructura de carpetas (vacía) ya está creada de antemano. Pero tan pronto como falta una carpeta, aparece "no existe tal archivo o directorio".
¿Hay alguna manera de decirle que cree carpetas principales si es necesario para poder colocar archivos en ellas?
Respuesta1
¿Hay alguna manera de decirle que cree carpetas principales si es necesario para poder colocar archivos en ellas?
¿ffmpeg? No. No creará carpetas por sí solo. En realidad, muy pocos programas hacen esto.
Algunas sugerencias:
- Debes crear la carpeta de antemano.
- Debe utilizar el nombre base del archivo, ya que
$f
ya contiene la ruta completa del archivo. - Debe utilizar globbing recursivo para que su archivo de video (
**/*
) atraviese todos los directorios.
Juntando eso:
# enable recursive globbing
shopt -s globstar
# create the directory if necessary
dir="/Users/me/CONVERTED/"
mkdir -p "$dir"
# iterate over all files
for f in /Users/me/VIDEOARCHIVE/**/*.mov; do
# get the file's basename
fname="$(basename "$f")"
# run the command, replacing the file extension
ffmpeg -i "$f" "$dir/${fname%.mov}.mp4"
done