انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => راهنماها، نکات و ترفندها => نویسنده: Farhaad 1992 در 06 خرداد 1397، 05:08 ب‌ظ

عنوان: (حل شد) نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: Farhaad 1992 در 06 خرداد 1397، 05:08 ب‌ظ
من تعداد زیادی فایل صوتی محتوی موسیقی دارم در فرمت MP3 و تعداد بسیار کمی در فرمت FLAC، از چند سال قبل در نظر داشتم آنها را به فرمت پیشرفته و باکیفیت opus تبدیل کنم به خاطر انحصاری بودن MP3 ولی خیلی پیگیرش نشدم چون پخش فرمت های انحصاری کار خیلی مشکلی نیست ولی الان به فضای خالی روی هارد دیسک احتیاج پیدا کرده ام و نیاز دارم تا فایل های کم اهمیت را حذف و حجم فایل های صوتی را که چند ده گیگ هستند کاهش بدم، نیاز به فضای خالی هارد دیسک انگیزه بسیار با اهمیت تری هستش تا آزاد نبودن MP3.

یک پکیج هست به نام opus-tools که یکی از ابزارهاش opusenc نام دارد که توانایی تبدیل فرمت های Wave, AIFF, FLAC, Ogg/FLAC, یا raw PCM به فرمت اوپاس را دارد، من چند تا فایل FLAC در ژانرهای مختلف که اصوات زیادی هم داشتند را بدون تعیین هیچ آپشنی با آن تبدیل کردم و خروجی با تنظیمات پیش فرض، کیفیت بسیار خوب و معادل همان فایل FLAC را داشت، لااقل گوش های من که هیچ تفاوتی احساس نکرد، در حالیکه حجم فایل به طور چشمگیری کاهش یافت، برای همین تصمیم دارم تمام فایل های صوتی خودم را به این فرمت پیشرفته و کاملا آزاد تبدیل کنم، به منظور حفظ کیفیت لازم است فایل ها در یک فرمت فشرده ابتدا به یک فرمت غیرفشرده یا همان بدون اتلاف تبدیل شوند و سپس به یک فرمت فشرده دیگر تبدیل شوند، من فرمت FLAC را انتخاب کردم چون برخلاف Wave از فراداده پشتیبانی میکند و همچنین تلاش من برای تبدیل چند فایل در فرمت Wave به فرمت اوپاس با ابزار opusenc با ارور زیر مواجه شد:

ERROR: Unsupported WAV sample size

ولی هیچ مشکلی با FLAC نبود.

ابزار opusenc به این صورت کار میکنه:

opusenc input.wav output.opus

یعنی حتما لازمه نام فایل خروجی ذکر بشه، خودش به طور اتوماتیک پردازش نمیکنه، مشکل من هم همینه، تعداد فایل ها بسیار زیاد است و نمیشه برای هر فایل این کار را دستی انجام داد، من از اسکریپ نویسی چیزی نمیدونم، وب را با عبارت linux output name as input name جستجو کردم نتایج زیادی اومد ولی سردر نیاوردم چون با یک ابزاری مرتبط بود جواب ها، برای همین اینجا مطرح کردم تا جواب بهتر و دقیق تری بگیرم و هم موضوع تبدیل فایل های صوتی به عنوان یک راه موثر برای کاهش فضای هارد دیسک را مطرح کرده باشم.

=== قدم اول ===
من ابتدا نیاز دارم تا بتونم فایل هایی با پسوند FLAC را با ابزار مذکور به اوپاس تبدیل کنم و به یک اسکریپت نیاز دارم تا نام ورودی را به عنوان نام خروجی برگرداند ولی با یک تغییر کوچک، اکثر فایل های من اینطور نام گذاری شده اند:

01 - title.extension

ولی میخوام به این شکل تغییر کنند:

01. title.extension

اشخاصی که با پوسته یونیکس Bash آشنا هستند لطفا راهنمایی کنند و اگر میشه لطفا چند سینتاکس مختلف ارائه کنید.

=== قدم دوم ===
برای فایل های MP3 لازمه اونها رو با یک ابزار دیگر مثلا sox به FLAC تبدیل کنم و سپس پروسه "قدم اول" در ادامه آن انجام شود، هر وقت قدم اول انجام شد بعدا این قدم را دنبال میکنیم.

=== قدم سوم ===
در هر فولدر پس از انجام قدم اول و دوم نیاز به حذف فایل های FLAC هستش.

