Bash script to convert all *flac to *.mp3 with FFmpeg? The Next CEO of Stack OverflowWhy *not* parse `ls` (and what do to instead)?Why is using a shell loop to process text considered bad practice?bash - reading user variable into bash script grepHow can I filter out current directory ('.') in bash?How can I convert all the html files I get into text files after a wget command?Optimize find -exec with multiple conditions : specific files in a dir and specific subdirectories in this dirgnu parallel with ffmpeg does not process first fileBash script to convert all files of a given type from Unix to Dos FormatShell script to convert PDF to images and save in sub-folderPassing paths and filenames to a program from bash scriptMoving files into folders using bash scriptffmpeg: filenames with spaces from bash script

What steps are necessary to read a Modern SSD in Medieval Europe?

What CSS properties can the br tag have?

Is it convenient to ask the journal's editor for two additional days to complete a review?

Is fine stranded wire ok for main supply line?

What difference does it make using sed with/without whitespaces?

Spaces in which all closed sets are regular closed

Scary film where a woman has vaginal teeth

Graph of the history of databases

Is it correct to say moon starry nights?

Why is the US ranked as #45 in Press Freedom ratings, despite its extremely permissive free speech laws?

Does higher Oxidation/ reduction potential translate to higher energy storage in battery?

Is there a difference between "Fahrstuhl" and "Aufzug"?

What day is it again?

free fall ellipse or parabola?

Yu-Gi-Oh cards in Python 3

Why is information "lost" when it got into a black hole?

TikZ: How to fill area with a special pattern?

Defamation due to breach of confidentiality

Help understanding this unsettling image of Titan, Epimetheus, and Saturn's rings?

What would be the main consequences for a country leaving the WTO?

How to Implement Deterministic Encryption Safely in .NET

Players Circumventing the limitations of Wish

(How) Could a medieval fantasy world survive a magic-induced "nuclear winter"?

How did Beeri the Hittite come up with naming his daughter Yehudit?



Bash script to convert all *flac to *.mp3 with FFmpeg?



The Next CEO of Stack OverflowWhy *not* parse `ls` (and what do to instead)?Why is using a shell loop to process text considered bad practice?bash - reading user variable into bash script grepHow can I filter out current directory ('.') in bash?How can I convert all the html files I get into text files after a wget command?Optimize find -exec with multiple conditions : specific files in a dir and specific subdirectories in this dirgnu parallel with ffmpeg does not process first fileBash script to convert all files of a given type from Unix to Dos FormatShell script to convert PDF to images and save in sub-folderPassing paths and filenames to a program from bash scriptMoving files into folders using bash scriptffmpeg: filenames with spaces from bash script










25















I want to convert all *.flac to *.mp3 in the specific folder.



This is what I've tried, but not works:



# change to the home directory
cd ~/music
# convert all *.flac files
ffmpeg -i *.flac -acodec libmp3lame *.mp3
# (optional: check whether there are any errors printed on the terminal)
sleep 60


How to get my goal?










share|improve this question



















  • 2





    did you try "FOR LOOP"?

    – Danila Ladner
    Feb 12 '14 at 15:57











  • @DanilaLadner Not yet. Thanks for the clue.

    – Kevin Dong
    Feb 12 '14 at 15:58












  • I wrote a script that does this, in parallel, and copies the tags over: http://tuxhelp.org/#flac-distiller

    – user136310
    Sep 29 '15 at 19:38











  • Sorry I forget it. After convert file name become file.avi.mp3 you can use : rename "s/.avi//g" *.avi.mp3 for remove .avi.

    – user149335
    Dec 29 '15 at 19:47







  • 1





    Give computer break after hard work.

    – MeowMeow
    Jul 13 '18 at 14:21















25















I want to convert all *.flac to *.mp3 in the specific folder.



This is what I've tried, but not works:



# change to the home directory
cd ~/music
# convert all *.flac files
ffmpeg -i *.flac -acodec libmp3lame *.mp3
# (optional: check whether there are any errors printed on the terminal)
sleep 60


How to get my goal?










share|improve this question



















  • 2





    did you try "FOR LOOP"?

    – Danila Ladner
    Feb 12 '14 at 15:57











  • @DanilaLadner Not yet. Thanks for the clue.

    – Kevin Dong
    Feb 12 '14 at 15:58












  • I wrote a script that does this, in parallel, and copies the tags over: http://tuxhelp.org/#flac-distiller

    – user136310
    Sep 29 '15 at 19:38











  • Sorry I forget it. After convert file name become file.avi.mp3 you can use : rename "s/.avi//g" *.avi.mp3 for remove .avi.

    – user149335
    Dec 29 '15 at 19:47







  • 1





    Give computer break after hard work.

    – MeowMeow
    Jul 13 '18 at 14:21













25












25








25


12






I want to convert all *.flac to *.mp3 in the specific folder.



This is what I've tried, but not works:



# change to the home directory
cd ~/music
# convert all *.flac files
ffmpeg -i *.flac -acodec libmp3lame *.mp3
# (optional: check whether there are any errors printed on the terminal)
sleep 60


How to get my goal?










share|improve this question
















I want to convert all *.flac to *.mp3 in the specific folder.



This is what I've tried, but not works:



# change to the home directory
cd ~/music
# convert all *.flac files
ffmpeg -i *.flac -acodec libmp3lame *.mp3
# (optional: check whether there are any errors printed on the terminal)
sleep 60


How to get my goal?







bash shell-script ffmpeg






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Feb 12 '14 at 23:08









Gilles

545k12911071622




545k12911071622










asked Feb 12 '14 at 15:55









Kevin DongKevin Dong

4561613




4561613







  • 2





    did you try "FOR LOOP"?

    – Danila Ladner
    Feb 12 '14 at 15:57











  • @DanilaLadner Not yet. Thanks for the clue.

    – Kevin Dong
    Feb 12 '14 at 15:58












  • I wrote a script that does this, in parallel, and copies the tags over: http://tuxhelp.org/#flac-distiller

    – user136310
    Sep 29 '15 at 19:38











  • Sorry I forget it. After convert file name become file.avi.mp3 you can use : rename "s/.avi//g" *.avi.mp3 for remove .avi.

    – user149335
    Dec 29 '15 at 19:47







  • 1





    Give computer break after hard work.

    – MeowMeow
    Jul 13 '18 at 14:21












  • 2





    did you try "FOR LOOP"?

    – Danila Ladner
    Feb 12 '14 at 15:57











  • @DanilaLadner Not yet. Thanks for the clue.

    – Kevin Dong
    Feb 12 '14 at 15:58












  • I wrote a script that does this, in parallel, and copies the tags over: http://tuxhelp.org/#flac-distiller

    – user136310
    Sep 29 '15 at 19:38











  • Sorry I forget it. After convert file name become file.avi.mp3 you can use : rename "s/.avi//g" *.avi.mp3 for remove .avi.

    – user149335
    Dec 29 '15 at 19:47







  • 1





    Give computer break after hard work.

    – MeowMeow
    Jul 13 '18 at 14:21







2




2





did you try "FOR LOOP"?

– Danila Ladner
Feb 12 '14 at 15:57





did you try "FOR LOOP"?

– Danila Ladner
Feb 12 '14 at 15:57













@DanilaLadner Not yet. Thanks for the clue.

– Kevin Dong
Feb 12 '14 at 15:58






@DanilaLadner Not yet. Thanks for the clue.

– Kevin Dong
Feb 12 '14 at 15:58














I wrote a script that does this, in parallel, and copies the tags over: http://tuxhelp.org/#flac-distiller

– user136310
Sep 29 '15 at 19:38





I wrote a script that does this, in parallel, and copies the tags over: http://tuxhelp.org/#flac-distiller

– user136310
Sep 29 '15 at 19:38













Sorry I forget it. After convert file name become file.avi.mp3 you can use : rename "s/.avi//g" *.avi.mp3 for remove .avi.

– user149335
Dec 29 '15 at 19:47






Sorry I forget it. After convert file name become file.avi.mp3 you can use : rename "s/.avi//g" *.avi.mp3 for remove .avi.

– user149335
Dec 29 '15 at 19:47





1




1





Give computer break after hard work.

– MeowMeow
Jul 13 '18 at 14:21





Give computer break after hard work.

– MeowMeow
Jul 13 '18 at 14:21










14 Answers
14






active

oldest

votes


















36














Try this:



for i in *.flac ; do 
ffmpeg -i "$i" -acodec libmp3lame $(basename "$i/.flac").mp3
sleep 60
done





share|improve this answer




















  • 1





    It isn't working with files containing space. How can I modify $(basename "$i/.flac") to handle spaces?

    – ppr
    Jan 3 '16 at 15:39







  • 1





    @ppr Try putting this line just before the for loop: IFS=$'n'

    – mkc
    Jan 3 '16 at 19:14






  • 5





    I solved the space issue by changing $(basename "$i/.flac").mp3 to "$(basename "$i/.flac").mp3" (putting quotes around it)

    – MalcolmOcean
    Sep 17 '16 at 20:02


















41














A simple 1 liner solution:
find -name "*.flac" -exec ffmpeg -i -acodec libmp3lame -ab 128k .mp3 ;



http://lewisdiamond.blogspot.ca/2012/01/converting-flac-to-mp3.html



Note that this will be applied recursively in the given directory. I.e. if you run this from your Music folder, it will convert all flacs from subfolders and produce a .mp3 next to it. You may also do it without ffmpeg by directly using flac and lame (i.e. read w/ flac, pipe to lame, output to a file .mp3), as shown in the link.






share|improve this answer

























  • You can use -maxdepth 1 I think like in X Tian's answer to limit the recursiveness.

    – user44370
    Oct 24 '14 at 20:00






  • 2





    Yes you can. You could also use ls piped to xargs or a for loop. I'm just making the (possibly wrong) assumption that a recursive search is more along what the OP needed (i.e. change all the .flac from my music library).

    – Lewis Diamond
    Oct 24 '14 at 20:48






  • 10





    This command is great - however; You end up with files named *.flac.mp3. Using your command, I came up with this... find -name "*.flac" -exec bash -c 'ffmpeg -i "" -y -acodec libmp3lame -ab 128k "$0/.flac.mp3"' ;

    – Shane
    Oct 27 '15 at 2:54







  • 1





    Yes, as I explained in the blog, I like this aspect of adding the .mp3 because it tells me this files comes from a lossless source, which should be found somewhere on my hard drive.

    – Lewis Diamond
    Oct 28 '15 at 16:23











  • @Shane comment worked for me.

    – Chaudhry Waqas
    Feb 19 at 9:11


















8














If you have some white spaces in the file names:



for a in *.flac; do
f="$a[@]/%flac/mp3"
ffmpeg -i "$a" -qscale:a 0 "$f"
done





share|improve this answer

























  • I have a folder with a mixture of mp4 and wav files. How do I convert all of them into mp3? Thank you.

    – kRazzy R
    Jun 11 '18 at 14:55


















1














I worked on @Ketan's answer using avconv, since ffmpeg doesn't work well over here.



for i in *.flac ; do 
avconv -i "$i" "./mp3/$i".mp3
done


This converts flac files in a folder into mp3 files and moves then to an existing "mp3" folder. Files will be named in the model "original_name.flac.mp3"






