স্ক্রিপ্ট বাশ করুন সমস্ত * ফ্লাককে *। এমপি 3 এফএফএমপিগে রূপান্তর করতে?


28

আমি নির্দিষ্ট ফোল্ডারে সমস্ত * .ফ্ল্যাক *। এমপি 3 এ রূপান্তর করতে চাই।

এটি আমি চেষ্টা করেছি, কিন্তু কাজ করে না:

# 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

কিভাবে আমার লক্ষ্য পেতে?


3
আপনি কি "ফর লুপ" চেষ্টা করেছিলেন?
ড্যানিলা লাডনার

পছন্দ করেছেন ক্লু জন্য ধন্যবাদ।
কেভিন ডং

আমি একটি স্ক্রিপ্ট লিখেছি যা এটি সমান্তরালভাবে করে এবং ট্যাগগুলি অনুলিপি করে: http://tuxhelp.org/#flac-distiller

দুঃখিত আমি এটা ভুলে গেছি। ফাইলের নাম file.avi.mp3 হয়ে যাওয়ার পরে আপনি ব্যবহার করতে পারেন: "s / .avi // g" * .avi.mp3 অপসারণ .avi অপসারণ করতে।

1
কঠোর পরিশ্রমের পরে কম্পিউটার বিরতি দিন।
মেওমিউ

উত্তর:


37

এটা চেষ্টা কর:

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

1
এটি স্থানযুক্ত ফাইলগুলির সাথে কাজ করছে না। $(basename "${i/.flac}")স্পেসগুলি পরিচালনা করতে আমি কীভাবে সংশোধন করতে পারি ?
পিআরপি

1
@ পিপিআর forলুপের ঠিক আগে এই লাইনটি রাখার চেষ্টা করুন : আইএফএস = $ '\ n'
এমকেসি

6
আমি পরিবর্তন করে স্থান সমস্যা সমাধান $(basename "${i/.flac}").mp3করার জন্য "$(basename "${i/.flac}").mp3"(এটা প্রায় কোট নির্বাণ)
MalcolmOcean

50

একটি সাধারণ 1 লাইনার সমাধান: find -name "*.flac" -exec ffmpeg -i {} -acodec libmp3lame -ab 128k {}.mp3 \;

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

নোট করুন যে প্রদত্ত ডিরেক্টরিতে এটি পুনরাবৃত্তভাবে প্রয়োগ করা হবে। উদাহরণস্বরূপ, আপনি যদি এটি আপনার সঙ্গীত ফোল্ডার থেকে চালনা করেন তবে এটি সাবফোল্ডারগুলি থেকে সমস্ত ফ্ল্যাককে রূপান্তরিত করবে এবং এর পাশেই একটি এমপি 3 তৈরি করবে। লিঙ্কে দেখানো হয়েছে, আপনি সরাসরি ফ্ল্যাক এবং খোঁড়া ব্যবহার করে (যেমন ডাব্লু / ফ্ল্যাক পড়ুন, পঙ্গুতে পাইপ পড়ুন, একটি ফাইলের এমপি 3 আউটপুট) ব্যবহার করেও এফএফপিপে ছাড়াই এটি করতে পারেন।


-maxdepth 1পুনরাবৃত্তির সীমাবদ্ধ করতে আপনি এক্স টিয়ান এর উত্তরের মতো আমার মতামতটি ব্যবহার করতে পারেন ।

2
হ্যা, তুমি পারো. আপনি xargs থেকে ls পাইপযুক্ত বা লুপের জন্য একটি ব্যবহার করতে পারেন। আমি কেবল (সম্ভবত ভুল) এই ধারণাটি তৈরি করছি যে অপারেশনগুলির জন্য অপরিহার্য অনুসন্ধানগুলি আরও বেশি (যেমন আমার সংগীত লাইব্রেরি থেকে সমস্ত .ফ্ল্যাক পরিবর্তন করুন)।
লুইস ডায়মন্ড

16
এই আদেশটি দুর্দান্ত - তবে; আপনি * .flac.mp3 নামের ফাইলগুলি শেষ করেছেন। আপনার আদেশটি ব্যবহার করে, আমি এটি নিয়ে এসেছি ...find -name "*.flac" -exec bash -c 'ffmpeg -i "{}" -y -acodec libmp3lame -ab 128k "${0/.flac}.mp3"' {} \;
শেন

2
হ্যাঁ, আমি ব্লগে যেমন ব্যাখ্যা করেছি, আমি। এমপি 3 যুক্ত করার এই দিকটি পছন্দ করি কারণ এটি আমাকে বলে যে এই ফাইলগুলি একটি ক্ষতিহীন উত্স থেকে এসেছে, যা আমার হার্ড ড্রাইভের কোথাও পাওয়া উচিত।
লুইস ডায়মন্ড