------------------------------------
پیشاپیش از راهنمایی شما سپاس گذاری میکنم. نتایج این تاپیک در یک تاپیک جداگانه با عنوان "تبدیل فایل های صوتی با حفظ کیفیت به منظور کاهش فضای دیسک" منعکس خواهد شد.

27 می 2018، فرهاد محمدی مجد

=-=-=-=

ویرایش: اصلاح عنوان
عنوان: پاسخ : چگونگی اختصاص نام ورودی به عنوان نام خروجی؟
ارسال شده توسط: Silvio Dante در 06 خرداد 1397، 11:32 ب‌ظ
فکر کنم برای این کار این اسکریپت بتونه کمک‌تون کنه. (قدم اول) همچنین توضیح هر خط رو هم به صورت کامنت فارسی نوشتم. 
چون گفتین فقط میخواین فایل‌های FLAC رو تبدیل کنین این رو هم برای فایلای FLAC نوشتم.
#!/bin/bash
IFS=$'\n'

# جمع آوری نام فایل‌های شما تحت یک لیست
list=`ls -1 directory/*.FLAC`

# دخیره‌ی نام فایل‌های شما در یک فایل
ls -1 directory/*.FLAC > /tmp/musicNames

# تغییر تمام - ها به نقطه .
sed -i 's/-/\./g' /tmp/musicNames

# حذف کردن پسوند
sed -i 's/FLAC//g' /tmp/musicNames

# دخیره‌ی نام جدید فایل ها در یک متغییر
newNames=`cat /tmp/musicNames`

# ساخت یک آرایه از نام‌های جدید
arr=($newNames)

# شمارنده برای فراخوانی آیتم‌های درون آرایه
counter=1

# یک حلقه برای انجام کار تبدیل
for i in $list; do
    # تبدیل (طبق دستوری که خودتون گفتین)
    opusenc "$i" "${arr[$counter]}.opus"

    # اضافه کردن شمارنده
    ((counter++))
done

در مورد قدم دوم باید بگم که نمی‌دونم چجوری میخواین mp3 رو به FLAC تبدیل کنین وگرنه اسکریپت اونم براتون می‌نوشتم، یا به همین اسکریپت اضافه می‌کردم که با یه آرگومان اون کار رو انجام بده.

برای قدم سوم هم می‌تونین اسکریپت بالا رو قسمت حلقه‌ش رو اینجوری بزارین:
# یک حلقه برای انجام کار تبدیل
for i in $list; do
    # تبدیل (طبق دستوری که خودتون گفتین)
    opusenc "$i" "${arr[$counter]}.opus"

    # حذف فایل قدیمی
    rm $i
   
    # اضافه کردن شمارنده
    ((counter++))
done

اما دلیل این‌که توی اون مرحله‌ی اول نذاشتم اینه که ممکنه اسکریپت درست کار نکنه و بش مثل پایتون نیست که اگر اسکریپت یه جاش درست کار نکرد ادامه‌ش رو اجرا نکنه و ممکن بود فایل‌هاتون بدون تبدیل شدن پاک بشه.
برای تست می‌تونین حلقه‌ی مرحله‌ی اول رو با این چیزی که الان نوشتم جایگزین کنین و چند فایل رو کپی کنین توی یه پوشه و اسکریپت رو روی اون پوشه امتحان کنین که اگه درست کار نکرد کل فایل‌هاتون رو از دست ندین.
عنوان: پاسخ : چگونگی اختصاص نام ورودی به عنوان نام خروجی؟
ارسال شده توسط: علی رزم دیده در 07 خرداد 1397، 12:36 ق‌ظ
با سلام

برای قسمت اول می تونین از این اسکریپت استفاده کنین :
#!/bin/bash
for file in $1/*.flac ; do
    newname=`sed 's/ - /. /g' <<< $file`
    opusenc "$file" "${newname%.*}".opus
done
نحوه ی اجراش هم این طوریه که شما آدرس مسیری که فایل های flac توش هستن رو به عنوان آرگومان بهش می دین و خروجی .opus توی همون مسیر ساخته می شن برای مثال :
./script /home/asus/Desktop/Music
برای قسمت دوم می تونین از این اسکریپت استفاده کنین که فایل با اسم اصلیش و با پسوند .flac ساخته می شه:
#!/bin/bash
for file in $1/*.mp3 ; do
    ffmpeg -i "$file" "${file%.*}".flac
done
نحوه ی اجراش هم مشابه اسکریپت قبلی هستش :
./script /home/asus/Desktop/Music
و برای قسمت آخر هم می تونین خیلی راحت از این دستور استفاده کنین (دلیل اینکه این دستور رو جداگانه نوشتم و تو اسکریپت قرار ندادم اینه که شما صبر کنین تا کل عملیات های قبلی انجام بشه و بعد از اینکه از صحت خروجی مطمئن شدین فایل های اصلی رو پاک کنین):
rm /path/of/your/music/*.flac
عنوان: پاسخ : راهنمایی برای نوشتن اسکریپت برای تبدیل فایل های صوتی
ارسال شده توسط: Farhaad 1992 در 07 خرداد 1397، 01:49 ب‌ظ
ممنون از راهنمایی

@Silvio Dante, اسکریپت شما خیلی پیچیدست، لطفا تا جای ممکن آنها را ساده و کوتاه بنویسید.

@علی رزم دیده, مثل اینکه بهتره با قدم دوم شروع کنم، میخواستم با sox امتحان کنم ولی همین ffmpeg برای تبدیل MP3 به FLAC خوبه.

من به یک اسکریپت نیاز دارم برای تبدیل فایل های MP3 و OGG به FLAC با استفاده از ffmpeg و لازمه هر فایلی غیر از اینهارو نادیده بگیره چون توی فولدر آلبوم ها معمولا فایل های تصویر و نوشته و کتاب هم هستش.

همچنین لازمه در صورت موفق بودن تبدیل، فایل های ورودی را حذف کنه.

چطوری میشه تعیین کرد روی فولدرهایی که با حرف A آغاز میشوند در ابتدا روی 5 فولدر اولی کار کنه؟
عنوان: پاسخ : راهنمایی برای نوشتن اسکریپت برای تبدیل فایل های صوتی
ارسال شده توسط: علی رزم دیده در 07 خرداد 1397، 04:19 ب‌ظ
@علی رزم دیده, مثل اینکه بهتره با قدم دوم شروع کنم، میخواستم با sox امتحان کنم ولی همین ffmpeg برای تبدیل MP3 به FLAC خوبه.
بله ffmpeg بهتر هستش و امکانات بیشتری رو هم در اختیارتون می ذاره

من به یک اسکریپت نیاز دارم برای تبدیل فایل های MP3 و OGG به FLAC با استفاده از ffmpeg و لازمه هر فایلی غیر از اینهارو نادیده بگیره چون توی فولدر آلبوم ها معمولا فایل های تصویر و نوشته و کتاب هم هستش.
بله ، اسکریپتی که من نوشته بودم بقیه رو نادیده می گرفت و فقط mp3 ها رو که مدنظر شما بودش رو تبدیل می کرد ولی چون حالا شما ogg رو هم اضافه کردین لازمه یه تغییر کوچیک بدم :
#!/bin/bash
for file in $1/{*.mp3,*.ogg} ; do
    ffmpeg -i "$file" "${file%.*}".flac
done

همچنین لازمه در صورت موفق بودن تبدیل، فایل های ورودی را حذف کنه.
باز هم توصیه ی من اینه که بعد اجرای اسکریپت خودتون چک کنین و اگه همه چی اوکی بودش دستی پاکشون کنین :
rm /path/of/your/music/{*.mp3,*.ogg}
ولی اگه خیلی اصرار دارین که بعد هر تبدیل فایل اصلی پاک بشه می تونین از این اسکریپت استفاده کنین :
#!/bin/bash
for file in $1/{*.mp3,*.ogg} ; do
    ffmpeg -i "$file" "${file%.*}".flac && rm "$file"
done
به دلیل وجود && ، این دستور ، قسمت دوم رو تنها در صورتی اجرا می کنه که قسمت اول بدون مشکل انجام بشه. پس در صورت موفقیت آمیز بودن تبدیل ، فایل اصلی پاک می شه.

حالا چرا من اصرار می کنم خودتون دستی این کار رو انجام بدین ؟ دلیلش اینه که شاید از نظر ffmpeg خطایی وجود نداشته باشه و تبدیل با موفقیت انجام بشه ولی از نظر شما خروجی ، خروجی مطلوبی نباشه (از نظر کیفیت و ...). واس همون اصرار دارم که خودتون دستی این کار رو بکنین.

چطوری میشه تعیین کرد روی فولدرهایی که با حرف A آغاز میشوند در ابتدا روی 5 فولدر اولی کار کنه؟
این قسمت از صحبتتون رو متوجه نشدم کدوم 5 فولدر اولی ؟
همون طور که خودتون می دونین ما مفهمومی به لحاظ فولدر اولی نداریم.
اول از چه لحاظی مد نظرتون هستش حروف الفبا ؟ ترتیب عددی ؟
عنوان: پاسخ : چگونگی اختصاص نام ورودی به عنوان نام خروجی؟
ارسال شده توسط: Farhaad 1992 در 08 خرداد 1397، 06:13 ب‌ظ
یک برنامه هست به نام GNOME SoundConverter که همه این چیزهایی که من اینجا خواستم را داره، ولی متاسفانه نسخه ارائه شده این برنامه در دبیان 9 دارای یک باگ است و نمیتواند خروجی اوپاس تولید کند:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=834598

برای همین این تاپیک را زدم، بقیه فرمت ها را بدون مشکل انجام میدهد.

با سلام

برای قسمت اول می تونین از این اسکریپت استفاده کنین :
#!/bin/bash
for file in $1/*.flac ; do
    newname=`sed 's/ - /. /g' <<< $file`
    opusenc "$file" "${newname%.*}".opus
done
نحوه ی اجراش هم این طوریه که شما آدرس مسیری که فایل های flac توش هستن رو به عنوان آرگومان بهش می دین و خروجی .opus توی همون مسیر ساخته می شن برای مثال :
./script /home/asus/Desktop/Music
.....

و برای قسمت آخر هم می تونین خیلی راحت از این دستور استفاده کنین (دلیل اینکه این دستور رو جداگانه نوشتم و تو اسکریپت قرار ندادم اینه که شما صبر کنین تا کل عملیات های قبلی انجام بشه و بعد از اینکه از صحت خروجی مطمئن شدین فایل های اصلی رو پاک کنین):
rm /path/of/your/music/*.flac
این اسکریپت مرحله 1 را اجرا کردم، درست کار کرد ولی باید حتما به دایرکتوری مورد نظر برم و اسکریپت را به این صورت اجرا کنم:

/path/to/script_location/./script .
اگر مسیر یک دایرکتوری را به عنوان آرگومان بهش بدم این ارور را میدهد:

No such file or directory

چندین بار امتحان کردم.

برای مرحله دوم از برنامه GNOME SoundConverter استفاده کردم و خیلی راحت و سریع کار تبدیل فایل ها، تغییر نام و حذف فایل های ورودی را انجام داد، البته فردا اسکریپت مرحله دوم را هم تست خواهم کرد.
عنوان: پاسخ : نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: علی رزم دیده در 08 خرداد 1397، 06:27 ب‌ظ
خوشحالم که مشکلتون حل شد
فقط یه مطلب اینکه لزومی بر اجرای اسکریپت تو اون مسیر نیستش ...

فک کنم شما اینو این طوری اجراش می کردین :
./script /home/asus/Desktop/Music/ولی باید این طوری اجراش کنین :
./script /home/asus/Desktop/Music
ویرایش :
اگه آرگومان رو مشابه دستور اول می دین ، می تونین از این اسکریپت استفاده کنین :

#!/bin/bash
for file in $1*.flac ; do
    newname=`sed 's/ - /. /g' <<< $file`
    opusenc "$file" "${newname%.*}".opus
done
عنوان: پاسخ : راهنمایی برای نوشتن اسکریپت برای تبدیل فایل های صوتی
ارسال شده توسط: Farhaad 1992 در 08 خرداد 1397، 06:55 ب‌ظ
.....
این قسمت از صحبتتون رو متوجه نشدم کدوم 5 فولدر اولی ؟
همون طور که خودتون می دونین ما مفهمومی به لحاظ فولدر اولی نداریم.
اول از چه لحاظی مد نظرتون هستش حروف الفبا ؟ ترتیب عددی ؟
منظورم 5 فولدر نخست بر اساس الفبا بود، ولی فراموشش کنید، همینطوری دستی بهش آدرس میدم، فقط لازمه اسکریپت مرحله یک و دو طوری اجرا بشه که زیر فولدرها را خودش شناسایی کنه، مثلا:

./scrept artist1/** artist2/** artist3/** artist4/** artist5/**
فولدر والد نام هنرمند است و در آن حداقل یک فولدر آلبوم قرار دارد، آدرس دهی تک-تک همه آلبوم ها بسیار زمان میگیره.
عنوان: پاسخ : نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: علی رزم دیده در 08 خرداد 1397، 07:39 ب‌ظ
اگه اشتباه نکنم منظورتون اینه که هم می خواین اسکریپت ، چند آرگومان رو به صورت هم زمان بگیره و هم می خواین بعد گرفتن آرگومان ها ساب فولدرها رو هم چک کنه.

برای این دو منظور ، می تونین از این دو اسکریپت استفاده کنین :

برای اسکریپت اول (تبدیل .flac به opus. و تغییر نام در صورت نیاز) :
#!/bin/bash
for dir in `find $@ -type d` ; do
    for file in $dir/*.flac ; do
        newname=`sed 's/ - /. /g' <<< $file`
        opusenc "$file" "${newname%.*}".opus
    done
done

برای اسکریپت دوم (تبدیل فایل های .mp3 و .ogg به .flac) :
#!/bin/bash
for dir in `find $@ -type d` ; do
    for file in $dir/*.{mp3,ogg} ; do
        ffmpeg -i "$file" "${file%.*}".flac && rm "$file"
    done
done

دقت کنین که اسکریپت دوم ، فایل های اولیه رو در صورت موفقیت آمیز بودن تبدیل پاک می کنه اگه نمی خواین این اتفاق بیوفته اون قسمت && rm "$file رو پاک کنین.

نحوه ی اجراش هم به این صورت هستش (دیگه وارد کردن یا نکردن / تاثیری در روند اجرای اسکریپت نداره در ضمن تعداد آرگومان ها هم دلخواه هستش) :
./script /path/of/artist1 /path/of/artist2 ... /path/of/artistn
عنوان: پاسخ : نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: Farhaad 1992 در 09 خرداد 1397، 06:37 ب‌ظ
خبر خوب اینه که این دو اسکریپت آخری به خوبی کار میکنند
خبر بد اینه که هنوز با آدرس دهی مسیر فولدر ها به عنوان آرگومان مشکل دارند ولی فهمیدم مشکل از کجاست، مشکل به خاطر وجود اسپیس (فاصله) در نام فولدرها هستش، البته من همیشه با "" و یا زدن کلید تب و کامل شدن خودکار نام فولدر و قرارگرفتن \ قبل اسپیس ها، اسکریپت ها را اجرا میکردم ولی مشکل باز هم هستش.

من میتونم به راحتی تمام فولدرها را با GNOME Files انتخاب کنم و با استفاده از قابلیت bulk rename فضاها (اسپیس) را به زیرخط (ـ) تبدیل کنم، در اینصورت مشکل حل خواهد شد ولی اگر شما اسکریپت را اصلاح کنید تا این مشکل را نداشته باشد ممنون خواهم شد، البته اگر کار سخت و زمانبری هستش ولش کنید.

عبارت file name underline space را در وب جستجو کردم و نتایج جالبی داشت، توصیه شده از اسپیس در نام فایل ها استفاده نشود.
عنوان: پاسخ : نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: علی رزم دیده در 10 خرداد 1397، 12:35 ق‌ظ
خواهش می کنم دوست عزیز

این اسکریپت ها رو یه تستی بکنین به احتمال زیاد مشکلتون حل بشه.

اسکریپت اولی :
#!/bin/bash
IFS=$'\n'
for dir in `find $@ -type d` ; do
    for file in "$dir"/*.flac ; do
        newname=`sed 's/ - /. /g' <<< "$file"`
        opusenc "$file" "${newname%.*}".opus
    done
done

اسکریپت دوم :
#!/bin/bash
IFS=$'\n'
for dir in `find $@ -type d` ; do
    for file in "$dir"/*.{mp3,ogg} ; do
        ffmpeg -i "$file" "${file%.*}".flac && rm "$file"
    done
done
عنوان: پاسخ : نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: سید وحید رضا برهانی در 10 خرداد 1397، 05:42 ق‌ظ
سلام
می دونم آف تاپیک محسوب می شه ولی با اینحال چرا با خود ffmpeg مستقیم به opus تبدیل نمی کنی؟ راحت تره.
عنوان: پاسخ : نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: Farhaad 1992 در 10 خرداد 1397، 10:56 ق‌ظ
این دو اسکریپت آخری را امروز تست خواهم کرد، لطفا همیشه آپشن -v را به فرمان rm اضافه کنید و همیشه فرمان rm را هم برای اسکریپت تبدیل flac به اوپاس اضافه کنید.

اگر بتونید اسکریپت ها را طوری بنویسید که من بهش آدرس فولدر یک هنرمند را بدم و اسکریپت فرمان ها را روی آن فولدر و 4 فولدر بعدی اجرا کنه خیلی خوب خواهد شد، یعنی در جمع 5 فولدر، من الان برای تبدیل فایل های فشرده به flac با برنامه GNOME SoundConverter همیشه 5 تا فولدر انتخاب میکنم و بعد که تبدیل از flac به اوپاس با اسکریپت شما تموم شد میرم سراغ 5 فولدر بعدی.

سلام
می دونم آف تاپیک محسوب می شه ولی با اینحال چرا با خود ffmpeg مستقیم به opus تبدیل نمی کنی؟ راحت تره.
سلام، حرف شما آف-تاپیک نیست.

تبدیل مستقیم یک فرمت صوتی فشرده به یک فرمت فشرده دیگر با افت کیفیت همراه خواهد بود، لازمه ابتدا به یک فرمت غیر-فشرده تبدیل بشه و بعد به یک فرمت فشرده، اگر قراره اینکار انجام بشه هیچ تفاوتی در اسکریپت نویسی نخواهد داشت که از چه ابزارهایی استفاده بشه یعنی مراحل کار یکیه، برای همین ترجیح میدم انکودر رسمی خود اوپاس که از کیفیت کارش اطمینان دارم آن را انجام دهد.
عنوان: پاسخ : نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: سید وحید رضا برهانی در 10 خرداد 1397، 11:00 ب‌ظ
راستش برای اینکه تاپیک از مسیرش خارج نشه یک تاپیک جدید بازکردم و اونجا ادامه می دم
https://forum.ubuntu-ir.org/index.php/topic,147966.msg1155714.html#msg1155714
عنوان: پاسخ : نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: علی رزم دیده در 10 خرداد 1397، 11:13 ب‌ظ
اگه اشتباه نکنم منظور شما اینه که آدرس فولدر اول می خواین بدین و بعدش پردازش هایی که قبلاً در موردشون صحبت کردیم برای 5 فولدر (خود اون فولدر و 4 فولدر بعدی) اعمال بشه.

برای این منظور من این اسکریپت ها رو نوشتم ولی چون دقیق از منظور شما مطمئن نیستم ، اول این اسکریپت رو اجرا کنین اگر خروجی ، خروجی مورد نظر شما بودش بعدش اسکریپت های اصلی رو اجرا کنین :

#!/bin/bash
IFS=$'\n'
ls -d `dirname "$1"`/*/ | grep -A5 -P `basename "$1"`

