How to extract music from a music video. Hoe krijg je alleen de muziek (.mp3) van een muziekvideo van YouTube (.flv)

Gebruik avconv (command line, meerdere bestanden tegelijk kan makkelijk)

 * Welke streams (video, audio) zitten er in het bestand? En welk formaat zijn die? (.mp3, .ogg vorbis, etc.)
 * Info tonen over alles, van één track:
 * avconv -i Lime\ Angel\ Eyes\ HD.flv
 * Info tonen over alleen de muziek, van één track:
 * avconv -i Lime\ Angel\ Eyes\ HD.flv 2>&1 | grep -e'Stream #0\.1'
 * "Stuur stderroroutput 2 naar stdoutput 1" is nodig omdat grep stdoutput pakt en stderroroutput met rust laat.


 * Audio stream extraheren (eruit halen) en de video stream weggooien, van één track:
 * avconv -i Lime\ Angel\ Eyes\ HD.flv -acodec copy -o Lime\ Angel\ Eyes\ HD.mp3
 * uiteraard moet dat .mp3 wat anders zijn als je er bij de vorige stap achter was gekomen dat dat wat anders moest zijn.


 * Nu alles nog een keer maar voor meerdere tracks:
 * Info tonen over alleen de muziek, van alle tracks:
 *  for TrackNaam in ./*; do printf "$TrackNaam\n"; avconv -i "$TrackNaam" 2>&1| grep -e"Stream #0\.1"; done 
 * Ik zie bestanden tot en met 139 kb/s en zelfs 146 kb/s. Dus 192 kb/s is in ieder geval zeker altijd veilig. Met 128 kb/s zou je wel een aanzienlijke hoeveelheid informatie weg kunnen gooien.
 * Bij lame kun je bij MPEG-1 (sampling frequency o.a. 44.1 kHz) kiezen tussen 128, 160, 192 kb/s.
 * Bij lame kun je bij MPEG-2 (sampling frequency o.a. 22.05 kHz) kiezen tussen 128, 160 kb/s.


 * Toont alleen de bestanden met een aac-audio-stream:
 * Shows only files with an aac audio stream:
 * for naam in ./*; do true; avconv -i "$naam" 2>&1| grep -e"Input #0.*from" -e"Stream #0\.1:"|grep -C1 -e"Stream #0.1: Audio: aac" ; done
 * lukt niet
 * for naam in ./*; do printf ''; avconv -i "$naam" 2>&1| grep -e"Input #0.*from" -e"Stream #0\.1:"|grep -C1 -e"Stream #0.1: Audio: aac"> /dev/null;                                                                                                                              avconv -i "$naam" 2>&1| grep -e"Input #0.*from" -e"Stream #0\.1:"|grep -C1 -e"Stream #0.1: Audio: aac" | sed -e "s_.*Input.*_hoi_"                     ; done
 * Ik weet al wat misging! Nooit --quiet bij een s-sed-commando! Dan laat hij niet zien wat er uit dat s-commando komt!
 * Het p-commando moet je lezen als: "print regel nog een keertje extra".

# Conversie van alle .flv-bestanden waar AAC in zit

 * Zo moet de conversie wel (alle .flv-bestanden waar AAC in zit):
 * for naam in ./*
 * do
 * NaamAACBestand=$( avconv -i "$naam" 2>&1| grep -e"Input #0.*from" -e"Stream #0\.1:"|grep -C1 -e"Stream #0.1: Audio: aac" | sed -e"s_.*\(\.\/.*.flv\)':_\1_" -e"/Stream.*aac/d" );
 * avconv -i "$NaamAACBestand" -acodec copy "$NaamAACBestand.aac";
 * done

# Conversie van alle .flv-bestanden waar .mp3 in zit

 * Zo moet de conversie wel (alle .flv-bestanden waar MP3 in zit):
 * for naam in ./*
 * do
 * nbsp;NaamMP3Bestand=$( avconv -i "$naam" 2>&1| grep -e"Input #0.*from" -e"Stream #0\.1:"|grep -C1 -e"Stream #0.1: Audio: mp3" | sed -e"s_.*\(\.\/.*.flv\)':_\1_" -e"/Stream.*mp3/d" );
 * nbsp;avconv -i "$NaamMP3Bestand" -acodec copy "$NaamMP3Bestand.mp3";
 * done

# Conversie van alle .flv-bestanden, wat er ook in zit

 * Zo moet de conversie wel (alle .flv-bestanden of er nou aac of mp3 in zit):
 *  for NaamTrack in ./* 
 *  do 
 *     avconv -i "{$NaamTrack}" -acodec copy "${NaamTrack}.aacOFmp3"; 
 *  done 
 * Werkt niet!

# Conversie van alle .flv-bestanden, wat er ook in zit, alles naar 128kbps, codec mp3

 * Zo moet de conversie wel (alle .flv-bestanden waar MP3 in zit):
 * Stap 1
 * Eerst alles naar een hoge bitrate (kan variabel of constant zijn).
 * for NaamTrack in ./*
 * do
 * avconv -i "${NaamTrack}" -b 192k -acodec libmp3lame "${NaamTrack}.mp3";
 * done
 * Niet -acodec libmp3lame -b $((192*1024)) of zo maar -b 192k -acodec libmp3lame. avconv weet zelf hoe hij die constant bitrate van 192 moet doorgeven aan libmp3lame.
 * Als de track een variabele bitrate had, dan zal dit avconv commando daar niks aan veranderen. Het wordt geen constante bitrate.


 * Stap 2
 * Nu alles naar een lagere constante bitrate. Het lame commando vat -b 128 op als ``128 kbps Constant Bitrate (CBR)´´. De zinnige keuzes voor CBR zijn: -b 128 -b 160 en -b 192
 * Conversie naar CBR is nodig omdat VLC anders niet weet hoe lang het liedje is.
 * for NaamTrack in ./*.mp3
 * do
 * lame -b 128 "${NaamTrack}" "${NaamTrack}.MP3";
 * done

# Conversie van alle .flv-bestanden, wat er ook in zit, alles naar 128kbps, codec mp3 (Stap 1 & 2 samengevoegd)

 * Stap 0
 * Zijn er dingen waarvan je de video's wil houden? Bijvoorbeeld van de KLF of David Bowie? Vaak staat er dan [720p] in de naam of zoiets.
 * Stap 1 & 2
 * for NaamTrack in ./*
 * do
 * avconv -i "${NaamTrack}" -b 192k -acodec libmp3lame "${NaamTrack}.mp3";
 * lame -b 128 "${NaamTrack}.mp3" "${NaamTrack}.mp3.MP3";
 * done

Is alles goed gegaan?

 * Hier komt erg veel informatie uit maar je kan meteen zien of de goede bestanden de .aac extensie hebben gekregen:
 * for naam in ./*; do printf '%s\n' "$naam"; avconv -i "$naam" 2>&1| grep -e"Stream #"; done
 * Makkelijker:
 * file *
 * file *.aac
 * file *.mp3