@ শানে মন্তব্য আমার পক্ষে কাজ করেছে।
চৌদ্দ ওয়াকাস

8

আপনার যদি ফাইলের নামগুলিতে কিছু সাদা জায়গা থাকে:

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

আমার এমপি 4 এবং ওয়াভ ফাইলগুলির মিশ্রণ সহ একটি ফোল্ডার রয়েছে। আমি কীভাবে তাদের সমস্তকে এমপি 3 তে রূপান্তর করব? ধন্যবাদ.
কেরাজী আর

2

আমি এখানে যা কিছু পেয়েছি (এবং সম্ভবত অন্য কোনও সাইটে) নিয়েছি এবং একটি ছোট সরঞ্জাম তৈরি করেছি যাতে কেবল পুনরাবৃত্তভাবে ফ্ল্যাকের এমপি 3 তৈরি করা যায়নি, তবে বহুবিধ সমর্থন সহ এগুলি অন্যত্র তৈরি করার জন্য আপেক্ষিক পথগুলি সংরক্ষণ করা হয়েছে।

ওহ, এবং হ্যাঁ, আমি দেখতে পাচ্ছি, আমি সে ক্ষেত্রে ffmpeg ব্যবহার করি নি, কারণ আমার ওএসএমসি ffmpeg এর জন্য প্যাকেজ সরবরাহ করে নি, কেবল অ্যাভকনভই, তবে যেহেতু আপনি ইতিমধ্যে এখানে আছেন, আমি অনুমান করি যে এটি "মূলত" একই - কমপক্ষে সবচেয়ে গুরুত্বপূর্ণ অংশের জন্য। "Avconv" কমান্ডটি কেবল "ffmpeg" দিয়ে প্রতিস্থাপন করুন। আমার প্রথম রানগুলি ffmpeg বিন এবং ঠিক একই বিকল্পগুলির সাথে ছিল same

আমি কোনও উপায়ে কোনও ব্যাশ হ্যাকার নই, তবে প্রদত্ত দাবিগুলির সাথে আমার প্রথম ব্যাশস্ক্রিপ্ট হিসাবে এটি পরিচালনা করেছি, এবং সম্ভবত কেউ উপকৃত হবে। আমি আপনার পক্ষ থেকে যে কোনও পরামর্শের জন্য উন্মুক্ত, তবে এখনও পর্যন্ত এটি আমার পক্ষে কার্যকর।

আমার প্রতিটি স্ক্রিপ্টের জন্য একটি করে 4 টি দৃষ্টান্ত স্পিন করতে আমার স্ক্রিপ্টটি হ'ল:

#!/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"

এবং এর মতো কর্মী লিপি:

#!/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

যা https://github.com/erdnuesse/flac-to-mp3 এ পাওয়া যাবে

শুভেচ্ছা, কে


শুভ জাহাজে, ভাল প্রচেষ্টা। +1
অ্যালেক্স স্ট্রিজি

1

আমি অ্যাভকনভ ব্যবহার করে @ কেটনের উত্তরে কাজ করেছি, যেহেতু ffmpeg এখানে ভাল কাজ করে না।

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

এটি flacএকটি ফোল্ডারে থাকা ফাইলগুলিকে ফাইলগুলিতে রূপান্তর করে mp3এবং তারপরে একটি বিদ্যমান "এমপি 3" ফোল্ডারে স্থানান্তরিত করে। "Original_name.flac.mp3" মডেলটিতে ফাইলগুলির নাম দেওয়া হবে



1

GNU সমান্তরাল এই ধরণের কাজের জন্য তৈরি:

# 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

এটি সমান্তরালভাবে (সিপিইউ কোর প্রতি এক কাজ) কাজগুলি পরিচালনা করবে এবং নিশ্চিত করবে যে টার্মিনালের আউটপুট একসাথে মিশে না।

আরও অধ্যয়নটি ১ + ২ পড়ার 15 মিনিট ব্যয় করতে: https://zenodo.org/record/1146014


এটি আকর্ষণীয় দেখায়। আপনি কি {.}.mp3 :::নির্মাণের কাজটি ব্যাখ্যা করতে পারেন? বা ম্যানুয়াল বিভাগটি ব্যাখ্যা করে যা এটি ব্যাখ্যা করে?
jottr

0

সমান্তরাল এফটিডব্লু (আপনার একাধিক কোর রয়েছে সন্দেহ নেই - কেন সেগুলি ব্যবহার করবেন না?):

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


0

উদাহরণস্বরূপ, যদি আপনার একাধিক এভিআই ফাইল থাকে:

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