نحوه ی اجراش هم به این صورت هستش :
./script /home/asus/Desktop/A/و خروجی به این صورت باید باشه :
/home/asus/Desktop/A/ /home/asus/Desktop/B/ /home/asus/Desktop/C/ /home/asus/Desktop/D/ /home/asus/Desktop/E/
اگه خروجی درست بودش ، حالا می تونین از این اسکریپت های اصلی استفاده کنین.

اسکریپت اول :
#!/bin/bash
IFS=$'\n'
par=$(ls -d `dirname "$1"`/*/ | grep -A5 -P `basename "$1"`)

for dir in `find $par -type d` ; do
    for file in "$dir"/*.flac ; do
        newname=`sed 's/ - /. /g' <<< "$file"`
        opusenc "$file" "${newname%.*}".opus && rm -v "$file"
    done
done

اسکریپت دوم :
#!/bin/bash
IFS=$'\n'
par=$(ls -d `dirname "$1"`/*/ | grep -A5 -P `basename "$1"`)

for dir in `find $par -type d` ; do
    for file in "$dir"/*.{mp3,ogg} ; do
        ffmpeg -i "$file" "${file%.*}".flac && rm -v "$file"
    done
done
عنوان: پاسخ : نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: Farhaad 1992 در 11 خرداد 1397، 03:02 ب‌ظ
اون دو اسکریپت دیروز باز هم مشکل نام فولدر را داشتند.

اسکریپت های امروز را تست خواهم کرد و تا فردا نتیجشو میگم.
عنوان: پاسخ : نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: Farhaad 1992 در 11 خرداد 1397، 03:24 ب‌ظ
اگه اشتباه نکنم منظور شما اینه که آدرس فولدر اول می خواین بدین و بعدش پردازش هایی که قبلاً در موردشون صحبت کردیم برای 5 فولدر (خود اون فولدر و 4 فولدر بعدی) اعمال بشه.
.....
بله منظورم همین بود، البته اسکریپت هایی که نوشتید به جای 4 فولدر بعدی روی 5 فولدر بعدی عملیات انجام میدهند، مقدار آپشن grep -A باید 4 باشد.

الان اسکریپت flac به اوپاس را اجرا کردم و درست کار کرد، با نام فولدر هم به مشکل برنخورد.

خوب من میتونم این دو اسکریپت را به عنوان اسکریپت نهایی درنظر بگیرم؟ میخوام برای همون تاپیکی که تو پست اول گفته بودم استفاده کنم و همچنین (حل شد) را به عنوان تاپیک اضافه کنم، از صحت کارکرد آنها مطمئن هستید؟ مشکلی ایجاد نمیکنند؟
عنوان: پاسخ : نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: علی رزم دیده در 11 خرداد 1397، 03:34 ب‌ظ
اون دو اسکریپت دیروز باز هم مشکل نام فولدر را داشتند.
اسکریپت های امروز را تست خواهم کرد و تا فردا نتیجشو میگم.
عجیبه چون این دو اسکریپت رو من خودم تست کردم و مشکلی نداشت و اسامی فایل فایل ها رو به صورت A A و A A A در نظر گرفته بودم تا تست دقیق باشه

بله منظورم همین بود، البته اسکریپت هایی که نوشتید به جای 4 فولدر بعدی روی 5 فولدر بعدی عملیات انجام میدهند، مقدار آپشن grep -A باید 4 باشد.
الان اسکریپت flac به اوپاس را اجرا کردم و درست کار کرد، با نام فولدر هم به مشکل برنخورد.
خوب من میتونم این دو اسکریپت را به عنوان اسکریپت نهایی درنظر بگیرم؟ میخوام برای همون تاپیکی که تو پست اول گفته بودم استفاده کنم و همچنین (حل شد) را به عنوان تاپیک اضافه کنم، از صحت کارکرد آنها مطمئن هستید؟ مشکلی ایجاد نمیکنند؟
نه مشکل خاصی ندارن و می تونین تاپیک رو (حل شد) بزنین فقط اینکه باز هم تاکیدم روی قسمت rm هستش
استفاده از دستور rm هیچ وقت توصیه نمی شه به خصوص توی یک اسکریپت که به هر حال ممکنه تو شرایط مختلف باگ های خاص خودش رو داشته باشه
به خاطر همین هم هستش که تو خیلی از مواقع حرفه ای ها از mv foo foo.bak به جای rm foo استفاده می کنن چون کلا ماهیت دستور rm خطرناکه و من این قسمت رو فقط به اصرار شما اضافه کردم
عنوان: پاسخ : (حل شد) نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: Farhaad 1992 در 13 خرداد 1397، 12:21 ب‌ظ
اسکریپت تبدیل به اوپاس مشکل داره، وقتی بهش آدرس میدم بعضی فولدرها را تبدیل میکنه و بعضی ها رو نه، این ارور را معمولن میده:

/media/lennart/99e06afb-c17b-462e-a08b-74858bc3d1aa/MUSIC/Al****//00. 01 Intro.opus: No such file or directory

