Fffmpeg mientras el bucle se detiene antes de que se procesen todos los archivos

Fffmpeg mientras el bucle se detiene antes de que se procesen todos los archivos

Tengo una lista de 3k URL en un archivo de texto llamado "downloadmp3.txt", con el siguiente formato:

url1,filename1
url2,filename2
...
url3000,filename3000

Escribí el siguiente código usando fragmentos que encontré aquí:

while read p; do

a=$( echo $p | cut -d',' -f1 )
b=$( echo $p | cut -d',' -f2 )

ffmpeg -nostdin -loglevel quiet -stats -i ${a} ${b}.mp3 &

done <downloadmp3.txt

El problema que tengo es que mi secuencia de comandos descarga alrededor de 500 mp3 de los 3000 (algunos en su totalidad, otros parcialmente) y luego simplemente se detiene. Se agradecería cualquier consejo sobre qué cambios realizar.

¡Gracias!

Respuesta1

No ha mostrado ningún registro que indique cuál es el problema subyacente, pero básicamente está iniciando 3000 procesos al mismo tiempo, lo que podría tener consecuencias inesperadas (por ejemplo, que el servidor remoto finalice la conexión). Dado que &pone el trabajo en segundo plano, el bucle debería salir bastante rápido una vez que todos ffmpeglos procesos se hayan activado, pero luego tendrá 3000 trabajos ejecutándose...

En su lugar recomendaría usarÑUparalleldescargarnortearchivos a la vez.

parallel --dry-run --colsep ',' ffmpeg -nostdin -loglevel error -stats -i {1} -c copy {2}.mp3 :::: downloadmp3.txt

Esto lee el archivo de texto y procesa cada línea, dividiendo las columnas por ,. Luego puede utilizar los valores de la columna como {1}, {2}etc.

Ejecutaría los siguientes comandos en paralelo, con como máximonortetrabajos ejecutándose al mismo tiempo. Por defectonortees igual al número de núcleos de CPU:

ffmpeg -nostdin -loglevel error -stats -i url1 -c copy filename1.mp3
ffmpeg -nostdin -loglevel error -stats -i url2 -c copy filename2.mp3
ffmpeg -nostdin -loglevel error -stats -i url3000 -c copy filename3000.mp3

Elimine --dry-runcuando esto imprima lo que desea.

Puede agregar --joblog jobs.txtque cree un archivo de registro y también puede agregar --etao --progressimprimir algunas estimaciones sobre cuándo finalizarán los trabajos. El número de trabajos paralelos se puede configurar con -j.

Tenga en cuenta que lo agregué -c copyporque generalmente no desea volver a codificar la transmisión de audio si la URL ya apunta a un archivo MP3 existente. Si su entrada no es MP3, es posible que desee omitir el archivo -c copynuevamente. Y cambié quieta errorporque probablemente quieras que se muestren los errores.

información relacionada