Primeiramente, ffmpeg
é a ferramenta preferida para isso. É um uso intensivo da CPU porque é a natureza da codificação de vídeo ou áudio.
Você pode simplesmente extrair o fluxo (assumindo que o áudio mp3 original está no fluxo) da trilha e salvá-lo. Eu usei este bash
snippet antes para diretórios de *.flv
files:
#!/bin/bash
for i in *.flv;
do ffmpeg -i "$i" -acodec copy 'basename $i .flv'-'date +%H%M%S%N'.mp3;
done
Se o fluxo não estiver originalmente no formato mp3, você precisará recodificá-lo. Ou talvez você queira uma taxa de bits diferente, etc. Esta tarefa definitivamente consumirá mais CPU do que a anterior:
ffmpeg -i "$file" -f mp3 -vn -acodec libmp3lame -ab 192 'basename $file .flv'-'date +%H%M%S%N'.mp3;
edit: para limitar a um núcleo: taskset 1 ffmpeg <rest of args>
- taskset
é parte do pacote util-linux
em sistemas Debian. Você também pode querer renice
do processo, definindo seu valor de prioridade para algo no intervalo positivo (sons para trás, mas menor nice
value = mais tempo cpu). Como sempre, man taskset
, man renice
, man nice
.
Isto é como você faz o que você quer fazer com o ffmpeg a partir do shell - a implementação no PHP é deixada como um exercício para o leitor.