Você diz que deseja "extrair á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 em 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
Obviamente, você pode 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ê deseja é realmente extrair o áudio, você pode simplesmente "copiar" a faixa de áudio para um arquivo usando -acodec copy
. Obviamente, a principal diferença é que a transcodificação é lenta e exige muita CPU, enquanto a cópia é realmente rápida, pois 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 audiofile deve ser consistente com o que o contêiner possui (por exemplo, se o áudio for no formato AAC, é preciso dizer audiofile.aac
). Você pode usar o ffprobe
comando para ver qual codec você possui, 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 adequadamente 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 criado no output
início (se necessário). Para outros codecs que não o mp3 e o vorbis, ele converte o áudio em ogg. O Ubuntu 14.04 não possui ffmpeg nos 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.