Dici che vuoi "estrarre l'audio da loro (mp3 o ogg)". Ma cosa succede se l'audio nel file mp4 non è uno di quelli? dovresti transcodificare comunque. Quindi perché non lasciare il rilevamento del formato audio fino a ffmpeg?
Per convertire un file:
ffmpeg -i videofile.mp4 -vn -acodec libvorbis audiofile.ogg
Per convertire molti file:
for vid in *.mp4; do ffmpeg -i "$vid" -vn -acodec libvorbis "${vid%.mp4}.ogg"; done
Puoi ovviamente selezionare qualsiasi parametro ffmpeg per la codifica audio che ti piace, per impostare cose come bitrate e così via.
Utilizzare -acodec libmp3lame
e modificare l'estensione da .ogg
a .mp3
per la codifica mp3.
Se quello che vuoi è davvero estrarre l'audio, puoi semplicemente "copiare" la traccia audio in un file usando -acodec copy
. Ovviamente, la differenza principale è che la transcodifica è lenta e ad alta intensità di CPU, mentre la copia è molto rapida in quanto si stanno spostando byte da un file all'altro. Ecco come copiare solo la traccia audio (supponendo che sia in formato mp3):
ffmpeg -i videofile.mp4 -vn -acodec copy audiofile.mp3
Si noti che in questo caso, il formato dell'audiofilo deve essere coerente con ciò che il contenitore ha (cioè se l'audio è in formato AAC, bisogna dire audiofile.aac
). Puoi usare il ffprobe
comando per vedere quale codec hai, questo potrebbe fornire alcune informazioni:
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "videofile.mp4"
Un modo possibile per analizzare automaticamente il codec audio e nominare il file audio di conseguenza sarebbe:
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
Note: i file di output vengono creati nella sottodirectory output
che crea all'inizio (se necessario). Per altri codec oltre a mp3 e vorbis converte l'audio in ogg. Ubuntu 14.04 non ha ffmpeg nei repository standard, ma è possibile aggiungere ppa: repository mc3man / trusty-media e installare il pacchetto ffmpeg per ottenere il software necessario. Vedi qui per i dettagli.