¿Cómo se convierte un directorio / carpeta completo con ffmpeg a través de la línea de comandos o con un script por lotes?
ffmpeg
batch-processing
Eugene
fuente
fuente
i was unexpected at this time.
do name=`echo "${i%.*}"`;
funcionará en nombres de archivo con puntos (y espacios) en ellos..bat
Windows?Para Linux y macOS, esto se puede hacer en una línea, usando la expansión de parámetros para cambiar la extensión del nombre de archivo del archivo de salida:
fuente
ffmpeg
no puede ingresar y salir al mismo archivo. 2) No estoy seguro si los comandos Bash funcionan en Windows 10 de forma nativa. Tal vez debería agregar a la respuesta que está dirigido a sistemas que pueden usar Bash de forma nativa, como Linux y macOS. lxs proporcionó una respuesta de Windows para esta pregunta.for f in *.mkv; do ffmpeg -i "$f" -map 0 -movflags faststart -c:v libx264 -c:a copy -c:s copy "${f/x265/x264}"; done
Y en Windows:
fuente
FOR /F "tokens=*" %G IN ('dir /b *.mp3') DO ffmpeg -i "%G" -map_metadata -1 -c:v copy -c:a copy "%~nG .mp3"
Un script bash de una línea sería fácil de hacer; reemplácelo
*.avi
con su tipo de archivo:fuente
-qscale
. Elimínelo y use la configuración predeterminada, o use-crf
en su lugar (el valor predeterminado es-crf 23
).basename
no se cita la subshell invertida . Esto es exactamente por qué bash tiene expansión de shell en su lugar: para i en * .avi; do ffmpeg -i "$ i" -qscale 0 "$ (nombre base" $ i ".avi)". mov; hechoPara convertir con subdirectorios, use eg
fuente
find -name "*.vtt" -exec ffmpeg -i {} {}.srt \;
find *.mp4 -exec ffmpeg -i {} {}.mp3 \;
find . -name *.ogg -or -name *.wma -exec ffmpeg -i {} {}.mp3 \;
find . -name *.wma -exec ffmpeg -i {} {}.mp3 \; -exec rm {} \;
Para ventanas:
Aquí estoy convirtiendo todos los archivos (.mp4) a archivos (.mp3).
Simplemente abra cmd, vaya a la carpeta deseada y escriba el comando.
Acceso directo: (opcional)
1. Vaya a la carpeta donde están presentes sus archivos (.mp4)
2. Presione Mayús y haga clic con el botón izquierdo y elija "Abrir ventana de PowerShell aquí"
o "Abrir ventana de símbolo del sistema aquí"
3. Escriba "cmd" [NOTA : Omita este paso si abre directamente cmd en lugar de PowerShell]
4. Ejecute el comando
Si desea poner esto en un archivo por lotes en Windows 10, debe usar %% i.
fuente
Para cualquiera que quiera convertir por lotes cualquier cosa con ffmpeg pero le gustaría tener una interfaz conveniente de Windows, desarrollé este front-end:
https://sourceforge.net/projects/ffmpeg-batch
Agrega a ffmpeg una interfaz de moda de ventana, barras de progreso e información restante del tiempo, características que siempre eché de menos al usar ffmpeg.
fuente
Si tiene GNU en paralelo , puede convertir todos los archivos .avi a continuación
vid_dir
a mp4 en paralelo, utilizando todos excepto uno de los núcleos de su CPU conPara convertir de / a diferentes formatos, cambie
'*.avi'
o.mp4
según sea necesario. GNU paralela figura en la mayoría de los repositorios de distribuciones de Linux en un paquete que generalmente se llamaparallel
.fuente
!
al final de cualquiera de las frases de bash?Sé que esto podría ser redundante, pero uso este script para convertir archivos por lotes.
Se necesitan 2 argumentos para hacerlo más flexible:
Creo un alias para él, pero también puede usarlo manualmente de esta manera:
Esto convertiría todos los
mkv
archivos enmp4
archivos.Como puedes ver, es un poco más versátil. Siempre que
ffmpeg
pueda convertirlo, puede especificar dos extensiones.fuente
Obteniendo un poco como el código de golf aquí, pero dado que casi todas las respuestas hasta ahora son bash (salvo una sola cmd), aquí hay un comando multiplataforma de
Windowsque usa powershell (porque es increíble):Puede cambiar * .avi a lo que coincida con su metraje original.
fuente
Por supuesto, ahora PowerShell ha aparecido, diseñado específicamente para hacer que algo como esto sea extremadamente fácil.
Y sí, PowerShell también está disponible en otros sistemas operativos además de Windows, pero viene preinstalado en Windows, por lo que esto debería ser útil para todos.
Primero, querrás enumerar todos los archivos dentro del directorio actual, así que comenzaremos con:
También puede usar
ls -Recurse
si desea convertir recursivamente todos los archivos en subdirectorios también.Luego, los filtraremos solo al tipo de archivo que queremos convertir, por ejemplo, "avi".
Después de eso, pasaremos esa información a FFmpeg a través de un
ForEach
.Para la entrada de FFmpeg, usaremos
FullName
: esa es la ruta completa al archivo. Y para la salida de FFmpeg usaremos elName
- pero reemplazando el.avi
al final con.mp3
. Entonces, se verá más o menos así:Entonces, juntemos todo eso y este es el resultado:
Eso convertirá todos los archivos ".avi" en archivos ".mp3" a través de FFmpeg, simplemente reemplace las tres cosas entre comillas para decidir qué tipo de conversión desea y siéntase libre de agregar cualquier otro argumento a FFmpeg dentro de
ForEach
.Podría llevar esto un paso más allá y agregarlo
Remove-Item
al final para eliminar automáticamente los archivos antiguos.Si
ffmpeg
no está en su camino, y en realidad está en el directorio en el que se encuentra actualmente, escriba./ffmpeg
allí en lugar de soloffmpeg
.Espero que esto ayude a cualquiera.
fuente
.ps1
archivo, no en un.bat
archivo. Tendrá que ejecutarSet-ExecutionPolicy RemoteSigned
como administrador si nunca antes ha ejecutado un script PS.Procese los
flac
archivos por lotes enmp3
(seguro para nombres de archivos con espacios) usando [1] [2]fuente
ventanas:
esta es una tasa de bits variable de calidad 2, puede establecerla en 0 si lo desea, pero a menos que tenga un sistema de altavoces realmente bueno, no tiene valor
fuente
Si desea una interfaz gráfica para procesar por lotes con ffmpegX, pruebe Quick Batcher . Es gratis y tomará su última configuración de ffmpegX para convertir los archivos que coloque en ella.
Tenga en cuenta que no puede arrastrar y soltar carpetas en Quick Batcher. Por lo tanto, seleccione los archivos y luego póngalos en Quick Batcher.
fuente
Solo este funcionó para mí, tenga en cuenta que debe crear la carpeta "newfiles" manualmente donde se encuentra el archivo ffmpeg.exe.
Convert . archivos a .wav Código de audio:
es decir, si desea convertir todos los archivos .mp3 a .wav, cambie
("*.*")
a("*.mp3")
.El autor de este script es:
https://forum.videohelp.com/threads/356314-How-to-batch-convert-multiplex-any-files-with-ffmpeg
Espero que haya ayudado 🙏.
fuente
Esto creará video mp4 de todos los archivos jpg del directorio actual.
fuente
Y para Windows, esto no funciona
incluso si doblo esos
%
.Incluso sugeriría:
además:
fuente
Esto es lo que uso para convertir por lotes avi a 1280x mp4
Funciona bien como un archivo cmd, ejecútelo, el bucle encuentra todos los archivos avi en esa carpeta.
llama a MY (cambio por el tuyo) ffmpeg, pasa el nombre de entrada, la configuración es para reescalar con nitidez. Los problemas no necesitan CRF y "
-b:v 1024k
" ...El archivo de salida es el archivo de entrada menos la extensión, con mp4 como nueva ext.
fuente
Estoy usando este one-liner en linux para convertir archivos (generalmente H265) en algo que puedo jugar en Kodi sin problemas:
Esto se convierte en un archivo temporal y luego reemplaza el original para que los nombres sigan siendo los mismos después de la conversión.
fuente
Además, si desea la misma conversión en subcarpetas. Aquí está el código recursivo.
fuente
pequeño script php para hacerlo:
fuente
escapeshellarg()
, y funciona tanto en Windows como en Linux. Estoy de acuerdo en que es un caso extremo sin embargo.Otra solución simple que aún no se ha sugerido sería usar
xargs
:ls *.avi | xargs -i -n1 ffmpeg -i {} "{}.mp4"
Un inconveniente menor es la denominación incómoda de los archivos de salida (por ejemplo
input.avi.mp4
). Una posible solución para esto podría ser:ls *.avi | xargs -i -n1 bash -c "i={}; ffmpeg -i {} "\${i%.*}.mp4"
"fuente
ls
conprintf '%s\n'
aquí.