درحالیکه باید دنبال فایل های flac بگرده، فایلی که flac هستش را میخواد به عنوان opus. ورودی بگیره.
عنوان: پاسخ : (حل شد) نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: علی رزم دیده در 14 خرداد 1397، 01:30 ق‌ظ
من متاسفانه نتونستم این پروسه ی خطایی که شما باهاش مواجه می شین رو بازتولید کنم و بعدش مشکل رو تشخیص بدم ، هر شرایطی رو در نظر گرفتم بدون مشکل اجرا شد.

پس لطفا برای موزیکی که خطا داده می شه موارد زیر رو بفرستین تا شاید بتونم این باگ رو بازتولید بکنم :

*نام و آدرس دقیق فولدری که توش موزیک قرار داره
*نام دقیق فایل موزیک
*دستوری رو که شما برای اجرای اسکریپت استفاده می کنین

فقط لطفاً ستاره نزنین و اسم رو دقیق و کامل بفرستین چون شاید مشکل اسکریپت با همون قسمتی از اسم باشه که شما ستاره زدین
عنوان: پاسخ : (حل شد) نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: Farhaad 1992 در 14 خرداد 1397، 04:40 ب‌ظ
/media/lennart/99e06afb-c17b-462e-a08b-74858bc3d1aa/MUSIC/Aphex Twin/

