मैं कोई 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
एक बेहतर विकल्प है क्योंकि गणना मूल्य भी होना चाहिए। तो आप टाइप कर सकते हैं:
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}