ورود

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل گرفتن اسکرین شات با ffmpeg



alasht
August 7th, 2021, 13:47
سلام خدمت دوستان
من یه سرور اختصاصی دارم و سیستم عامل 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'

ممنون میشم راهنماییم کنید بدونم مشکل از کجاست

firebox
August 7th, 2021, 14:07
چرا از فیل-تر deinterlace استفاده میکنی، deinterlace یک فیل-تر هست برای از بین بردن یک نوع نویز خاص تو ویدیوها است.
برای ذخیره تصویر از یک ویدیو تو باید از گزینه vframes- استفاده کنی.

این یک نمونه دستور:



ffmpeg -ss 10 -i video.mp4 -vframes 1 -q:v 2 output.jpg


ss- می تونی تعیین کننده زمان خاص رو برات عکس بگیره، نمونه بالا ثانیه ۱۰ رو عکس میگیره.

vframe- برای ارسال فریم به خروجی است، عدد جلوش شماره فریم است.

q:v- برای تعیین کیفیت خروجی است، از رنج 1-31 میشه گذاشت ، عددش هر چی پایین تر باشه، کیفیت بالاتره، رنج 2-5 بزاری کیفیت خوب کافیه.

alasht
August 7th, 2021, 14:49
ممنون از پاسختون
دستوری که دادید درست کار میکنه
فقط یه اشتباهی رخ داد من دستورمو اشتباه فرستادم
دستوری که استفاده میکنم اینه

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 رو حذف میکنم خروجی درست نشون میده ولی دیگه اون سایزی که میخوام نیست
چه کارش باید کرد که درست بشه ؟

firebox
August 7th, 2021, 16:55
'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