[1994] selected ambient works - volume II (disc I)


مثلا در این فولدر، زیر-فولدر اول و دوتای آخر را تبدیل نکرده ولی بقیه را انجام داده، با اینکه هیچ تفاوتی در الگوی نام فایل های درونشون نیست. اسکریپت را هم خیلی معمولی از دایرکتوری خانه اجرا میکنم، هیچ فرقی هم نمیکنه آدرس فولدر را با "" بدم یا با تکمیل خودکار توسط کلید تب که از \ قبل از اسپیس ها استفاده میکنه. لطفا برای اسکریپت تبدیل به اوپاس، پسوندهای wave و wav را هم اضافه کنید.
عنوان: پاسخ : (حل شد) نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: علی رزم دیده در 15 خرداد 1397، 02:15 ق‌ظ
مثلا در این فولدر، زیر-فولدر اول و دوتای آخر را تبدیل نکرده ولی بقیه را انجام داده، با اینکه هیچ تفاوتی در الگوی نام فایل های درونشون نیست.
بله ظاهراً تفاوت خاصی توی اسامی وجود نداره ، ولی من یه حدسی دارم که ممکنه دلیل خطا این بوده باشه.
حدس من اینه که تو اسامی کارکتر "n\" وجود داره به عبارتی قبل اسم فولدر یک خط خالی وجود داره و بعدش اسم فولدر نوشته شده و از اونجایی که این اسکریپت هر خط خروجی find رو به عنوان یک مسیر (dir) در نظر می گیره در واقع اسکریپت اسم و مسیر فولدر رو به صورت دو مسیر جداگانه در نظر می گیره ، چون بین مسیر و اسم فولدر یک خط فاصله وجود داره.
حدس عجیبیه ولی به امتحانش می ارزه ؛ برای تست کردن این مورد اول ترمینال رو توی همون مسیری که عکسش رو انداختین باز کنین و بعدش دستور زیر رو وارد کنین :
ls -alFخروجی این دستور می تونه تو حل این مشکل خیلی کمکمون کنه.
(از اونجایی که این مورد یک حدس هستش فعلا تغییری تو اسکریپت اعمال نمی کنم تا مشکل رو دقیق شناسایی کنیم)
عنوان: پاسخ : (حل شد) نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: Farhaad 1992 در 15 خرداد 1397، 09:23 ق‌ظ
خروجی فرمان را پیوست کردم.

