আমি কোনও 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}