ffmpeg ile Büyük Video Dosyalarını Boyuta Göre Bölmek
Örneğin 2GB'lık büyük bir video dosyanızı 100mb'lık partlar halinde bölmek isterseniz aşağıdaki adımları takip etmeniz yeterli.
split-video.sh
adında bir dosya oluşturun ve içerisine aşağıdaki kodları yazın;
#!/bin/bash
FILE="$1"
SIZELIMIT="$2"
FFMPEG_ARGS="$3"
# Kaynak videonun süresi
DURATION=$(ffprobe -i "$FILE" -show_entries format=duration -v quiet -of default=noprint_wrappers=1:nokey=1|cut -d. -f1)
# Şuana kadar encode edilmiş süre
CUR_DURATION=0
# Kaynak videonun adı (uzantısız)
BASENAME="${FILE%.*}"
# Video partlarının uzantısı (otomatik inputa girilen videodan çeker isterseniz ikinciyi aktif edebilirsiniz)
EXTENSION="${FILE##*.}"
#EXTENSION="mkv"
# Mevcut video partının değeri
i=1
# Bir sonraki video partı için dosya adı
NEXTFILENAME="$BASENAME-$i.$EXTENSION"
echo "Kaynak videonun süresi: $DURATION"
# Tüm videoların süresi kaynak videonun süresine ulaşıncaya kadar döngüyü sürdür
while [[ $CUR_DURATION -lt $DURATION ]]; do
# Bir sonrakini encode et
echo ffmpeg -i "$FILE" -ss "$CUR_DURATION" -fs "$SIZELIMIT" $FFMPEG_ARGS "$NEXTFILENAME"
ffmpeg -ss "$CUR_DURATION" -i "$FILE" -fs "$SIZELIMIT" $FFMPEG_ARGS "$NEXTFILENAME"
# Yeni partın süresi
NEW_DURATION=$(ffprobe -i "$NEXTFILENAME" -show_entries format=duration -v quiet -of default=noprint_wrappers=1:nokey=1|cut -d. -f1)
# Şuana kadar encode edilen süre
CUR_DURATION=$((CUR_DURATION + NEW_DURATION))
i=$((i + 1))
echo "$NEXTFILENAME Süresi: $NEW_DURATION"
echo "Part No. $i başlangıç $CUR_DURATION"
NEXTFILENAME="$BASENAME-$i.$EXTENSION"
done
Evet, artık şu şekilde çalıştırarak kullanabilirsiniz;
prototurk -- -bash --- 64x17
sh split-video.sh uzun-video.mkv 100000000 "-c:v libx264 -crf 23 -c:a copy -vf scale=1280:-1"
Burada 100000000
değeri 100MB'a eşittir. Dilediğiniz rakamı bayt cinsinden vererek bölme işlemini gerçekleştirebilirsiniz.
Ayrıca 1280
değerini istediğiniz boyuta göre değiştirin. 720p için 1280, 1080p için 1920 belirleyebilirsiniz.