Monday, April 29, 2024
 Popular · Latest · Hot · Upcoming
36
rated 0 times [  36] [ 0]  / answers: 1 / hits: 32722  / 2 Years ago, wed, may 11, 2022, 7:48:34

I have 228 mp4 files (2.6GB) and would like to extract audio from them (mp3 or ogg). I want to batch extract them - preferably with bash. I'm not sure if all files use the same audio codec as they were recorded in different years, ranging from 2006-2012.



I want to loop through all of them, pick the file name, detect audio codec and use ffmpeg to extract the audio.



Is it possible?


More From » bash

 Answers
7

You say you want to "extract audio from them (mp3 or ogg)". But what if the audio in the mp4 file is not one of those? you'd have to transcode anyway. So why not leave the audio format detection up to ffmpeg?



To convert one file:



ffmpeg -i videofile.mp4 -vn -acodec libvorbis audiofile.ogg


To convert many files:



for vid in *.mp4; do ffmpeg -i "$vid" -vn -acodec libvorbis "${vid%.mp4}.ogg"; done


You can of course select any ffmpeg parameters for audio encoding that you like, to set things like bitrate and so on.



Use -acodec libmp3lame and change the extension from .ogg to .mp3 for mp3 encoding.



If what you want is to really extract the audio, you can simply "copy" the audio track to a file using -acodec copy. Of course, the main difference is that transcoding is slow and cpu-intensive, while copying is really quick as you're just moving bytes from one file to another. Here's how to copy just the audio track (assuming it's in mp3 format):



ffmpeg -i videofile.mp4 -vn -acodec copy audiofile.mp3


Note that in this case, the audiofile format has to be consistent with what the container has (i.e. if the audio is AAC format, you have to say audiofile.aac). You can use the ffprobe command to see which codec you have, this may provide some information:



ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -print_format csv=p=0 "videofile.mp4"


A possible way to automatically parse the audio codec and name the audio file accordingly would be:



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


Notes: the output files are created in sub-directory output it creates in the beginning (if necessary). For other codecs than mp3 and vorbis it converts audio to ogg. Ubuntu 14.04 does not have ffmpeg in standard repositories, but you could add ppa:mc3man/trusty-media repository and install ffmpeg package to get the needed software. See here for details.


[#34086] Wednesday, May 11, 2022, 2 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
listeerrated

Total Points: 354
Total Questions: 112
Total Answers: 100

Location: Guam
Member since Fri, Jun 18, 2021
3 Years ago
;