من میگم این موضوع را دیگه ادامه ندیم، من بیشتر به خاطر باگ موجود در بسته GNOME SoundConverter در دبیان 9 که نسخه آلفا هست مجبور شدم از انکودر خود اوپاس استفاده کنم ولی این اسکریپت ها هرگز اون راحتی برنامه مذکور را نداره، همچنین اسکریپت تبدیل به flac به دلیل تعیین نکردن آپشن های مورد نیاز که من نمیدونم، تصویر موجود در فایل های اصلی را به خروجی flac منتقل نمیکنه در حالیکه GNOME SoundConverter این مشکل را نداره، به نظرم بهتره آخرین نسخه پایدار GNOME SoundConverter را دانلود و نصب کنم، این برنامه با پایتون نوشته شده و اجرا و نصبش خیلی دردسر نداره.
عنوان: پاسخ : (حل شد) نیاز به اسکریپت برای اتوماسیون تبدیل فایل های صوتی و حذف فایل های اصلی
ارسال شده توسط: Farhaad 1992 در 21 تیر 1397، 06:48 ق‌ظ
این پست را میخواستم 2شنبه دو هفته قبل ارسال کنم ولی مانیتورم همون روز خراب شد، 3شنبه بردم نمایندگیش برای تعمیر و به دلیل نیاز به تعویض قطعه و مشکل پنل خیلی طول کشید هنوز هم تعمیر نشده و باید تا روز شنبه صبر کنم، تو این مدت هم به اینترنت دسترسی نداشتم. من موبایل هوشمند ندارم.

@علی رزم دیده

فکر کنم فهمیدم ایراد کار ما کجا بود، ما خواستیم یک اسکریپت دوتا کار کاملا متفاوت را انجام بده، تبدیل قابل‌های صوتی به یک فرمت دیگر و تغییر نام فایل‌ها، این باعث پیچیده شدن اسکریپت شده و عیب یابی آن را سخت کرده، حتی نتیجه مطلوب را هم نمیده مثلا من متوجه شدم بعضی فایل ها اینطوری نام گذاری شده اند:

01) title
02) title

روی فایل هایی با این الگوی نام هیچ کاری انجام نداده چون چنین حالتی تعیین نشده بود.

فلسفه یونیکس میگه برنامه ها را طوری بنویسید که یک کار انجام دهند و آن کار را به بهترین نحو انجام دهند.

بهتره از اول اسکریپت ها نوشته شوند، اسکریپت تغییر نام را حالا ننویسید چون میخوام بگردم یک روش گرافیکی پیدا کنم، ولی لطفا اسکریپت تبدیل فرمت ها را همانطور که توزیح داده شد و با تعین چندین فرمت احتمالی برای هر اسکریپت بنویسید. با سپاس