আমি কোনও ffmpeg গুরু নই, তবে এই কৌশলটি করা উচিত।
প্রথমত, আপনি এই জাতীয় ইনপুট ভিডিওর আকার পেতে পারেন:
ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width in.mp4
যুক্তিসঙ্গত সাম্প্রতিক ffmpeg দিয়ে আপনি এই ভিডিওগুলি দিয়ে আপনার ভিডিওর আকার পরিবর্তন করতে পারেন:
ffmpeg -i in.mp4 -vf scale=720:480 out.mp4
দিক অনুপাত রেখে ভিডিওটির আকার পরিবর্তন করতে -1আপনি প্রস্থ বা উচ্চতা সেট করতে পারেন ffmpeg। আসলে, -2একটি ভাল পছন্দ যেহেতু গণনা করা মানটি হওয়া উচিত should সুতরাং আপনি টাইপ করতে পারেন:
ffmpeg -i in.mp4 -vf scale=720:-2 out.mp4
আপনি একবার ভিডিওটি পাওয়ার পরে এটি প্রত্যাশার চেয়ে বড় হতে পারে 720x480যেহেতু আপনি ffmpegউচ্চতা গণনা করতে দিয়েছেন, সুতরাং আপনাকে এটি ক্রপ করতে হবে। এটি এইভাবে করা যেতে পারে:
ffmpeg -i in.mp4 -filter:v "crop=in_w:480" out.mp4
অবশেষে, আপনি এটির মতো একটি স্ক্রিপ্ট লিখতে পারেন (সহজেই অনুকূলিত করা যায়, তবে আমি এটিকে সহজতার জন্য সহজ করে দিয়েছি):
#!/bin/bash
FILE="/tmp/test.mp4"
TMP="/tmp/tmp.mp4"
OUT="/tmp/out.mp4"
OUT_WIDTH=720
OUT_HEIGHT=480
# Get the size of input video:
eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width ${FILE})
IN_WIDTH=${streams_stream_0_width}
IN_HEIGHT=${streams_stream_0_height}
# Get the difference between actual and desired size
W_DIFF=$[ ${OUT_WIDTH} - ${IN_WIDTH} ]
H_DIFF=$[ ${OUT_HEIGHT} - ${IN_HEIGHT} ]
# Let's take the shorter side, so the video will be at least as big
# as the desired size:
CROP_SIDE="n"
if [ ${W_DIFF} -lt ${H_DIFF} ] ; then
SCALE="-2:${OUT_HEIGHT}"
CROP_SIDE="w"
else
SCALE="${OUT_WIDTH}:-2"
CROP_SIDE="h"
fi
# Then perform a first resizing
ffmpeg -i ${FILE} -vf scale=${SCALE} ${TMP}
# Now get the temporary video size
eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width ${TMP})
IN_WIDTH=${streams_stream_0_width}
IN_HEIGHT=${streams_stream_0_height}
# Calculate how much we should crop
if [ "z${CROP_SIDE}" = "zh" ] ; then
DIFF=$[ ${IN_HEIGHT} - ${OUT_HEIGHT} ]
CROP="in_w:in_h-${DIFF}"
elif [ "z${CROP_SIDE}" = "zw" ] ; then
DIFF=$[ ${IN_WIDTH} - ${OUT_WIDTH} ]
CROP="in_w-${DIFF}:in_h"
fi
# Then crop...
ffmpeg -i ${TMP} -filter:v "crop=${CROP}" ${OUT}