کد:
'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