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

                                                    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

                                                    Marilyn Monroe Ny fiainany manokana | Jereo koa | Meny fitetezanafanitarana azy.