FFMPEG: conversão de m4a para mp3 usando múltiplos núcleos

1

Eu uso o seguinte comando para converter o formato m4a para mp3

ffmpeg -i audio.m4a -acodec libmp3lame audio.mp3

Tenho 32 núcleos x86, mas o libmp3lame processa em um único segmento. Eu sei que libmp3lame não suporta multithreading, assim eu estou aberto a outras alternativas que podem ser executadas no CLI do ubuntu.

Se o audio.m4a é um vídeo de 2 horas de duração, isso geralmente leva > 3 minutos e a velocidade parece ser de 45x a 50x.

Meu principal objetivo é converter vários vídeos do youtube em formato mp3 em segundos.

Atualização 1:

Como estou usando 32 núcleos de CPU, quando há apenas uma conversão de vídeo, ela utiliza apenas um núcleo. Então, nesse caso, como usar vários núcleos, para obter resultados mais rápidos. Eu quero alcançar o máximo da CPU. Além disso, se o FFmpeg não for a resposta, existe alguma outra maneira.

    
por Johny Pie 08.05.2017 / 13:34

2 respostas

2

Como o encoder é somente de encadeamento único, para tornar a codificação mais eficiente em um sistema com vários núcleos, tudo o que você pode fazer é iniciar vários processos em paralelo.

Por exemplo, se você estiver em um shell:

ffmpeg -i input1.mp4 -c:a libmp3lame output1.mp3 &
ffmpeg -i input2.mp4 -c:a libmp3lame output2.mp3 &
…

O & coloca o comando em segundo plano . Os comandos serão executados em paralelo e a carga deverá ser distribuída entre os núcleos da sua CPU.

    
por 09.05.2017 / 06:22
1

Existem implementações multi-thread do codificador lame mp3 na internet. Eu poderia rastrear um aqui

https://github.com/dheller1/lame_pthreads

Se você tiver um grande espaço de armazenamento, você pode usar o ffmpeg para converter todos os arquivos m4a em arquivos wav e depois apontar lame_pthreads para essa pasta.

    
por 10.10.2017 / 10:46