سلام. یه موردی پیش اومد که نیاز شد کلی عکس رو ریسایز کنم (ابعادشون رو تغییر بدم). ولی میخواستم همشون یه عرض ثابت داشته باشه و بعد از ریسایز هم کلمه small رو اول اسامیشون اضافه کنم. گفتم بیام اینجا هم بنویسم شاید به دردِ کسی خورد.
برای این کار با کمی جستجو از ffmpeg استفاده کردم. اگه علاقه داشتین میتونین به مقاله قبلی من در مورد ffmpeg مراجعه کنین:
برای کاری که گفتم از دستور زیر استفاده کردم:
for %j in (*.jpg) do ffmpeg -i "%j" -vf scale=480:-1 "Small-%~nj.jpg"
از for استفاده کردیم که به کمک %j in (*.jpg) به تمام عکسهای jpg داخل فولدر دسترسی داشته باشیم و به کمک کلمه do به ازای هر کدوم از عکسها دستور ffmpeg اجرا میشه.
دستور ffmpeg هم توی قسمت scale=480:-1 مشخص میکنه میخوایم عکس عرضش 480 باشه و به کمک -1 میفهمه که میخوایم نسبت تصویر حفظ بشه و با توجه به ابعاد اولیه تصمیم میگیره خروجی چه ارتفاعی داشته باشه (طبیعتاً اگه نیاز شد ارتفاع ثابت باشه، میشه جای 480 و -1 رو عوض کرد. و مشخصه که بجای 480 میتونید عدد دلخواه خودتون رو بذارین). در نهایت هم به کمک "Small-%~nj.jpg" میگیم بعد از تغییر اندازه عکس جدید رو با همون اسم قبلی البته همراهِ اضافه کردن کلمه Small- ذخیره کن.
در حقیقت برای ریسایز کردن یه عکس از دستور زیر میشه استفاده کرد:
ffmpeg -i source.jpg -vf scale=480:720 Small-source.jpg
و برای اینکه لیستی از عکسها رو تغییر بدیم به شکل اول که دیدین درش اوردیم.
طبیعتاً با کمی وَر رفتن به این دستورات، کارهای دیگه مثل تبدیل فرمت عکس، انتخاب فرمتهای دیگه، تغییر اسامی، تغییر سایز یا سایز کارهایی که میخواید رو میتونید انجام بدید.
یه نکته جالب دیگه هم کاهش حجم عکسها هست که خیلی کاربردی میتونه باشه. صرفا با کمک دستور زیر کلی حجم از عکس شما کم میشه (حدأقل برای من که خیلی به کار اومد و فکر کنم بالای 70 تا حتی 90 درصد کاهش حجم داشت روی بعضی عکسهام):
ffmpeg -i IMG.jpg IMG_NEW.jpg
یعنی عملاً با دستورای قبلی هم ابعاد عکس کاهش پیدا میکردن هم سایزش کمتر میشد. حالا میتونیم بدون تغییر ابعاد فقط فشردهسازی هم انجام بدیم.
شاد و موفق و پیروز باشید
منتشر شده در ویرگول توسط محمد قدسیان https://virgool.io/@mohammad.ghodsian
https://virgool.io/@mohammad.ghodsian/ffmpeg-image-resizing-efmxeowq25xr