GNU/Linux >> Belajar Linux >  >> Linux

Mengkonversi Video Menjadi Ukuran Layar Tetap Dengan Memotong Dan Mengubah Ukuran?

Saya sudah mencoba mencari tahu sendiri, tetapi banyak sekali pilihan yang membuat saya bingung.

Saya ingin menggunakan idealnya ffmpeg atau mencoder (atau sesuatu yang lain, tetapi dua yang saya tahu telah saya kerjakan) untuk mengonversi video yang masuk ke ukuran layar tetap.

Jika video lebih lebar atau terlalu pendek, potong bagian tengah video. Jika itu bukan ukuran yang tepat, ubah ukurannya ke atas atau ke bawah untuk menjadikannya ukuran layar yang tepat.

Hal terakhir yang saya butuhkan adalah 720x480 dalam XVid AVI dengan trek audio MP3.

Saya telah menemukan banyak halaman yang menunjukkan cara mengubah ukuran ke resolusi maksimum, tetapi saya membutuhkan video dengan resolusi yang sama (dengan bagian tambahan terpotong, tanpa bilah hitam).

Adakah yang bisa memberi tahu saya baris perintah untuk dijalankan - atau setidaknya berikan saya sebagian/sebagian besar perjalanan ke sana? Jika perlu beberapa baris perintah (jalankan X untuk mendapatkan resolusi, lakukan perhitungan ini dan kemudian jalankan Y dengan output dari perhitungan itu) saya dapat membuat skrip itu.

Jawaban yang Diterima:

Saya bukan guru ffmpeg, tetapi ini akan berhasil.

Pertama-tama, Anda bisa mendapatkan ukuran video input seperti ini:

ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width in.mp4

Dengan ffmpeg yang cukup baru, Anda dapat mengubah ukuran video dengan opsi berikut:

ffmpeg -i in.mp4 -vf scale=720:480 out.mp4

Anda dapat mengatur lebar atau tinggi ke -1 untuk membiarkan ffmpeg mengubah ukuran video menjaga rasio aspek. Sebenarnya, -2 adalah pilihan yang lebih baik karena nilai yang dihitung harus genap. Jadi Anda bisa mengetik:

ffmpeg -i in.mp4 -vf scale=720:-2 out.mp4

Setelah Anda mendapatkan videonya, mungkin lebih besar dari yang diharapkan 720x480 karena Anda membiarkan ffmpeg hitung tingginya, jadi Anda harus memotongnya. Ini dapat dilakukan seperti ini:

ffmpeg -i in.mp4 -filter:v "crop=in_w:480" out.mp4

Terakhir, Anda dapat menulis skrip seperti ini (dapat dengan mudah dioptimalkan, tetapi saya membuatnya sederhana agar mudah dibaca):

#!/bin/bash

FILE="//eadn-wc01-5196795.nxedge.io/tmp/test.mp4"
TMP="//eadn-wc01-5196795.nxedge.io/tmp/tmp.mp4"
OUT="//eadn-wc01-5196795.nxedge.io/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}

Linux
  1. Konversi Video Ke Format Video WhatsApp Dengan FFmpeg

  2. Bagaimana Cara Mengurangi Ukuran Video Dengan Ffmpeg?

  3. Perbedaan Antara Ukuran Blok Dan Ukuran Cluster?

  1. Vdx – Pembungkus Baris Perintah Intuitif Untuk FFmpeg

  2. LosslessCut – Pemotong Video dan Audio Lintas Platform Sederhana

  3. Bagaimana cara mengonversi video m4v dan wmv ke format mp4 menggunakan ffmpeg?

  1. Unduh Sebagian Video Youtube dengan Youtube-dl Dan FFmpeg

  2. Perekaman Layar di Linux Dengan OBS dan Wayland

  3. Bagaimana Dan Di Mana $term Diinterpretasikan?