0

যদি এটি সহায়তা করতে পারে .... আমি এটি করার জন্য একটি ছোট বাশ স্ক্রিপ্ট লিখেছি .... আপনার ffmpeg / ফ্ল্যাক ইনস্টল করা দরকার।

কিভাবে এটা কাজ করে:

এটি 2 টি আর্গুমেন্ট লাগে:

  1. আপনার সঙ্গীত গ্রন্থাগারের ফোল্ডার (ফ্ল্যাক / ওজিজি / এমপি 3) ...
  2. গন্তব্য ফোল্ডার (আপনার আগে এটি তৈরি করা দরকার)।

এটি উত্পাদন:

  • গন্তব্য ফোল্ডারে উত্স ফোল্ডার থেকে একটি অনুলিপি, সহ:
    • নন ফ্ল্যাক ফাইলগুলিতে অনুলিপি করা হয়েছে।
    • ফ্ল্যাক ফাইলগুলি এমপি 3 এ রূপান্তরিত হয়েছে (ভিবিআর উচ্চ মানের)
  • ফ্ল্যাক ফাইলগুলি রূপান্তর করতে কমান্ড সহ একটি রান.শ ফাইল (এই স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে কার্যকর করা হবে)।

#!/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

0

পুনরাবৃত্তভাবে নেস্টেড ফোল্ডারে সমস্ত ফ্ল্যাক বা ওয়াভ ফাইলগুলিকে এমপি 3 এ রূপান্তর করতে, আমি এই আদেশটি ব্যবহার করেছি:

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"' \;

এটি ফ্ল্যাক বা ওয়াভ ফাইলগুলির সাথে একটির মধ্যে "এমপি 3" নামে একটি ফোল্ডার তৈরি করবে এবং এমপি 3 ফোল্ডারের ভিতরে এটি পুরানো ফাইল এক্সটেনশনটিকে নাম না রেখে 320 কেবিপিএস বিটরেট সহ সম্পর্কিত এমপি 3 ফাইলগুলি সংরক্ষণ করবে।


0

ফাইলটির নাম "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 2\n"
    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

শেলচেক.net ব্যবহার করার কথা বিবেচনা করুন। এটিতে আপনার স্ক্রিপ্ট সম্পর্কিত বেশ কয়েকটি পরামর্শ রয়েছে।
লোগান

-1

এক জন্য * .ফ্ল্যাক

OUTF = করুনecho "$a" | sed s/\.flac$/.mp3/g

ffmpeg -i "$ a" -কোডেক libmp3lame "$ OUTF"

সম্পন্ন


2
ইউ অ্যান্ড এল-এ আপনাকে স্বাগতম, আপনার উত্তরটি চার বছর আগে @ কেতন গৃহীত উত্তরগুলিতে খুব কমই যুক্ত করুন।
আর্চেমার

-2

আমি বুঝতে পেরেছি এটি বেশ দেরিতে এসেছে তবে স্মৃতির জন্য, সোর্সফোরেজে আমার স্ক্রিপ্ট "বাটচাডিয়োভিটি" দেখুন। এটি একটি (বেশ বড়) শেল স্ক্রিপ্ট যা অনেকগুলি ফর্ম্যাটের মধ্যে অডিও ফাইলগুলির দক্ষ ভর রূপান্তরকরণের জন্য ডিজাইন করা হয়েছে। বিশেষত, এটি সাধারণ ট্যাগগুলিকে রূপান্তর করতে সর্বোত্তম করে তোলে।


এই প্রশ্নটি কীভাবে শেলের লুপটি পরিচালনা করবেন সে সম্পর্কে । রূপান্তরটি করতে তারা যে কমান্ডটি ব্যবহার করতে চায় তা ব্যবহারকারী ইতিমধ্যে জানে।
জি-ম্যান

স্ট্যাক এক্সচেঞ্জে আপনাকে স্বাগতম । আপনি কি এরিক দুজার্ডিন ? যদি তা হয় তবে যোগাযোগের ফর্মটি ব্যবহার করা ভাল হবে এবং আপনার অ্যাকাউন্টগুলিকে একত্রীকরণের জন্য '' আমাকে ব্যবহারকারীর প্রোফাইলগুলি মার্জ করতে হবে '' নির্বাচন করা উচিত।
স্কট

দুঃখিত, আমি ফাইলগুলি রূপান্তর করার বর্ণিত লক্ষ্যটি নিয়ে সাহায্য করার চেষ্টা করছিলাম। যাইহোক প্রদত্ত স্ক্রিপ্টটি পড়ার মতো হতে পারে।
এরিক ডুজার্ডিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.