Você diz que deseja "extrair o áudio deles (mp3 ou ogg)". Mas e se o áudio no arquivo mp4 não for um desses? você teria que transcodificar de qualquer maneira. Então, por que não deixar a detecção do formato de áudio no ffmpeg?
Para converter um arquivo:
ffmpeg -i videofile.mp4 -vn -acodec libvorbis audiofile.ogg
Para converter muitos arquivos:
for vid in *.mp4; do ffmpeg -i "$vid" -vn -acodec libvorbis "${vid%.mp4}.ogg"; done
Você pode, é claro, selecionar qualquer parâmetro ffmpeg para a codificação de áudio que desejar, para definir coisas como taxa de bits e assim por diante.
Use -acodec libmp3lame
e altere a extensão de .ogg
para .mp3
para codificação mp3.
Se o que você quer é realmente extrair o áudio, você pode simplesmente "copiar" a trilha de áudio para um arquivo usando -acodec copy
. É claro que a principal diferença é que a transcodificação é lenta e exige muita CPU, enquanto a cópia é realmente rápida, já que você está apenas movendo bytes de um arquivo para outro. Veja como copiar apenas a faixa de áudio (supondo que esteja no formato mp3):
ffmpeg -i videofile.mp4 -vn -acodec copy audiofile.mp3
Observe que, nesse caso, o formato do arquivo de áudio tem para ser consistente com o conteúdo do contêiner (ou seja, se o áudio for formato AAC, você deverá informar audiofile.aac
). Você pode usar o comando ffprobe
para ver qual codec você tem, isso pode fornecer algumas informações:
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "videofile.mp4"
Uma maneira possível de analisar automaticamente o codec de áudio e nomear o arquivo de áudio de acordo seria:
mkdir -p output
# current directory has to contain at least one .mp4 file
for vid in *.mp4; do
codec="$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "$vid")"
case "$codec" in
mp3 ) filetype=mp3 ;;
vorbis ) filetype=ogg ;;
* ) filetype= ;;
esac
if [ "$filetype" ]; then
ffmpeg -i "$vid" -vn -acodec copy output/"${vid%.*}"."$filetype"
else
ffmpeg -i "$vid" -vn -acodec libvorbis output/"${vid%.*}".ogg
done
Notas: os arquivos de saída são criados no subdiretório output
criado no início (se necessário). Para outros codecs que mp3 e vorbis ele converte áudio para ogg. O Ubuntu 14.04 não possui ffmpeg em repositórios padrão, mas você pode adicionar o repositório ppa: mc3man / trusty-media e instalar o pacote ffmpeg para obter o software necessário. Veja aqui para detalhes.