1 فایل پیوست
مشکل گرفتن اسکرین شات با ffmpeg
سلام خدمت دوستان
من یه سرور اختصاصی دارم و سیستم عامل centos 7 روش نصبه
من با استفاده از دستور زیر میخوام از فایل ویدئوم اسکرین شات بگیرم ولی خروجی که میده به صورت زیر میشه
فایل پیوست 40999
دستوری هم که میزنم اینه
کد:
ffmpeg -y -ss 00:00:01.000 -i 'video.mp4' -vf 'crop=w=1280:h=720:x=0:y=0,scale=w=720:h=406,pad=w=720:h=406:x=0:y=0:color=0xFFFFFF' -f mjpeg -vframes 1 -q:v 2 'image.jpg'
ممنون میشم راهنماییم کنید بدونم مشکل از کجاست
پاسخ : مشکل گرفتن اسکرین شات با ffmpeg
چرا از فیل-تر deinterlace استفاده میکنی، deinterlace یک فیل-تر هست برای از بین بردن یک نوع نویز خاص تو ویدیوها است.
برای ذخیره تصویر از یک ویدیو تو باید از گزینه vframes- استفاده کنی.
این یک نمونه دستور:
کد:
ffmpeg -ss 10 -i video.mp4 -vframes 1 -q:v 2 output.jpg
ss- می تونی تعیین کننده زمان خاص رو برات عکس بگیره، نمونه بالا ثانیه ۱۰ رو عکس میگیره.
vframe- برای ارسال فریم به خروجی است، عدد جلوش شماره فریم است.
q:v- برای تعیین کیفیت خروجی است، از رنج 1-31 میشه گذاشت ، عددش هر چی پایین تر باشه، کیفیت بالاتره، رنج 2-5 بزاری کیفیت خوب کافیه.
پاسخ : مشکل گرفتن اسکرین شات با ffmpeg
ممنون از پاسختون
دستوری که دادید درست کار میکنه
فقط یه اشتباهی رخ داد من دستورمو اشتباه فرستادم
دستوری که استفاده میکنم اینه
کد:
ffmpeg -y -ss 00:00:01.000 -i 'video.mp4' -vf 'crop=w=1280:h=720:x=0:y=0,scale=w=720:h=406,pad=w=720:h=406:x=0:y=0:color=0xFFFFFF' -f mjpeg -vframes 1 'image.jpg'
این دستور کدوم قسمتش مشکل داره که خروجی به اون صورت میشه ؟
گزینه q:v- رو بهش اضافه کردم بازم خروجی خراب میده
- - - Updated - - -
مشکلش با دستور scale هست
وقتی scale رو حذف میکنم خروجی درست نشون میده ولی دیگه اون سایزی که میخوام نیست
چه کارش باید کرد که درست بشه ؟
پاسخ : مشکل گرفتن اسکرین شات با ffmpeg
کد:
'crop=w=1280:h=720:x=0:y=0,scale=w=720:h=406,pad=w=720:h=406:x=0:y=0:color=0xFFFFFF'
مشکل از scale نیست، مشکل از crop است، توی دستور بالا شما عرض ۱۲۸۰ و ارتفاع ۷۲۰ با مختصات x , y صفر تعریف کردید، بعد اندازه اش رو به عرض ۷۲۰ و ارتفاع ۴۰۶ تغییر دادید، آخرش هم یک پد با همین ارتفاع و عرض با زمینه سیاه تعریف کردید (که کاملا بی استفاده است، به خاطر اینکه شما نسبت تصویر رو کلا نادیده گرفتید.)
الان تو دستور بالا اگر ویدیو با ارتفاع و عرض کمتر از ۱۲۸۰x۷۲۰ تعریف کنید، دستور crop خطا میده، چون مقدارش بیشتر از ارتفاع و عرض ویدیو است، مشکل دیگه اینکه اگر طول و عرض ویدیوتون بیشتر از 1280x720 باشه، تصویر خروجی تون توی کادر نیست، میشه از 1280*720 از گوشه سمت بالا سمت راست ویدیو.
الان فکر کنم شما میخواهید یک عکس از ویدیو بگیرید، با حفظ نسبت تصویر به سایز 720x406 تغییرش بدی، اگر نسبت تصویرش فرق داشت، سایز اصلی حفظ کنی و جای خالی پدینگ مشکی بهش بدی.
کد:
ffmpeg -y -ss 00:00:01.000 -i video.mp4 -vf "scale=720:406:force_original_aspect_ratio=decrease,pad=720:406:-1:-1:color=black" -vframes 1 -q:v 2 output.jpg
توی دستور بالا من از force_original_aspect_ratio با مقدار decrease استفاده کردم، force_original_aspect_ratio دو تا مقدار داره یکی decrease برای زمانی است خروجی تصویر به صورت کاهش پیدا کنه برای یک سایز مشخص مقدار increase هم برای افزایش تصویر (تصویر رو جلو میاره) برای که یک سایز مشخص.
این دستور برای این هست اگر بخواهید تصویر خروجی تون اگر نسبت تصویر اش 16:9 نباشه اما تصویر خروجی نهایی بدون هیچ بخش سیاه نداشته باشه و کامل پرش کنه
کد:
ffmpeg -y -ss 00:00:01.000 -i video.mp4 -vf "scale=720:406:force_original_aspect_ratio=increase,crop=720:406" -vframes 1 -q:v 2 output.jpg