share|improve this answer






























    1














    find . -maxdepth 1 -type f -name '*.flac' | while IFS= read -r f; do
    ffmpeg -i "$f" -acodec libmp3lame "$( sed -e's/.flac/.mp3/g' <<< $f )"
    done





    share|improve this answer




















    • 1





      sed expression needs an ending '

      – Jaime M.
      Aug 14 '15 at 16:15


















    1














    I took everything I found here (and maybe on some other sites) and created a small tool to not only create mp3s of flacs recursively, but also preserve relative paths to create them elsewhere with multithread support.



    oh, and yes, I see, I didn't use ffmpeg in that case, because my OSMC didn't provide packages for ffmpeg, only avconv, but since you're already here, I guess you know, it's "basically" the same - at least for the most important part. Just replace the command "avconv" with "ffmpeg". My first runs were with the ffmpeg bin and the exact same options.



    I am by no means a bash hacker, but I managed it, as my first bashscript with the given demands, and maybe someone will benefit.
    I am open for any suggestions from your side, but so far it works for me.



    my script to spin up the 4 instances, one for each core, is like this:



    #!/bin/bash
    # this should be quite self-explanatory
    for i in 1..4
    do
    echo "started instance no: $i"
    /home/osmc/transform.sh . &
    # sleeping time can be shorter, this is just so, that
    # not all 4 processes will want to start with the same
    # file, during runtime collisions should not become an issue
    sleep 5
    done
    echo "all instances started"


    And the worker script like this:



    #!/bin/bash
    # take care of spaces
    IFS=$'n'
    # my music folders, remote is the source, local the target dir
    remote=/mnt/music/FLAC
    local=/mnt/1tb/mp3
    # for all flac files start loop
    for i in $(find $remote -type f -iname '*.flac' );
    do
    ## SET VARIABLES for PATHS and FILENAMES
    ## this might be able to be super short with sed and complex one-liner,
    ## but I s*ck at regex
    fullfile=$i
    # strip extension
    filename="$i##*/"
    # add new extension
    filename="$filename%.*.mp3"
    # get full dirname from inputfile
    fulldir=$(dirname "$i")
    # strip leading dirs from full input dir
    # count the dirs, add two, then you're good.
    reldir="$(echo $fulldir | cut -d'/' -f5-)"
    # some subdirs in my collection even have a flac subdir, you might
    # ignore this, it strips only if it exists
    reldir=$reldir//flac
    # combine target dir and relative dir
    outdir="$local/$reldir"
    # generate the full output filename for conversion
    outfile="$outdir/$filename"
    # create whole target directory - yes, I need it only once, but hey,
    # it works, didn't want to start a if not exist statement... should I?
    mkdir -p "$outdir"
    # run conversion - finally... you may want or need to replace
    # "avconv" with "ffmpeg"
    avconv -n -nostats -loglevel info -i "$fullfile" -codec:a libmp3lame -qscale:a 0 "$outfile"
    done


    which can be found at
    https://github.com/erdnuesse/flac-to-mp3



    Regards,
    Kay






    share|improve this answer

























    • welcome aboard, good effort. +1

      – Alex Stragies
      Jan 12 '18 at 18:00


















    0














    Parallel FTW (no doubt you have more than one core - why not use them?):



    ls *flac | while read f; do ffmpeg -i "$f" -acodec libmp3lame $f.mp3 & done





    share|improve this answer


















    • 4





      see why not parse ls and Why is using a shell loop to process text considered bad practice?

      – Evgeny Vereshchagin
      Jul 27 '15 at 21:24


















    0














    For example, if you have multiple avi files:



    ls *.avi | xargs -I ffmpeg -i .mp3





    share|improve this answer
































      0














      If it can help ....
      I've written a small bash script to do this ....
      You need to have ffmpeg / flac installed.



      How it works:



      It takes 2 arguments :



      1. The folder of your music library (flac/ogg/mp3 ...)

      2. The destination folder (you need to create it before).

      It produce :



      • An exact copy from the source folder into the destination folder, with:

        • the non flac files copied into.

        • the flac files transformed to mp3 ( VBR high quality)


      • A run.sh file with the commands to convert the flac files (this script is executed automatically).


      #!/bin/bash

      FLAC_PATH=$1
      CONV_PATH=$2

      DEBUG=0;

      function usage
      echo "";
      echo " This script convert all flac files from a folder to mp3 files to a second folder";
      echo "";
      echo " Usage :";
      echo " ./conv.sh Source Folder Destination Folder";
      echo " note : booth folder must exist before starting this script";
      echo " files other than flac are copied to the destination folder";
      echo "";


      if [ ! -d "$2" ]; then
      echo "";
      echo " ERROR : [$2] is not a directory.";
      usage
      exit 1
      fi;

      if [ ! -d "$2" ]; then
      echo "";
      echo " ERROR : [$2] is not a directory.";
      usage
      exit 1
      fi;

      COMMANDS="run.sh"
      echo "" > run.sh
      echo " convert from $FLAC_PATH to $CONV_PATH ";

      find "$FLAC_PATH" -type f |while read myFile; do
      SRC_DIR=$myFile%/*
      SRC_FILE=$myFile##*/
      DST_DIR=$CONV_PATH/$SRC_DIR
      mkdir -p "$DST_DIR"
      # TEST if the file is a flac ....
      metaflac --show-md5sum "$myFile" 2>/dev/null 1>/dev/null
      if [ $? -eq 0 ]; then
      echo -n " *** $myFile [FLAC !] : "
      DST_FILE=$myFile%.*
      OUT_PATH="$DST_DIR/$( echo $SRC_FILE | sed -e 's/.flac$/.mp3/')"

      if [ $DEBUG == 1 ]; then
      echo " SRC = $myFile";
      echo " OUT = $OUT_PATH"
      fi;

      if [ -f "$OUT_PATH" ]; then
      echo " exist, do nothing !";
      else
      echo " add to compress list !";
      echo "ffmpeg -y -i "$myFile" -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 "$OUT_PATH" " >> $COMMANDS
      fi;

      else
      echo -n " *** $SRC_FILE [NOT FLAC] : "
      if [ -f "$CONV_PATH/$myFile" ]; then
      echo " exist, do nothing !"
      else
      echo " copy."
      cp "$myFile" "$CONV_PATH/$myFile"
      fi
      fi

      done;

      echo " And now, CONVERT THE FLAC's!!! "
      sh run.sh






      share|improve this answer






























        0














        To recursively convert in mp3 all the flac or wav files in nested folders, I used this command:



        find '~/Music/' -iname '*.flac' , -iname '*.wav' -exec bash -c 'D=$(dirname ""); B=$(basename ""); mkdir "$D/mp3/"; ffmpeg -i "" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame "$D/mp3/$B%.*.mp3"' ;


        It will create a folder named "mp3" inside the one with flac or wav files and, inside the mp3 folder, it will save relative mp3 files with a bitrate of 320kbps, without keeping the old file extension in the name.






        share|improve this answer
































          0














          GNU Parallel is make for these kind of tasks:



          # change to the home directory
          cd ~/music
          # convert all *.flac files
          parallel ffmpeg -i -acodec libmp3lame ..mp3 ::: *.flac
          # (optional: check whether there are any errors printed on the terminal)
          sleep 60


          It will run the jobs in parallel (one job per cpu core) and make sure the output on the terminal is not mixed together.






          share|improve this answer






























            0














            The file name is "wav2mp3"



            #!/bin/sh
            # put the script to /usr/local/sbin
            EXT_IN=$1
            QUALITY=$2

            if [ "$EXT_IN" = "" -o "$QUALITY" = "" ]; then
            printf "Usage: wav2mp3 <in_file_ext> <quality> ne.g. wav2mp3 wav 2n"
            exit 1
            fi

            #String delimeter
            SAVEIFS=$IFS
            IFS='
            '
            # List of the files in directory lower than current to array
            FILES_LIST=`find . -type f -name "*.$EXT_IN"`
            for FILE in $FILES_LIST; do
            echo $FILE
            PREFIX=`echo $FILE | awk -F . 'OFS="." $NF="" 1' | sed 's/.$//'`
            echo $PREFIX
            ffmpeg -i $FILE -codec:a libmp3lame -qscale:a $QUALITY $PREFIX.mp3
            done





            share|improve this answer








            New contributor




            DenisVS is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.




















            • Consider using shellcheck.net. It has quite a few suggestions regarding your script.

              – llogan
              2 days ago


















            -1














            for a in *.flac



            do
            OUTF=echo "$a" | sed s/.flac$/.mp3/g



            ffmpeg -i "$a" -acodec libmp3lame "$OUTF"



            done






            share|improve this answer


















            • 1





              welcome to U&L, your answer hardly add anything to @Ketan accepted answer four years ago.

              – Archemar
              Dec 29 '17 at 8:45


















            -2














            I realize this comes quite late, but for memory, see my script "batchaudiocvt" on sourceforge. It is a (quite large) shell script designed for efficient mass conversion of audio files, between many formats. In particular, it makes its best to convert the usual tags.






            share|improve this answer























            • This question is about how to handle the loop in the shell. The user already knows the command they want to use to do the conversion.

              – G-Man
              Oct 31 '18 at 23:51











            • Welcome to Stack Exchange.  Are you Eric Dujardin?  If so, it would be good to use the contact form and select ‘‘I need to merge user profiles’’ to have your accounts merged.

              – Scott
              Nov 1 '18 at 2:19











            • Sorry, I was just trying to help with the stated goal of converting the files. Anyway the provided script may be worth a read.

              – Eric Dujardin
              Nov 1 '18 at 8:18











            Your Answer








            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "106"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f114908%2fbash-script-to-convert-all-flac-to-mp3-with-ffmpeg%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            14 Answers
            14






            active

            oldest

            votes








            14 Answers
            14






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            36














            Try this:



            for i in *.flac ; do 
            ffmpeg -i "$i" -acodec libmp3lame $(basename "$i/.flac").mp3
            sleep 60
            done





            share|improve this answer




















            • 1





              It isn't working with files containing space. How can I modify $(basename "$i/.flac") to handle spaces?

              – ppr
              Jan 3 '16 at 15:39







            • 1





              @ppr Try putting this line just before the for loop: IFS=$'n'

              – mkc
              Jan 3 '16 at 19:14






            • 5





              I solved the space issue by changing $(basename "$i/.flac").mp3 to "$(basename "$i/.flac").mp3" (putting quotes around it)

              – MalcolmOcean
              Sep 17 '16 at 20:02















            36














            Try this:



            for i in *.flac ; do 
            ffmpeg -i "$i" -acodec libmp3lame $(basename "$i/.flac").mp3
            sleep 60
            done





            share|improve this answer




















            • 1





              It isn't working with files containing space. How can I modify $(basename "$i/.flac") to handle spaces?

              – ppr
              Jan 3 '16 at 15:39







            • 1





              @ppr Try putting this line just before the for loop: IFS=$'n'

              – mkc
              Jan 3 '16 at 19:14






            • 5





              I solved the space issue by changing $(basename "$i/.flac").mp3 to "$(basename "$i/.flac").mp3" (putting quotes around it)

              – MalcolmOcean
              Sep 17 '16 at 20:02













            36












            36








            36







            Try this:



            for i in *.flac ; do 
            ffmpeg -i "$i" -acodec libmp3lame $(basename "$i/.flac").mp3
            sleep 60
            done





            share|improve this answer















            Try this:



            for i in *.flac ; do 
            ffmpeg -i "$i" -acodec libmp3lame $(basename "$i/.flac").mp3
            sleep 60
            done






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Aug 23 '15 at 11:54









            chaos

            36k977120




            36k977120










            answered Feb 12 '14 at 16:27









            mkcmkc

            5,96842944




            5,96842944







            • 1





              It isn't working with files containing space. How can I modify $(basename "$i/.flac") to handle spaces?

              – ppr
              Jan 3 '16 at 15:39







            • 1





              @ppr Try putting this line just before the for loop: IFS=$'n'

              – mkc
              Jan 3 '16 at 19:14






            • 5





              I solved the space issue by changing $(basename "$i/.flac").mp3 to "$(basename "$i/.flac").mp3" (putting quotes around it)

              – MalcolmOcean
              Sep 17 '16 at 20:02












            • 1





              It isn't working with files containing space. How can I modify $(basename "$i/.flac") to handle spaces?

              – ppr
              Jan 3 '16 at 15:39







            • 1





              @ppr Try putting this line just before the for loop: IFS=$'n'

              – mkc
              Jan 3 '16 at 19:14






            • 5





              I solved the space issue by changing $(basename "$i/.flac").mp3 to "$(basename "$i/.flac").mp3" (putting quotes around it)

              – MalcolmOcean
              Sep 17 '16 at 20:02







            1




            1





            It isn't working with files containing space. How can I modify $(basename "$i/.flac") to handle spaces?

            – ppr
            Jan 3 '16 at 15:39






            It isn't working with files containing space. How can I modify $(basename "$i/.flac") to handle spaces?

            – ppr
            Jan 3 '16 at 15:39





            1




            1





            @ppr Try putting this line just before the for loop: IFS=$'n'

            – mkc
            Jan 3 '16 at 19:14





            @ppr Try putting this line just before the for loop: IFS=$'n'

            – mkc
            Jan 3 '16 at 19:14




            5




            5





            I solved the space issue by changing $(basename "$i/.flac").mp3 to "$(basename "$i/.flac").mp3" (putting quotes around it)

            – MalcolmOcean
            Sep 17 '16 at 20:02





            I solved the space issue by changing $(basename "$i/.flac").mp3 to "$(basename "$i/.flac").mp3" (putting quotes around it)

            – MalcolmOcean
            Sep 17 '16 at 20:02













            41














            A simple 1 liner solution:
            find -name "*.flac" -exec ffmpeg -i -acodec libmp3lame -ab 128k .mp3 ;



            http://lewisdiamond.blogspot.ca/2012/01/converting-flac-to-mp3.html



            Note that this will be applied recursively in the given directory. I.e. if you run this from your Music folder, it will convert all flacs from subfolders and produce a .mp3 next to it. You may also do it without ffmpeg by directly using flac and lame (i.e. read w/ flac, pipe to lame, output to a file .mp3), as shown in the link.






            share|improve this answer

























            • You can use -maxdepth 1 I think like in X Tian's answer to limit the recursiveness.

              – user44370
              Oct 24 '14 at 20:00






            • 2





              Yes you can. You could also use ls piped to xargs or a for loop. I'm just making the (possibly wrong) assumption that a recursive search is more along what the OP needed (i.e. change all the .flac from my music library).

              – Lewis Diamond
              Oct 24 '14 at 20:48






            • 10





              This command is great - however; You end up with files named *.flac.mp3. Using your command, I came up with this... find -name "*.flac" -exec bash -c 'ffmpeg -i "" -y -acodec libmp3lame -ab 128k "$0/.flac.mp3"' ;

              – Shane
              Oct 27 '15 at 2:54







            • 1





              Yes, as I explained in the blog, I like this aspect of adding the .mp3 because it tells me this files comes from a lossless source, which should be found somewhere on my hard drive.

              – Lewis Diamond
              Oct 28 '15 at 16:23











            • @Shane comment worked for me.

              – Chaudhry Waqas
              Feb 19 at 9:11















            41














            A simple 1 liner solution:
            find -name "*.flac" -exec ffmpeg -i -acodec libmp3lame -ab 128k .mp3 ;



            http://lewisdiamond.blogspot.ca/2012/01/converting-flac-to-mp3.html



            Note that this will be applied recursively in the given directory. I.e. if you run this from your Music folder, it will convert all flacs from subfolders and produce a .mp3 next to it. You may also do it without ffmpeg by directly using flac and lame (i.e. read w/ flac, pipe to lame, output to a file .mp3), as shown in the link.






            share|improve this answer

























            • You can use -maxdepth 1 I think like in X Tian's answer to limit the recursiveness.

              – user44370
              Oct 24 '14 at 20:00






            • 2





              Yes you can. You could also use ls piped to xargs or a for loop. I'm just making the (possibly wrong) assumption that a recursive search is more along what the OP needed (i.e. change all the .flac from my music library).

              – Lewis Diamond
              Oct 24 '14 at 20:48






            • 10





              This command is great - however; You end up with files named *.flac.mp3. Using your command, I came up with this... find -name "*.flac" -exec bash -c 'ffmpeg -i "" -y -acodec libmp3lame -ab 128k "$0/.flac.mp3"' ;

              – Shane
              Oct 27 '15 at 2:54







            • 1





              Yes, as I explained in the blog, I like this aspect of adding the .mp3 because it tells me this files comes from a lossless source, which should be found somewhere on my hard drive.

              – Lewis Diamond
              Oct 28 '15 at 16:23











            • @Shane comment worked for me.

              – Chaudhry Waqas
              Feb 19 at 9:11













            41












            41








            41







            A simple 1 liner solution:
            find -name "*.flac" -exec ffmpeg -i -acodec libmp3lame -ab 128k .mp3 ;



            http://lewisdiamond.blogspot.ca/2012/01/converting-flac-to-mp3.html



            Note that this will be applied recursively in the given directory. I.e. if you run this from your Music folder, it will convert all flacs from subfolders and produce a .mp3 next to it. You may also do it without ffmpeg by directly using flac and lame (i.e. read w/ flac, pipe to lame, output to a file .mp3), as shown in the link.






            share|improve this answer















            A simple 1 liner solution:
            find -name "*.flac" -exec ffmpeg -i -acodec libmp3lame -ab 128k .mp3 ;



            http://lewisdiamond.blogspot.ca/2012/01/converting-flac-to-mp3.html



            Note that this will be applied recursively in the given directory. I.e. if you run this from your Music folder, it will convert all flacs from subfolders and produce a .mp3 next to it. You may also do it without ffmpeg by directly using flac and lame (i.e. read w/ flac, pipe to lame, output to a file .mp3), as shown in the link.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Oct 24 '14 at 19:05

























            answered Oct 24 '14 at 18:11









            Lewis DiamondLewis Diamond

            51144




            51144












            • You can use -maxdepth 1 I think like in X Tian's answer to limit the recursiveness.

              – user44370
              Oct 24 '14 at 20:00






            • 2





              Yes you can. You could also use ls piped to xargs or a for loop. I'm just making the (possibly wrong) assumption that a recursive search is more along what the OP needed (i.e. change all the .flac from my music library).

              – Lewis Diamond
              Oct 24 '14 at 20:48






            • 10





              This command is great - however; You end up with files named *.flac.mp3. Using your command, I came up with this... find -name "*.flac" -exec bash -c 'ffmpeg -i "" -y -acodec libmp3lame -ab 128k "$0/.flac.mp3"' ;

              – Shane
              Oct 27 '15 at 2:54







            • 1





              Yes, as I explained in the blog, I like this aspect of adding the .mp3 because it tells me this files comes from a lossless source, which should be found somewhere on my hard drive.

              – Lewis Diamond
              Oct 28 '15 at 16:23











            • @Shane comment worked for me.

              – Chaudhry Waqas
              Feb 19 at 9:11

















            • You can use -maxdepth 1 I think like in X Tian's answer to limit the recursiveness.

              – user44370
              Oct 24 '14 at 20:00






            • 2





              Yes you can. You could also use ls piped to xargs or a for loop. I'm just making the (possibly wrong) assumption that a recursive search is more along what the OP needed (i.e. change all the .flac from my music library).

              – Lewis Diamond
              Oct 24 '14 at 20:48






            • 10





              This command is great - however; You end up with files named *.flac.mp3. Using your command, I came up with this... find -name "*.flac" -exec bash -c 'ffmpeg -i "" -y -acodec libmp3lame -ab 128k "$0/.flac.mp3"' ;

              – Shane
              Oct 27 '15 at 2:54







            • 1





              Yes, as I explained in the blog, I like this aspect of adding the .mp3 because it tells me this files comes from a lossless source, which should be found somewhere on my hard drive.

              – Lewis Diamond
              Oct 28 '15 at 16:23











            • @Shane comment worked for me.

              – Chaudhry Waqas
              Feb 19 at 9:11
















            You can use -maxdepth 1 I think like in X Tian's answer to limit the recursiveness.

            – user44370
            Oct 24 '14 at 20:00





            You can use -maxdepth 1 I think like in X Tian's answer to limit the recursiveness.

            – user44370
            Oct 24 '14 at 20:00




            2




            2





            Yes you can. You could also use ls piped to xargs or a for loop. I'm just making the (possibly wrong) assumption that a recursive search is more along what the OP needed (i.e. change all the .flac from my music library).

            – Lewis Diamond
            Oct 24 '14 at 20:48





            Yes you can. You could also use ls piped to xargs or a for loop. I'm just making the (possibly wrong) assumption that a recursive search is more along what the OP needed (i.e. change all the .flac from my music library).

            – Lewis Diamond
            Oct 24 '14 at 20:48




            10




            10





            This command is great - however; You end up with files named *.flac.mp3. Using your command, I came up with this... find -name "*.flac" -exec bash -c 'ffmpeg -i "" -y -acodec libmp3lame -ab 128k "$0/.flac.mp3"' ;

            – Shane
            Oct 27 '15 at 2:54






            This command is great - however; You end up with files named *.flac.mp3. Using your command, I came up with this... find -name "*.flac" -exec bash -c 'ffmpeg -i "" -y -acodec libmp3lame -ab 128k "$0/.flac.mp3"' ;

            – Shane
            Oct 27 '15 at 2:54





            1




            1





            Yes, as I explained in the blog, I like this aspect of adding the .mp3 because it tells me this files comes from a lossless source, which should be found somewhere on my hard drive.

            – Lewis Diamond
            Oct 28 '15 at 16:23





            Yes, as I explained in the blog, I like this aspect of adding the .mp3 because it tells me this files comes from a lossless source, which should be found somewhere on my hard drive.

            – Lewis Diamond
            Oct 28 '15 at 16:23













            @Shane comment worked for me.

            – Chaudhry Waqas
            Feb 19 at 9:11





            @Shane comment worked for me.

            – Chaudhry Waqas
            Feb 19 at 9:11











            8














            If you have some white spaces in the file names:



            for a in *.flac; do
            f="$a[@]/%flac/mp3"
            ffmpeg -i "$a" -qscale:a 0 "$f"
            done





            share|improve this answer

























            • I have a folder with a mixture of mp4 and wav files. How do I convert all of them into mp3? Thank you.

              – kRazzy R
              Jun 11 '18 at 14:55















            8














            If you have some white spaces in the file names:



            for a in *.flac; do
            f="$a[@]/%flac/mp3"
            ffmpeg -i "$a" -qscale:a 0 "$f"
            done





            share|improve this answer

























            • I have a folder with a mixture of mp4 and wav files. How do I convert all of them into mp3? Thank you.

              – kRazzy R
              Jun 11 '18 at 14:55













            8












            8








            8







            If you have some white spaces in the file names:



            for a in *.flac; do
            f="$a[@]/%flac/mp3"
            ffmpeg -i "$a" -qscale:a 0 "$f"
            done





            share|improve this answer















            If you have some white spaces in the file names:



            for a in *.flac; do
            f="$a[@]/%flac/mp3"
            ffmpeg -i "$a" -qscale:a 0 "$f"
            done






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Dec 29 '14 at 6:14









            HalosGhost

            3,78392236




            3,78392236










            answered Dec 29 '14 at 5:36









            Daeseong KimDaeseong Kim

            8111




            8111












            • I have a folder with a mixture of mp4 and wav files. How do I convert all of them into mp3? Thank you.

              – kRazzy R
              Jun 11 '18 at 14:55

















            • I have a folder with a mixture of mp4 and wav files. How do I convert all of them into mp3? Thank you.

              – kRazzy R
              Jun 11 '18 at 14:55
















            I have a folder with a mixture of mp4 and wav files. How do I convert all of them into mp3? Thank you.

            – kRazzy R
            Jun 11 '18 at 14:55





            I have a folder with a mixture of mp4 and wav files. How do I convert all of them into mp3? Thank you.

            – kRazzy R
            Jun 11 '18 at 14:55











            1














            I worked on @Ketan's answer using avconv, since ffmpeg doesn't work well over here.



            for i in *.flac ; do 
            avconv -i "$i" "./mp3/$i".mp3
            done


            This converts flac files in a folder into mp3 files and moves then to an existing "mp3" folder. Files will be named in the model "original_name.flac.mp3"






            share|improve this answer



























              1














              I worked on @Ketan's answer using avconv, since ffmpeg doesn't work well over here.



              for i in *.flac ; do 
              avconv -i "$i" "./mp3/$i".mp3
              done


              This converts flac files in a folder into mp3 files and moves then to an existing "mp3" folder. Files will be named in the model "original_name.flac.mp3"






              share|improve this answer

























                1












                1








                1







                I worked on @Ketan's answer using avconv, since ffmpeg doesn't work well over here.



                for i in *.flac ; do 
                avconv -i "$i" "./mp3/$i".mp3
                done


                This converts flac files in a folder into mp3 files and moves then to an existing "mp3" folder. Files will be named in the model "original_name.flac.mp3"






                share|improve this answer













                I worked on @Ketan's answer using avconv, since ffmpeg doesn't work well over here.



                for i in *.flac ; do 
                avconv -i "$i" "./mp3/$i".mp3
                done


                This converts flac files in a folder into mp3 files and moves then to an existing "mp3" folder. Files will be named in the model "original_name.flac.mp3"







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jul 7 '15 at 13:28









                DanBCDanBC

                112




                112





















                    1














                    find . -maxdepth 1 -type f -name '*.flac' | while IFS= read -r f; do
                    ffmpeg -i "$f" -acodec libmp3lame "$( sed -e's/.flac/.mp3/g' <<< $f )"
                    done





                    share|improve this answer




















                    • 1





                      sed expression needs an ending '

                      – Jaime M.
                      Aug 14 '15 at 16:15















                    1














                    find . -maxdepth 1 -type f -name '*.flac' | while IFS= read -r f; do
                    ffmpeg -i "$f" -acodec libmp3lame "$( sed -e's/.flac/.mp3/g' <<< $f )"
                    done





                    share|improve this answer




















                    • 1





                      sed expression needs an ending '

                      – Jaime M.
                      Aug 14 '15 at 16:15













                    1












                    1








                    1







                    find . -maxdepth 1 -type f -name '*.flac' | while IFS= read -r f; do
                    ffmpeg -i "$f" -acodec libmp3lame "$( sed -e's/.flac/.mp3/g' <<< $f )"
                    done





                    share|improve this answer















                    find . -maxdepth 1 -type f -name '*.flac' | while IFS= read -r f; do
                    ffmpeg -i "$f" -acodec libmp3lame "$( sed -e's/.flac/.mp3/g' <<< $f )"
                    done






                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited Aug 16 '15 at 10:38

























                    answered Feb 12 '14 at 16:28









                    X TianX Tian

                    7,83112237




                    7,83112237







                    • 1





                      sed expression needs an ending '

                      – Jaime M.
                      Aug 14 '15 at 16:15












                    • 1





                      sed expression needs an ending '

                      – Jaime M.
                      Aug 14 '15 at 16:15







                    1




                    1





                    sed expression needs an ending '

                    – Jaime M.
                    Aug 14 '15 at 16:15





                    sed expression needs an ending '

                    – Jaime M.
                    Aug 14 '15 at 16:15











                    1














                    I took everything I found here (and maybe on some other sites) and created a small tool to not only create mp3s of flacs recursively, but also preserve relative paths to create them elsewhere with multithread support.



                    oh, and yes, I see, I didn't use ffmpeg in that case, because my OSMC didn't provide packages for ffmpeg, only avconv, but since you're already here, I guess you know, it's "basically" the same - at least for the most important part. Just replace the command "avconv" with "ffmpeg". My first runs were with the ffmpeg bin and the exact same options.



                    I am by no means a bash hacker, but I managed it, as my first bashscript with the given demands, and maybe someone will benefit.
                    I am open for any suggestions from your side, but so far it works for me.



                    my script to spin up the 4 instances, one for each core, is like this:



                    #!/bin/bash
                    # this should be quite self-explanatory
                    for i in 1..4
                    do
                    echo "started instance no: $i"
                    /home/osmc/transform.sh . &
                    # sleeping time can be shorter, this is just so, that
                    # not all 4 processes will want to start with the same
                    # file, during runtime collisions should not become an issue
                    sleep 5
                    done
                    echo "all instances started"


                    And the worker script like this:



                    #!/bin/bash
                    # take care of spaces
                    IFS=$'n'
                    # my music folders, remote is the source, local the target dir
                    remote=/mnt/music/FLAC
                    local=/mnt/1tb/mp3
                    # for all flac files start loop
                    for i in $(find $remote -type f -iname '*.flac' );
                    do
                    ## SET VARIABLES for PATHS and FILENAMES
                    ## this might be able to be super short with sed and complex one-liner,
                    ## but I s*ck at regex
                    fullfile=$i
                    # strip extension
                    filename="$i##*/"
                    # add new extension
                    filename="$filename%.*.mp3"
                    # get full dirname from inputfile
                    fulldir=$(dirname "$i")
                    # strip leading dirs from full input dir
                    # count the dirs, add two, then you're good.
                    reldir="$(echo $fulldir | cut -d'/' -f5-)"
                    # some subdirs in my collection even have a flac subdir, you might
                    # ignore this, it strips only if it exists
                    reldir=$reldir//flac
                    # combine target dir and relative dir
                    outdir="$local/$reldir"
                    # generate the full output filename for conversion
                    outfile="$outdir/$filename"
                    # create whole target directory - yes, I need it only once, but hey,
                    # it works, didn't want to start a if not exist statement... should I?
                    mkdir -p "$outdir"
                    # run conversion - finally... you may want or need to replace
                    # "avconv" with "ffmpeg"
                    avconv -n -nostats -loglevel info -i "$fullfile" -codec:a libmp3lame -qscale:a 0 "$outfile"
                    done


                    which can be found at
                    https://github.com/erdnuesse/flac-to-mp3



                    Regards,
                    Kay






                    share|improve this answer

























                    • welcome aboard, good effort. +1

                      – Alex Stragies
                      Jan 12 '18 at 18:00















                    1














                    I took everything I found here (and maybe on some other sites) and created a small tool to not only create mp3s of flacs recursively, but also preserve relative paths to create them elsewhere with multithread support.



                    oh, and yes, I see, I didn't use ffmpeg in that case, because my OSMC didn't provide packages for ffmpeg, only avconv, but since you're already here, I guess you know, it's "basically" the same - at least for the most important part. Just replace the command "avconv" with "ffmpeg". My first runs were with the ffmpeg bin and the exact same options.



                    I am by no means a bash hacker, but I managed it, as my first bashscript with the given demands, and maybe someone will benefit.
                    I am open for any suggestions from your side, but so far it works for me.



                    my script to spin up the 4 instances, one for each core, is like this:



                    #!/bin/bash
                    # this should be quite self-explanatory
                    for i in 1..4
                    do
                    echo "started instance no: $i"
                    /home/osmc/transform.sh . &
                    # sleeping time can be shorter, this is just so, that
                    # not all 4 processes will want to start with the same
                    # file, during runtime collisions should not become an issue
                    sleep 5
                    done
                    echo "all instances started"


                    And the worker script like this:



                    #!/bin/bash
                    # take care of spaces
                    IFS=$'n'
                    # my music folders, remote is the source, local the target dir
                    remote=/mnt/music/FLAC
                    local=/mnt/1tb/mp3
                    # for all flac files start loop
                    for i in $(find $remote -type f -iname '*.flac' );
                    do
                    ## SET VARIABLES for PATHS and FILENAMES
                    ## this might be able to be super short with sed and complex one-liner,
                    ## but I s*ck at regex
                    fullfile=$i
                    # strip extension
                    filename="$i##*/"
                    # add new extension
                    filename="$filename%.*.mp3"
                    # get full dirname from inputfile
                    fulldir=$(dirname "$i")
                    # strip leading dirs from full input dir
                    # count the dirs, add two, then you're good.
                    reldir="$(echo $fulldir | cut -d'/' -f5-)"
                    # some subdirs in my collection even have a flac subdir, you might
                    # ignore this, it strips only if it exists
                    reldir=$reldir//flac
                    # combine target dir and relative dir
                    outdir="$local/$reldir"
                    # generate the full output filename for conversion
                    outfile="$outdir/$filename"
                    # create whole target directory - yes, I need it only once, but hey,
                    # it works, didn't want to start a if not exist statement... should I?
                    mkdir -p "$outdir"
                    # run conversion - finally... you may want or need to replace
                    # "avconv" with "ffmpeg"
                    avconv -n -nostats -loglevel info -i "$fullfile" -codec:a libmp3lame -qscale:a 0 "$outfile"
                    done


                    which can be found at
                    https://github.com/erdnuesse/flac-to-mp3



                    Regards,
                    Kay






                    share|improve this answer

























                    • welcome aboard, good effort. +1

                      – Alex Stragies
                      Jan 12 '18 at 18:00













                    1












                    1








                    1







                    I took everything I found here (and maybe on some other sites) and created a small tool to not only create mp3s of flacs recursively, but also preserve relative paths to create them elsewhere with multithread support.



                    oh, and yes, I see, I didn't use ffmpeg in that case, because my OSMC didn't provide packages for ffmpeg, only avconv, but since you're already here, I guess you know, it's "basically" the same - at least for the most important part. Just replace the command "avconv" with "ffmpeg". My first runs were with the ffmpeg bin and the exact same options.



                    I am by no means a bash hacker, but I managed it, as my first bashscript with the given demands, and maybe someone will benefit.
                    I am open for any suggestions from your side, but so far it works for me.



                    my script to spin up the 4 instances, one for each core, is like this:



                    #!/bin/bash
                    # this should be quite self-explanatory
                    for i in 1..4
                    do
                    echo "started instance no: $i"
                    /home/osmc/transform.sh . &
                    # sleeping time can be shorter, this is just so, that
                    # not all 4 processes will want to start with the same
                    # file, during runtime collisions should not become an issue
                    sleep 5
                    done
                    echo "all instances started"


                    And the worker script like this:



                    #!/bin/bash
                    # take care of spaces
                    IFS=$'n'
                    # my music folders, remote is the source, local the target dir
                    remote=/mnt/music/FLAC
                    local=/mnt/1tb/mp3
                    # for all flac files start loop
                    for i in $(find $remote -type f -iname '*.flac' );
                    do
                    ## SET VARIABLES for PATHS and FILENAMES
                    ## this might be able to be super short with sed and complex one-liner,
                    ## but I s*ck at regex
                    fullfile=$i
                    # strip extension
                    filename="$i##*/"
                    # add new extension
                    filename="$filename%.*.mp3"
                    # get full dirname from inputfile
                    fulldir=$(dirname "$i")
                    # strip leading dirs from full input dir
                    # count the dirs, add two, then you're good.
                    reldir="$(echo $fulldir | cut -d'/' -f5-)"
                    # some subdirs in my collection even have a flac subdir, you might
                    # ignore this, it strips only if it exists
                    reldir=$reldir//flac
                    # combine target dir and relative dir
                    outdir="$local/$reldir"
                    # generate the full output filename for conversion
                    outfile="$outdir/$filename"
                    # create whole target directory - yes, I need it only once, but hey,
                    # it works, didn't want to start a if not exist statement... should I?
                    mkdir -p "$outdir"
                    # run conversion - finally... you may want or need to replace
                    # "avconv" with "ffmpeg"
                    avconv -n -nostats -loglevel info -i "$fullfile" -codec:a libmp3lame -qscale:a 0 "$outfile"
                    done


                    which can be found at
                    https://github.com/erdnuesse/flac-to-mp3



                    Regards,
                    Kay






                    share|improve this answer















                    I took everything I found here (and maybe on some other sites) and created a small tool to not only create mp3s of flacs recursively, but also preserve relative paths to create them elsewhere with multithread support.



                    oh, and yes, I see, I didn't use ffmpeg in that case, because my OSMC didn't provide packages for ffmpeg, only avconv, but since you're already here, I guess you know, it's "basically" the same - at least for the most important part. Just replace the command "avconv" with "ffmpeg". My first runs were with the ffmpeg bin and the exact same options.



                    I am by no means a bash hacker, but I managed it, as my first bashscript with the given demands, and maybe someone will benefit.
                    I am open for any suggestions from your side, but so far it works for me.



                    my script to spin up the 4 instances, one for each core, is like this:



                    #!/bin/bash
                    # this should be quite self-explanatory
                    for i in 1..4
                    do
                    echo "started instance no: $i"
                    /home/osmc/transform.sh . &
                    # sleeping time can be shorter, this is just so, that
                    # not all 4 processes will want to start with the same
                    # file, during runtime collisions should not become an issue
                    sleep 5
                    done
                    echo "all instances started"


                    And the worker script like this:



                    #!/bin/bash
                    # take care of spaces
                    IFS=$'n'
                    # my music folders, remote is the source, local the target dir
                    remote=/mnt/music/FLAC
                    local=/mnt/1tb/mp3
                    # for all flac files start loop
                    for i in $(find $remote -type f -iname '*.flac' );
                    do
                    ## SET VARIABLES for PATHS and FILENAMES
                    ## this might be able to be super short with sed and complex one-liner,
                    ## but I s*ck at regex
                    fullfile=$i
                    # strip extension
                    filename="$i##*/"
                    # add new extension
                    filename="$filename%.*.mp3"
                    # get full dirname from inputfile
                    fulldir=$(dirname "$i")
                    # strip leading dirs from full input dir
                    # count the dirs, add two, then you're good.
                    reldir="$(echo $fulldir | cut -d'/' -f5-)"
                    # some subdirs in my collection even have a flac subdir, you might
                    # ignore this, it strips only if it exists
                    reldir=$reldir//flac
                    # combine target dir and relative dir
                    outdir="$local/$reldir"
                    # generate the full output filename for conversion
                    outfile="$outdir/$filename"
                    # create whole target directory - yes, I need it only once, but hey,
                    # it works, didn't want to start a if not exist statement... should I?
                    mkdir -p "$outdir"
                    # run conversion - finally... you may want or need to replace
                    # "avconv" with "ffmpeg"
                    avconv -n -nostats -loglevel info -i "$fullfile" -codec:a libmp3lame -qscale:a 0 "$outfile"
                    done


                    which can be found at
                    https://github.com/erdnuesse/flac-to-mp3



                    Regards,
                    Kay







                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited Jan 12 '18 at 21:53

























                    answered Jan 12 '18 at 17:59









                    Kay UrbachKay Urbach

                    112




                    112












                    • welcome aboard, good effort. +1

                      – Alex Stragies
                      Jan 12 '18 at 18:00

















                    • welcome aboard, good effort. +1

                      – Alex Stragies
                      Jan 12 '18 at 18:00
















                    welcome aboard, good effort. +1

                    – Alex Stragies
                    Jan 12 '18 at 18:00





                    welcome aboard, good effort. +1

                    – Alex Stragies
                    Jan 12 '18 at 18:00











                    0














                    Parallel FTW (no doubt you have more than one core - why not use them?):



                    ls *flac | while read f; do ffmpeg -i "$f" -acodec libmp3lame $f.mp3 & done





                    share|improve this answer


















                    • 4





                      see why not parse ls and Why is using a shell loop to process text considered bad practice?

                      – Evgeny Vereshchagin
                      Jul 27 '15 at 21:24















                    0














                    Parallel FTW (no doubt you have more than one core - why not use them?):



                    ls *flac | while read f; do ffmpeg -i "$f" -acodec libmp3lame $f.mp3 & done





                    share|improve this answer


















                    • 4





                      see why not parse ls and Why is using a shell loop to process text considered bad practice?

                      – Evgeny Vereshchagin
                      Jul 27 '15 at 21:24













                    0












                    0








                    0







                    Parallel FTW (no doubt you have more than one core - why not use them?):



                    ls *flac | while read f; do ffmpeg -i "$f" -acodec libmp3lame $f.mp3 & done





                    share|improve this answer













                    Parallel FTW (no doubt you have more than one core - why not use them?):



                    ls *flac | while read f; do ffmpeg -i "$f" -acodec libmp3lame $f.mp3 & done






                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered Jul 27 '15 at 21:04









                    hoffmanchoffmanc

                    1092




                    1092







                    • 4





                      see why not parse ls and Why is using a shell loop to process text considered bad practice?

                      – Evgeny Vereshchagin
                      Jul 27 '15 at 21:24












                    • 4





                      see why not parse ls and Why is using a shell loop to process text considered bad practice?

                      – Evgeny Vereshchagin
                      Jul 27 '15 at 21:24







                    4




                    4





                    see why not parse ls and Why is using a shell loop to process text considered bad practice?

                    – Evgeny Vereshchagin
                    Jul 27 '15 at 21:24





                    see why not parse ls and Why is using a shell loop to process text considered bad practice?

                    – Evgeny Vereshchagin
                    Jul 27 '15 at 21:24











                    0














                    For example, if you have multiple avi files:



                    ls *.avi | xargs -I ffmpeg -i .mp3





                    share|improve this answer





























                      0














                      For example, if you have multiple avi files:



                      ls *.avi | xargs -I ffmpeg -i .mp3





                      share|improve this answer



























                        0












                        0








                        0







                        For example, if you have multiple avi files:



                        ls *.avi | xargs -I ffmpeg -i .mp3





                        share|improve this answer















                        For example, if you have multiple avi files:



                        ls *.avi | xargs -I ffmpeg -i .mp3






                        share|improve this answer














                        share|improve this answer



                        share|improve this answer








                        edited Dec 29 '15 at 20:00









                        Jeff Schaller

                        44.4k1162143




                        44.4k1162143










                        answered Dec 29 '15 at 19:39









                        K-FIVEK-FIVE

                        1




                        1





















                            0














                            If it can help ....
                            I've written a small bash script to do this ....
                            You need to have ffmpeg / flac installed.



                            How it works:



                            It takes 2 arguments :



                            1. The folder of your music library (flac/ogg/mp3 ...)

                            2. The destination folder (you need to create it before).

                            It produce :



                            • An exact copy from the source folder into the destination folder, with:

                              • the non flac files copied into.

                              • the flac files transformed to mp3 ( VBR high quality)


                            • A run.sh file with the commands to convert the flac files (this script is executed automatically).


                            #!/bin/bash

                            FLAC_PATH=$1
                            CONV_PATH=$2

                            DEBUG=0;

                            function usage
                            echo "";
                            echo " This script convert all flac files from a folder to mp3 files to a second folder";
                            echo "";
                            echo " Usage :";
                            echo " ./conv.sh Source Folder Destination Folder";
                            echo " note : booth folder must exist before starting this script";
                            echo " files other than flac are copied to the destination folder";
                            echo "";


                            if [ ! -d "$2" ]; then
                            echo "";
                            echo " ERROR : [$2] is not a directory.";
                            usage
                            exit 1
                            fi;

                            if [ ! -d "$2" ]; then
                            echo "";
                            echo " ERROR : [$2] is not a directory.";
                            usage
                            exit 1
                            fi;

                            COMMANDS="run.sh"
                            echo "" > run.sh
                            echo " convert from $FLAC_PATH to $CONV_PATH ";

                            find "$FLAC_PATH" -type f |while read myFile; do
                            SRC_DIR=$myFile%/*
                            SRC_FILE=$myFile##*/
                            DST_DIR=$CONV_PATH/$SRC_DIR
                            mkdir -p "$DST_DIR"
                            # TEST if the file is a flac ....
                            metaflac --show-md5sum "$myFile" 2>/dev/null 1>/dev/null
                            if [ $? -eq 0 ]; then
                            echo -n " *** $myFile [FLAC !] : "
                            DST_FILE=$myFile%.*
                            OUT_PATH="$DST_DIR/$( echo $SRC_FILE | sed -e 's/.flac$/.mp3/')"

                            if [ $DEBUG == 1 ]; then
                            echo " SRC = $myFile";
                            echo " OUT = $OUT_PATH"
                            fi;

                            if [ -f "$OUT_PATH" ]; then
                            echo " exist, do nothing !";
                            else
                            echo " add to compress list !";
                            echo "ffmpeg -y -i "$myFile" -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 "$OUT_PATH" " >> $COMMANDS
                            fi;

                            else
                            echo -n " *** $SRC_FILE [NOT FLAC] : "
                            if [ -f "$CONV_PATH/$myFile" ]; then
                            echo " exist, do nothing !"
                            else
                            echo " copy."
                            cp "$myFile" "$CONV_PATH/$myFile"
                            fi
                            fi

                            done;

                            echo " And now, CONVERT THE FLAC's!!! "
                            sh run.sh






                            share|improve this answer



























                              0














                              If it can help ....
                              I've written a small bash script to do this ....
                              You need to have ffmpeg / flac installed.



                              How it works:



                              It takes 2 arguments :



                              1. The folder of your music library (flac/ogg/mp3 ...)

                              2. The destination folder (you need to create it before).

                              It produce :



                              • An exact copy from the source folder into the destination folder, with:

                                • the non flac files copied into.

                                • the flac files transformed to mp3 ( VBR high quality)


                              • A run.sh file with the commands to convert the flac files (this script is executed automatically).


                              #!/bin/bash

                              FLAC_PATH=$1
                              CONV_PATH=$2

                              DEBUG=0;

                              function usage
                              echo "";
                              echo " This script convert all flac files from a folder to mp3 files to a second folder";
                              echo "";
                              echo " Usage :";
                              echo " ./conv.sh Source Folder Destination Folder";
                              echo " note : booth folder must exist before starting this script";
                              echo " files other than flac are copied to the destination folder";
                              echo "";


                              if [ ! -d "$2" ]; then
                              echo "";
                              echo " ERROR : [$2] is not a directory.";
                              usage
                              exit 1
                              fi;

                              if [ ! -d "$2" ]; then
                              echo "";
                              echo " ERROR : [$2] is not a directory.";
                              usage
                              exit 1
                              fi;

                              COMMANDS="run.sh"
                              echo "" > run.sh
                              echo " convert from $FLAC_PATH to $CONV_PATH ";

                              find "$FLAC_PATH" -type f |while read myFile; do
                              SRC_DIR=$myFile%/*
                              SRC_FILE=$myFile##*/
                              DST_DIR=$CONV_PATH/$SRC_DIR
                              mkdir -p "$DST_DIR"
                              # TEST if the file is a flac ....
                              metaflac --show-md5sum "$myFile" 2>/dev/null 1>/dev/null
                              if [ $? -eq 0 ]; then
                              echo -n " *** $myFile [FLAC !] : "
                              DST_FILE=$myFile%.*
                              OUT_PATH="$DST_DIR/$( echo $SRC_FILE | sed -e 's/.flac$/.mp3/')"

                              if [ $DEBUG == 1 ]; then
                              echo " SRC = $myFile";
                              echo " OUT = $OUT_PATH"
                              fi;

                              if [ -f "$OUT_PATH" ]; then
                              echo " exist, do nothing !";
                              else
                              echo " add to compress list !";
                              echo "ffmpeg -y -i "$myFile" -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 "$OUT_PATH" " >> $COMMANDS
                              fi;

                              else
                              echo -n " *** $SRC_FILE [NOT FLAC] : "
                              if [ -f "$CONV_PATH/$myFile" ]; then
                              echo " exist, do nothing !"
                              else
                              echo " copy."
                              cp "$myFile" "$CONV_PATH/$myFile"
                              fi
                              fi

                              done;

                              echo " And now, CONVERT THE FLAC's!!! "
                              sh run.sh






                              share|improve this answer

























                                0












                                0








                                0







                                If it can help ....
                                I've written a small bash script to do this ....
                                You need to have ffmpeg / flac installed.



                                How it works:



                                It takes 2 arguments :



                                1. The folder of your music library (flac/ogg/mp3 ...)

                                2. The destination folder (you need to create it before).

                                It produce :



                                • An exact copy from the source folder into the destination folder, with:

                                  • the non flac files copied into.

                                  • the flac files transformed to mp3 ( VBR high quality)


                                • A run.sh file with the commands to convert the flac files (this script is executed automatically).


                                #!/bin/bash

                                FLAC_PATH=$1
                                CONV_PATH=$2

                                DEBUG=0;

                                function usage
                                echo "";
                                echo " This script convert all flac files from a folder to mp3 files to a second folder";
                                echo "";
                                echo " Usage :";
                                echo " ./conv.sh Source Folder Destination Folder";
                                echo " note : booth folder must exist before starting this script";
                                echo " files other than flac are copied to the destination folder";
                                echo "";


                                if [ ! -d "$2" ]; then
                                echo "";
                                echo " ERROR : [$2] is not a directory.";
                                usage
                                exit 1
                                fi;

                                if [ ! -d "$2" ]; then
                                echo "";
                                echo " ERROR : [$2] is not a directory.";
                                usage
                                exit 1
                                fi;

                                COMMANDS="run.sh"
                                echo "" > run.sh
                                echo " convert from $FLAC_PATH to $CONV_PATH ";

                                find "$FLAC_PATH" -type f |while read myFile; do
                                SRC_DIR=$myFile%/*
                                SRC_FILE=$myFile##*/
                                DST_DIR=$CONV_PATH/$SRC_DIR
                                mkdir -p "$DST_DIR"
                                # TEST if the file is a flac ....
                                metaflac --show-md5sum "$myFile" 2>/dev/null 1>/dev/null
                                if [ $? -eq 0 ]; then
                                echo -n " *** $myFile [FLAC !] : "
                                DST_FILE=$myFile%.*
                                OUT_PATH="$DST_DIR/$( echo $SRC_FILE | sed -e 's/.flac$/.mp3/')"

                                if [ $DEBUG == 1 ]; then
                                echo " SRC = $myFile";
                                echo " OUT = $OUT_PATH"
                                fi;

                                if [ -f "$OUT_PATH" ]; then
                                echo " exist, do nothing !";
                                else
                                echo " add to compress list !";
                                echo "ffmpeg -y -i "$myFile" -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 "$OUT_PATH" " >> $COMMANDS
                                fi;

                                else
                                echo -n " *** $SRC_FILE [NOT FLAC] : "
                                if [ -f "$CONV_PATH/$myFile" ]; then
                                echo " exist, do nothing !"
                                else
                                echo " copy."
                                cp "$myFile" "$CONV_PATH/$myFile"
                                fi
                                fi

                                done;

                                echo " And now, CONVERT THE FLAC's!!! "
                                sh run.sh






                                share|improve this answer













                                If it can help ....
                                I've written a small bash script to do this ....
                                You need to have ffmpeg / flac installed.



                                How it works:



                                It takes 2 arguments :



                                1. The folder of your music library (flac/ogg/mp3 ...)

                                2. The destination folder (you need to create it before).

                                It produce :



                                • An exact copy from the source folder into the destination folder, with:

                                  • the non flac files copied into.

                                  • the flac files transformed to mp3 ( VBR high quality)


                                • A run.sh file with the commands to convert the flac files (this script is executed automatically).


                                #!/bin/bash

                                FLAC_PATH=$1
                                CONV_PATH=$2

                                DEBUG=0;

                                function usage
                                echo "";
                                echo " This script convert all flac files from a folder to mp3 files to a second folder";
                                echo "";
                                echo " Usage :";
                                echo " ./conv.sh Source Folder Destination Folder";
                                echo " note : booth folder must exist before starting this script";
                                echo " files other than flac are copied to the destination folder";
                                echo "";


                                if [ ! -d "$2" ]; then
                                echo "";
                                echo " ERROR : [$2] is not a directory.";
                                usage
                                exit 1
                                fi;

                                if [ ! -d "$2" ]; then
                                echo "";
                                echo " ERROR : [$2] is not a directory.";
                                usage
                                exit 1
                                fi;

                                COMMANDS="run.sh"
                                echo "" > run.sh
                                echo " convert from $FLAC_PATH to $CONV_PATH ";

                                find "$FLAC_PATH" -type f |while read myFile; do
                                SRC_DIR=$myFile%/*
                                SRC_FILE=$myFile##*/
                                DST_DIR=$CONV_PATH/$SRC_DIR
                                mkdir -p "$DST_DIR"
                                # TEST if the file is a flac ....
                                metaflac --show-md5sum "$myFile" 2>/dev/null 1>/dev/null
                                if [ $? -eq 0 ]; then
                                echo -n " *** $myFile [FLAC !] : "
                                DST_FILE=$myFile%.*
                                OUT_PATH="$DST_DIR/$( echo $SRC_FILE | sed -e 's/.flac$/.mp3/')"

                                if [ $DEBUG == 1 ]; then
                                echo " SRC = $myFile";
                                echo " OUT = $OUT_PATH"
                                fi;

                                if [ -f "$OUT_PATH" ]; then
                                echo " exist, do nothing !";
                                else
                                echo " add to compress list !";
                                echo "ffmpeg -y -i "$myFile" -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 "$OUT_PATH" " >> $COMMANDS
                                fi;

                                else
                                echo -n " *** $SRC_FILE [NOT FLAC] : "
                                if [ -f "$CONV_PATH/$myFile" ]; then
                                echo " exist, do nothing !"
                                else
                                echo " copy."
                                cp "$myFile" "$CONV_PATH/$myFile"
                                fi
                                fi

                                done;

                                echo " And now, CONVERT THE FLAC's!!! "
                                sh run.sh







                                share|improve this answer












                                share|improve this answer



                                share|improve this answer










                                answered Aug 4 '17 at 11:21









                                LaurentLaurent

                                1




                                1





















                                    0














                                    To recursively convert in mp3 all the flac or wav files in nested folders, I used this command:



                                    find '~/Music/' -iname '*.flac' , -iname '*.wav' -exec bash -c 'D=$(dirname ""); B=$(basename ""); mkdir "$D/mp3/"; ffmpeg -i "" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame "$D/mp3/$B%.*.mp3"' ;


                                    It will create a folder named "mp3" inside the one with flac or wav files and, inside the mp3 folder, it will save relative mp3 files with a bitrate of 320kbps, without keeping the old file extension in the name.






                                    share|improve this answer





























                                      0














                                      To recursively convert in mp3 all the flac or wav files in nested folders, I used this command:



                                      find '~/Music/' -iname '*.flac' , -iname '*.wav' -exec bash -c 'D=$(dirname ""); B=$(basename ""); mkdir "$D/mp3/"; ffmpeg -i "" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame "$D/mp3/$B%.*.mp3"' ;


                                      It will create a folder named "mp3" inside the one with flac or wav files and, inside the mp3 folder, it will save relative mp3 files with a bitrate of 320kbps, without keeping the old file extension in the name.






                                      share|improve this answer



























                                        0












                                        0








                                        0







                                        To recursively convert in mp3 all the flac or wav files in nested folders, I used this command:



                                        find '~/Music/' -iname '*.flac' , -iname '*.wav' -exec bash -c 'D=$(dirname ""); B=$(basename ""); mkdir "$D/mp3/"; ffmpeg -i "" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame "$D/mp3/$B%.*.mp3"' ;


                                        It will create a folder named "mp3" inside the one with flac or wav files and, inside the mp3 folder, it will save relative mp3 files with a bitrate of 320kbps, without keeping the old file extension in the name.






                                        share|improve this answer















                                        To recursively convert in mp3 all the flac or wav files in nested folders, I used this command:



                                        find '~/Music/' -iname '*.flac' , -iname '*.wav' -exec bash -c 'D=$(dirname ""); B=$(basename ""); mkdir "$D/mp3/"; ffmpeg -i "" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame "$D/mp3/$B%.*.mp3"' ;


                                        It will create a folder named "mp3" inside the one with flac or wav files and, inside the mp3 folder, it will save relative mp3 files with a bitrate of 320kbps, without keeping the old file extension in the name.







                                        share|improve this answer














                                        share|improve this answer



                                        share|improve this answer








                                        edited Jun 2 '18 at 23:33

























                                        answered Jun 2 '18 at 23:18









                                        Riccardo VolpeRiccardo Volpe

                                        1013




                                        1013





















                                            0














                                            GNU Parallel is make for these kind of tasks:



                                            # change to the home directory
                                            cd ~/music
                                            # convert all *.flac files
                                            parallel ffmpeg -i -acodec libmp3lame ..mp3 ::: *.flac
                                            # (optional: check whether there are any errors printed on the terminal)
                                            sleep 60


                                            It will run the jobs in parallel (one job per cpu core) and make sure the output on the terminal is not mixed together.






                                            share|improve this answer



























                                              0














                                              GNU Parallel is make for these kind of tasks:



                                              # change to the home directory
                                              cd ~/music
                                              # convert all *.flac files
                                              parallel ffmpeg -i -acodec libmp3lame ..mp3 ::: *.flac
                                              # (optional: check whether there are any errors printed on the terminal)
                                              sleep 60


                                              It will run the jobs in parallel (one job per cpu core) and make sure the output on the terminal is not mixed together.






                                              share|improve this answer

























                                                0












                                                0








                                                0







                                                GNU Parallel is make for these kind of tasks:



                                                # change to the home directory
                                                cd ~/music
                                                # convert all *.flac files
                                                parallel ffmpeg -i -acodec libmp3lame ..mp3 ::: *.flac
                                                # (optional: check whether there are any errors printed on the terminal)
                                                sleep 60


                                                It will run the jobs in parallel (one job per cpu core) and make sure the output on the terminal is not mixed together.






                                                share|improve this answer













                                                GNU Parallel is make for these kind of tasks:



                                                # change to the home directory
                                                cd ~/music
                                                # convert all *.flac files
                                                parallel ffmpeg -i -acodec libmp3lame ..mp3 ::: *.flac
                                                # (optional: check whether there are any errors printed on the terminal)
                                                sleep 60


                                                It will run the jobs in parallel (one job per cpu core) and make sure the output on the terminal is not mixed together.







                                                share|improve this answer












                                                share|improve this answer



                                                share|improve this answer










                                                answered Jun 3 '18 at 8:36









                                                Ole TangeOle Tange

                                                12.9k1457107




                                                12.9k1457107





















                                                    0














                                                    The file name is "wav2mp3"



                                                    #!/bin/sh
                                                    # put the script to /usr/local/sbin
                                                    EXT_IN=$1
                                                    QUALITY=$2

                                                    if [ "$EXT_IN" = "" -o "$QUALITY" = "" ]; then
                                                    printf "Usage: wav2mp3 <in_file_ext> <quality> ne.g. wav2mp3 wav 2n"
                                                    exit 1
                                                    fi

                                                    #String delimeter
                                                    SAVEIFS=$IFS
                                                    IFS='
                                                    '
                                                    # List of the files in directory lower than current to array
                                                    FILES_LIST=`find . -type f -name "*.$EXT_IN"`
                                                    for FILE in $FILES_LIST; do
                                                    echo $FILE
                                                    PREFIX=`echo $FILE | awk -F . 'OFS="." $NF="" 1' | sed 's/.$//'`
                                                    echo $PREFIX
                                                    ffmpeg -i $FILE -codec:a libmp3lame -qscale:a $QUALITY $PREFIX.mp3
                                                    done





                                                    share|improve this answer








                                                    New contributor




                                                    DenisVS is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                                    Check out our Code of Conduct.




















                                                    • Consider using shellcheck.net. It has quite a few suggestions regarding your script.

                                                      – llogan
                                                      2 days ago















                                                    0














                                                    The file name is "wav2mp3"



                                                    #!/bin/sh
                                                    # put the script to /usr/local/sbin
                                                    EXT_IN=$1
                                                    QUALITY=$2

                                                    if [ "$EXT_IN" = "" -o "$QUALITY" = "" ]; then
                                                    printf "Usage: wav2mp3 <in_file_ext> <quality> ne.g. wav2mp3 wav 2n"
                                                    exit 1
                                                    fi

                                                    #String delimeter
                                                    SAVEIFS=$IFS
                                                    IFS='
                                                    '
                                                    # List of the files in directory lower than current to array
                                                    FILES_LIST=`find . -type f -name "*.$EXT_IN"`
                                                    for FILE in $FILES_LIST; do
                                                    echo $FILE
                                                    PREFIX=`echo $FILE | awk -F . 'OFS="." $NF="" 1' | sed 's/.$//'`
                                                    echo $PREFIX
                                                    ffmpeg -i $FILE -codec:a libmp3lame -qscale:a $QUALITY $PREFIX.mp3
                                                    done





                                                    share|improve this answer








                                                    New contributor




                                                    DenisVS is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                                    Check out our Code of Conduct.




















                                                    • Consider using shellcheck.net. It has quite a few suggestions regarding your script.

                                                      – llogan
                                                      2 days ago













                                                    0












                                                    0








                                                    0







                                                    The file name is "wav2mp3"



                                                    #!/bin/sh
                                                    # put the script to /usr/local/sbin
                                                    EXT_IN=$1
                                                    QUALITY=$2

                                                    if [ "$EXT_IN" = "" -o "$QUALITY" = "" ]; then
                                                    printf "Usage: wav2mp3 <in_file_ext> <quality> ne.g. wav2mp3 wav 2n"
                                                    exit 1
                                                    fi

                                                    #String delimeter
                                                    SAVEIFS=$IFS
                                                    IFS='
                                                    '
                                                    # List of the files in directory lower than current to array
                                                    FILES_LIST=`find . -type f -name "*.$EXT_IN"`
                                                    for FILE in $FILES_LIST; do
                                                    echo $FILE
                                                    PREFIX=`echo $FILE | awk -F . 'OFS="." $NF="" 1' | sed 's/.$//'`
                                                    echo $PREFIX
                                                    ffmpeg -i $FILE -codec:a libmp3lame -qscale:a $QUALITY $PREFIX.mp3
                                                    done





                                                    share|improve this answer








                                                    New contributor




                                                    DenisVS is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                                    Check out our Code of Conduct.










                                                    The file name is "wav2mp3"



                                                    #!/bin/sh
                                                    # put the script to /usr/local/sbin
                                                    EXT_IN=$1
                                                    QUALITY=$2

                                                    if [ "$EXT_IN" = "" -o "$QUALITY" = "" ]; then
                                                    printf "Usage: wav2mp3 <in_file_ext> <quality> ne.g. wav2mp3 wav 2n"
                                                    exit 1
                                                    fi

                                                    #String delimeter
                                                    SAVEIFS=$IFS
                                                    IFS='
                                                    '
                                                    # List of the files in directory lower than current to array
                                                    FILES_LIST=`find . -type f -name "*.$EXT_IN"`
                                                    for FILE in $FILES_LIST; do
                                                    echo $FILE
                                                    PREFIX=`echo $FILE | awk -F . 'OFS="." $NF="" 1' | sed 's/.$//'`
                                                    echo $PREFIX
                                                    ffmpeg -i $FILE -codec:a libmp3lame -qscale:a $QUALITY $PREFIX.mp3
                                                    done






                                                    share|improve this answer








                                                    New contributor




                                                    DenisVS is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                                    Check out our Code of Conduct.









                                                    share|improve this answer



                                                    share|improve this answer






                                                    New contributor




                                                    DenisVS is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                                    Check out our Code of Conduct.









                                                    answered 2 days ago









                                                    DenisVSDenisVS

                                                    1




                                                    1




                                                    New contributor




                                                    DenisVS is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                                    Check out our Code of Conduct.





                                                    New contributor





                                                    DenisVS is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                                    Check out our Code of Conduct.






                                                    DenisVS is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                                    Check out our Code of Conduct.












                                                    • Consider using shellcheck.net. It has quite a few suggestions regarding your script.

                                                      – llogan
                                                      2 days ago

















                                                    • Consider using shellcheck.net. It has quite a few suggestions regarding your script.

                                                      – llogan
                                                      2 days ago
















                                                    Consider using shellcheck.net. It has quite a few suggestions regarding your script.

                                                    – llogan
                                                    2 days ago





                                                    Consider using shellcheck.net. It has quite a few suggestions regarding your script.

                                                    – llogan
                                                    2 days ago











                                                    -1














                                                    for a in *.flac



                                                    do
                                                    OUTF=echo "$a" | sed s/.flac$/.mp3/g



                                                    ffmpeg -i "$a" -acodec libmp3lame "$OUTF"



                                                    done






                                                    share|improve this answer


















                                                    • 1





                                                      welcome to U&L, your answer hardly add anything to @Ketan accepted answer four years ago.

                                                      – Archemar
                                                      Dec 29 '17 at 8:45















                                                    -1














                                                    for a in *.flac



                                                    do
                                                    OUTF=echo "$a" | sed s/.flac$/.mp3/g



                                                    ffmpeg -i "$a" -acodec libmp3lame "$OUTF"



                                                    done






                                                    share|improve this answer


















                                                    • 1





                                                      welcome to U&L, your answer hardly add anything to @Ketan accepted answer four years ago.

                                                      – Archemar
                                                      Dec 29 '17 at 8:45













                                                    -1












                                                    -1








                                                    -1







                                                    for a in *.flac



                                                    do
                                                    OUTF=echo "$a" | sed s/.flac$/.mp3/g



                                                    ffmpeg -i "$a" -acodec libmp3lame "$OUTF"



                                                    done






                                                    share|improve this answer













                                                    for a in *.flac



                                                    do
                                                    OUTF=echo "$a" | sed s/.flac$/.mp3/g



                                                    ffmpeg -i "$a" -acodec libmp3lame "$OUTF"



                                                    done







                                                    share|improve this answer












                                                    share|improve this answer



                                                    share|improve this answer










                                                    answered Dec 29 '17 at 8:18









                                                    Peter McConnellPeter McConnell

                                                    1




                                                    1







                                                    • 1





                                                      welcome to U&L, your answer hardly add anything to @Ketan accepted answer four years ago.

                                                      – Archemar
                                                      Dec 29 '17 at 8:45












                                                    • 1





                                                      welcome to U&L, your answer hardly add anything to @Ketan accepted answer four years ago.

                                                      – Archemar
                                                      Dec 29 '17 at 8:45







                                                    1




                                                    1





                                                    welcome to U&L, your answer hardly add anything to @Ketan accepted answer four years ago.

                                                    – Archemar
                                                    Dec 29 '17 at 8:45





                                                    welcome to U&L, your answer hardly add anything to @Ketan accepted answer four years ago.

                                                    – Archemar
                                                    Dec 29 '17 at 8:45











                                                    -2














                                                    I realize this comes quite late, but for memory, see my script "batchaudiocvt" on sourceforge. It is a (quite large) shell script designed for efficient mass conversion of audio files, between many formats. In particular, it makes its best to convert the usual tags.






                                                    share|improve this answer























                                                    • This question is about how to handle the loop in the shell. The user already knows the command they want to use to do the conversion.

                                                      – G-Man
                                                      Oct 31 '18 at 23:51











                                                    • Welcome to Stack Exchange.  Are you Eric Dujardin?  If so, it would be good to use the contact form and select ‘‘I need to merge user profiles’’ to have your accounts merged.

                                                      – Scott
                                                      Nov 1 '18 at 2:19











                                                    • Sorry, I was just trying to help with the stated goal of converting the files. Anyway the provided script may be worth a read.

                                                      – Eric Dujardin
                                                      Nov 1 '18 at 8:18















                                                    -2














                                                    I realize this comes quite late, but for memory, see my script "batchaudiocvt" on sourceforge. It is a (quite large) shell script designed for efficient mass conversion of audio files, between many formats. In particular, it makes its best to convert the usual tags.






                                                    share|improve this answer























                                                    • This question is about how to handle the loop in the shell. The user already knows the command they want to use to do the conversion.

                                                      – G-Man
                                                      Oct 31 '18 at 23:51











                                                    • Welcome to Stack Exchange.  Are you Eric Dujardin?  If so, it would be good to use the contact form and select ‘‘I need to merge user profiles’’ to have your accounts merged.

                                                      – Scott
                                                      Nov 1 '18 at 2:19











                                                    • Sorry, I was just trying to help with the stated goal of converting the files. Anyway the provided script may be worth a read.

                                                      – Eric Dujardin
                                                      Nov 1 '18 at 8:18













                                                    -2












                                                    -2








                                                    -2







                                                    I realize this comes quite late, but for memory, see my script "batchaudiocvt" on sourceforge. It is a (quite large) shell script designed for efficient mass conversion of audio files, between many formats. In particular, it makes its best to convert the usual tags.






                                                    share|improve this answer













                                                    I realize this comes quite late, but for memory, see my script "batchaudiocvt" on sourceforge. It is a (quite large) shell script designed for efficient mass conversion of audio files, between many formats. In particular, it makes its best to convert the usual tags.







                                                    share|improve this answer












                                                    share|improve this answer



                                                    share|improve this answer










                                                    answered Oct 31 '18 at 22:35









                                                    Eric DujardinEric Dujardin

                                                    1




                                                    1












                                                    • This question is about how to handle the loop in the shell. The user already knows the command they want to use to do the conversion.

                                                      – G-Man
                                                      Oct 31 '18 at 23:51











                                                    • Welcome to Stack Exchange.  Are you Eric Dujardin?  If so, it would be good to use the contact form and select ‘‘I need to merge user profiles’’ to have your accounts merged.

                                                      – Scott
                                                      Nov 1 '18 at 2:19











                                                    • Sorry, I was just trying to help with the stated goal of converting the files. Anyway the provided script may be worth a read.

                                                      – Eric Dujardin
                                                      Nov 1 '18 at 8:18

















                                                    • This question is about how to handle the loop in the shell. The user already knows the command they want to use to do the conversion.

                                                      – G-Man
                                                      Oct 31 '18 at 23:51











                                                    • Welcome to Stack Exchange.  Are you Eric Dujardin?  If so, it would be good to use the contact form and select ‘‘I need to merge user profiles’’ to have your accounts merged.

                                                      – Scott
                                                      Nov 1 '18 at 2:19











                                                    • Sorry, I was just trying to help with the stated goal of converting the files. Anyway the provided script may be worth a read.

                                                      – Eric Dujardin
                                                      Nov 1 '18 at 8:18
















                                                    This question is about how to handle the loop in the shell. The user already knows the command they want to use to do the conversion.

                                                    – G-Man
                                                    Oct 31 '18 at 23:51





                                                    This question is about how to handle the loop in the shell. The user already knows the command they want to use to do the conversion.

                                                    – G-Man
                                                    Oct 31 '18 at 23:51













                                                    Welcome to Stack Exchange.  Are you Eric Dujardin?  If so, it would be good to use the contact form and select ‘‘I need to merge user profiles’’ to have your accounts merged.

                                                    – Scott
                                                    Nov 1 '18 at 2:19





                                                    Welcome to Stack Exchange.  Are you Eric Dujardin?  If so, it would be good to use the contact form and select ‘‘I need to merge user profiles’’ to have your accounts merged.

                                                    – Scott
                                                    Nov 1 '18 at 2:19













                                                    Sorry, I was just trying to help with the stated goal of converting the files. Anyway the provided script may be worth a read.

                                                    – Eric Dujardin
                                                    Nov 1 '18 at 8:18





                                                    Sorry, I was just trying to help with the stated goal of converting the files. Anyway the provided script may be worth a read.

                                                    – Eric Dujardin
                                                    Nov 1 '18 at 8:18

















                                                    draft saved

                                                    draft discarded
















































                                                    Thanks for contributing an answer to Unix & Linux Stack Exchange!


                                                    • Please be sure to answer the question. Provide details and share your research!

                                                    But avoid


                                                    • Asking for help, clarification, or responding to other answers.

                                                    • Making statements based on opinion; back them up with references or personal experience.

                                                    To learn more, see our tips on writing great answers.




                                                    draft saved


                                                    draft discarded














                                                    StackExchange.ready(
                                                    function ()
                                                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f114908%2fbash-script-to-convert-all-flac-to-mp3-with-ffmpeg%23new-answer', 'question_page');

                                                    );

                                                    Post as a guest















                                                    Required, but never shown





















































                                                    Required, but never shown














                                                    Required, but never shown












                                                    Required, but never shown







                                                    Required, but never shown

































                                                    Required, but never shown














                                                    Required, but never shown












                                                    Required, but never shown







                                                    Required, but never shown







                                                    Popular posts from this blog

                                                    getting Checkpoint VPN SSL Network Extender working in the command lineHow to connect to CheckPoint VPN on Ubuntu 18.04LTS?Will the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayVPN SSL Network Extender in FirefoxLinux Checkpoint SNX tool configuration issuesCheck Point - Connect under Linux - snx + OTPSNX VPN Ububuntu 18.XXUsing Checkpoint VPN SSL Network Extender CLI with certificateVPN with network manager (nm-applet) is not workingWill the Linux ( red-hat ) Open VPNC Client connect to checkpoint or nortel VPN gateways?VPN client for linux machine + support checkpoint gatewayImport VPN config files to NetworkManager from command lineTrouble connecting to VPN using network-manager, while command line worksStart a VPN connection with PPTP protocol on command linestarting a docker service daemon breaks the vpn networkCan't connect to vpn with Network-managerVPN SSL Network Extender in FirefoxUsing Checkpoint VPN SSL Network Extender CLI with certificate

                                                    대한민국 목차 국명 지리 역사 정치 국방 경제 사회 문화 국제 순위 관련 항목 각주 외부 링크 둘러보기 메뉴북위 37° 34′ 08″ 동경 126° 58′ 36″ / 북위 37.568889° 동경 126.976667°  / 37.568889; 126.976667ehThe Korean Repository문단을 편집문단을 편집추가해Clarkson PLC 사Report for Selected Countries and Subjects-Korea“Human Development Index and its components: P.198”“http://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EA%B5%AD%EA%B8%B0%EB%B2%95”"한국은 국제법상 한반도 유일 합법정부 아니다" - 오마이뉴스 모바일Report for Selected Countries and Subjects: South Korea격동의 역사와 함께한 조선일보 90년 : 조선일보 인수해 혁신시킨 신석우, 임시정부 때는 '대한민국' 국호(國號) 정해《우리가 몰랐던 우리 역사: 나라 이름의 비밀을 찾아가는 역사 여행》“남북 공식호칭 ‘남한’‘북한’으로 쓴다”“Corea 대 Korea, 누가 이긴 거야?”국내기후자료 - 한국[김대중 前 대통령 서거] 과감한 구조개혁 'DJ노믹스'로 최단기간 환란극복 :: 네이버 뉴스“이라크 "韓-쿠르드 유전개발 MOU 승인 안해"(종합)”“해외 우리국민 추방사례 43%가 일본”차기전차 K2'흑표'의 세계 최고 전력 분석, 쿠키뉴스 엄기영, 2007-03-02두산인프라, 헬기잡는 장갑차 'K21'...내년부터 공급, 고뉴스 이대준, 2008-10-30과거 내용 찾기mk 뉴스 - 구매력 기준으로 보면 한국 1인당 소득 3만弗과거 내용 찾기"The N-11: More Than an Acronym"Archived조선일보 최우석, 2008-11-01Global 500 2008: Countries - South Korea“몇년째 '시한폭탄'... 가계부채, 올해는 터질까”가구당 부채 5000만원 처음 넘어서“‘빚’으로 내몰리는 사회.. 위기의 가계대출”“[경제365] 공공부문 부채 급증…800조 육박”“"소득 양극화 다소 완화...불평등은 여전"”“공정사회·공생발전 한참 멀었네”iSuppli,08年2QのDRAMシェア・ランキングを発表(08/8/11)South Korea dominates shipbuilding industry | Stock Market News & Stocks to Watch from StraightStocks한국 자동차 생산, 3년 연속 세계 5위자동차수출 '현대-삼성 웃고 기아-대우-쌍용은 울고' 과거 내용 찾기동반성장위 창립 1주년 맞아Archived"중기적합 3개업종 합의 무시한 채 선정"李대통령, 사업 무분별 확장 소상공인 생계 위협 질타삼성-LG, 서민업종인 빵·분식사업 잇따라 철수상생은 뒷전…SSM ‘몸집 불리기’ 혈안Archived“경부고속도에 '아시안하이웨이' 표지판”'철의 실크로드' 앞서 '말(言)의 실크로드'부터, 프레시안 정창현, 2008-10-01“'서울 지하철은 안전한가?'”“서울시 “올해 안에 모든 지하철역 스크린도어 설치””“부산지하철 1,2호선 승강장 안전펜스 설치 완료”“전교조, 정부 노조 통계서 처음 빠져”“[Weekly BIZ] 도요타 '제로 이사회'가 리콜 사태 불러들였다”“S Korea slams high tuition costs”““정치가 여론 양극화 부채질… 합리주의 절실””“〈"`촛불집회'는 민주주의의 질적 변화 상징"〉”““촛불집회가 민주주의 왜곡 초래””“국민 65%, "한국 노사관계 대립적"”“한국 국가경쟁력 27위‥노사관계 '꼴찌'”“제대로 형성되지 않은 대한민국 이념지형”“[신년기획-갈등의 시대] 갈등지수 OECD 4위…사회적 손실 GDP 27% 무려 300조”“2012 총선-대선의 키워드는 '국민과 소통'”“한국 삶의 질 27위, 2000년과 2008년 연속 하위권 머물러”“[해피 코리아] 행복점수 68점…해외 평가선 '낙제점'”“한국 어린이·청소년 행복지수 3년 연속 OECD ‘꼴찌’”“한국 이혼율 OECD중 8위”“[통계청] 한국 이혼율 OECD 4위”“오피니언 [이렇게 생각한다] `부부의 날` 에 돌아본 이혼율 1위 한국”“Suicide Rates by Country, Global Health Observatory Data Repository.”“1. 또 다른 차별”“오피니언 [편집자에게] '왕따'와 '패거리 정치' 심리는 닮은꼴”“[미래한국리포트] 무한경쟁에 빠진 대한민국”“대학생 98% "외모가 경쟁력이라는 말 동의"”“특급호텔 웨딩·200만원대 유모차… "남보다 더…" 호화病, 고질병 됐다”“[스트레스 공화국] ① 경쟁사회, 스트레스 쌓인다”““매일 30여명 자살 한국, 의사보다 무속인에…””“"자살 부르는 '우울증', 환자 중 85% 치료 안 받아"”“정신병원을 가다”“대한민국도 ‘묻지마 범죄’,안전지대 아니다”“유엔 "학생 '성적 지향'에 따른 차별 금지하라"”“유엔아동권리위원회 보고서 및 번역본 원문”“고졸 성공스토리 담은 '제빵왕 김탁구' 드라마 나온다”“‘빛 좋은 개살구’ 고졸 취업…실습 대신 착취”원본 문서“정신건강, 사회적 편견부터 고쳐드립니다”‘소통’과 ‘행복’에 목 마른 사회가 잠들어 있던 ‘심리학’ 깨웠다“[포토] 사유리-곽금주 교수의 유쾌한 심리상담”“"올해 한국인 평균 영화관람횟수 세계 1위"(종합)”“[게임연중기획] 게임은 문화다-여가활동 1순위 게임”“영화속 ‘영어 지상주의’ …“왠지 씁쓸한데””“2월 `신문 부수 인증기관` 지정..방송법 후속작업”“무료신문 성장동력 ‘차별성’과 ‘갈등해소’”대한민국 국회 법률지식정보시스템"Pew Research Center's Religion & Public Life Project: South Korea"“amp;vwcd=MT_ZTITLE&path=인구·가구%20>%20인구총조사%20>%20인구부문%20>%20 총조사인구(2005)%20>%20전수부문&oper_YN=Y&item=&keyword=종교별%20인구& amp;lang_mode=kor&list_id= 2005년 통계청 인구 총조사”원본 문서“한국인이 좋아하는 취미와 운동 (2004-2009)”“한국인이 좋아하는 취미와 운동 (2004-2014)”Archived“한국, `부분적 언론자유국' 강등〈프리덤하우스〉”“국경없는기자회 "한국, 인터넷감시 대상국"”“한국, 조선산업 1위 유지(S. Korea Stays Top Shipbuilding Nation) RZD-Partner Portal”원본 문서“한국, 4년 만에 ‘선박건조 1위’”“옛 마산시,인터넷속도 세계 1위”“"한국 초고속 인터넷망 세계1위"”“인터넷·휴대폰 요금, 외국보다 훨씬 비싸”“한국 관세행정 6년 연속 세계 '1위'”“한국 교통사고 사망자 수 OECD 회원국 중 2위”“결핵 후진국' 한국, 환자가 급증한 이유는”“수술은 신중해야… 자칫하면 생명 위협”대한민국분류대한민국의 지도대한민국 정부대표 다국어포털대한민국 전자정부대한민국 국회한국방송공사about korea and information korea브리태니커 백과사전(한국편)론리플래닛의 정보(한국편)CIA의 세계 정보(한국편)마리암 부디아 (Mariam Budia),『한국: 하늘이 내린 한 폭의 그림』, 서울: 트랜스라틴 19호 (2012년 3월)대한민국ehehehehehehehehehehehehehehWorldCat132441370n791268020000 0001 2308 81034078029-6026373548cb11863345f(데이터)00573706ge128495

                                                    Cannot Extend partition with GParted The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) 2019 Community Moderator Election ResultsCan't increase partition size with GParted?GParted doesn't recognize the unallocated space after my current partitionWhat is the best way to add unallocated space located before to Ubuntu 12.04 partition with GParted live?I can't figure out how to extend my Arch home partition into free spaceGparted Linux Mint 18.1 issueTrying to extend but swap partition is showing as Unknown in Gparted, shows proper from fdiskRearrange partitions in gparted to extend a partitionUnable to extend partition even though unallocated space is next to it using GPartedAllocate free space to root partitiongparted: how to merge unallocated space with a partition