avconv en múltiples hilos

9

¿Es posible ejecutar trabajos en múltiples procesadores o subprocesos para acelerar avconv?
¿Hay alguna característica en progreso? Si no, me pregunto por qué.

Shubham Chaudhary
fuente

Respuestas:

11

Está buscando la opción -threads de avconv. La configuración más segura sería:

 -threads auto

pero también puede establecer un número entero allí si desea experimentar un poco. Un FFmpeg moderno (ahora el estándar en Ubuntu) establece esto auto de manera predeterminada, como se ve en esta sección de las páginas del manual 'ffmpeg-all':

threads integer (decoding/encoding,video)

Set the number of threads to be used, in case the selected
codec implementation supports multi-threading.

  Possible values:

     auto, 0
     automatically select the number of threads to set

 Default value is auto.

Nota 2 puntos importantes:

  1. Esta configuración solo tendrá efecto si el códec elegido admite subprocesos múltiples
  2. Es posible establecer el recuento de subprocesos para secuencias individuales en lugar de simplemente intentar una configuración de subproceso global
andrew.46
fuente
1
Corrígeme si tienes una fuente de lo contrario, pero tengo la impresión de que Avconv y avplay todavía usan -threads auto por defecto si no se especifica lo contrario. El monitor del sistema parece respaldar esto.
Élder Geek
1
Creo que depende del códec utilizado para la transcodificación. Esto podría probarse formalmente, lo que sin duda sería una prueba interesante. La información que pude encontrar sobre el tema en línea no es particularmente útil. Otra cuestión sería la versión de FFmpeg que se utilizan, las opciones de los temas se ha utilizado de manera diferente en las versiones anteriores ...
andrew.46
1
Si. FFmpeg y avconv han ido en direcciones algo diferentes desde la bifurcación. La investigación adicional indica que -threads auto es el valor predeterminado en avconv si usa uno de los ajustes preestablecidos en la línea de comando.
Élder Geek
3

Si está haciendo una transcodificación de audio de muchos archivos, considere usar GNU Parallel. Tomará una lista de archivos como entrada y los procesará en paralelo según la cantidad de núcleos en su sistema. Por ejemplo, aquí hay un ejemplo bash que convertirá la música al formato opus audio en paralelo usando ffmpeg.

find ./* -depth -type f -name \*.ogg -o -name \*.flac -o -name \*.m4a -o -name \*.mp3 -o -name \*.ogg | parallel -j+0 --gnu nice -n 19 ffmpeg -i "{}" -acodec libopus "{.}.opus" -loglevel quiet
mmstick
fuente