GNU/Linux >> Linux Esercitazione >  >> Linux

Convertire un video in una dimensione dello schermo fissa ritagliando e ridimensionando?

Ho cercato di capirlo da solo, ma la miriade di opzioni mi lascia perplesso.

Voglio usare idealmente sia ffmpeg o mencoder (o qualcos'altro, ma quei due che so di avere funzionanti) per convertire qualsiasi video in arrivo in una dimensione dello schermo fissa.

Se il video è più largo o troppo corto, ritaglia il video al centro. Se non è della dimensione corretta, ridimensionalo in alto o in basso per renderlo esattamente della dimensione dello schermo fissa.

L'ultima cosa di cui ho bisogno è 720×480 in un XVid AVI con una traccia audio MP3.

Ho trovato molte pagine che mostrano come ridimensionare a una risoluzione massima, ma ho bisogno che il video abbia esattamente quella risoluzione (con parti extra ritagliate, nessuna barra nera).

Qualcuno può dirmi la riga di comando da eseguire o almeno portarmi un po'/la maggior parte del percorso? Se è necessario che siano più righe di comando (esegui X per ottenere la risoluzione, esegui questo calcolo e quindi esegui Y con l'output di quel calcolo) posso scriverlo.

Risposta accettata:

Non sono un guru di ffmpeg, ma questo dovrebbe fare il trucco.

Prima di tutto, puoi ottenere le dimensioni del video di input in questo modo:

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

Con un ffmpeg ragionevolmente recente, puoi ridimensionare il tuo video con queste opzioni:

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

Puoi impostare la larghezza o l'altezza su -1 per consentire a ffmpeg ridimensiona il video mantenendo le proporzioni. In realtà, -2 è una scelta migliore poiché il valore calcolato dovrebbe essere pari. Quindi potresti digitare:

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

Una volta ottenuto il video, potrebbe essere più grande del 720x480 previsto poiché hai lasciato ffmpeg calcola l'altezza, quindi dovrai ritagliarla. Questo può essere fatto in questo modo:

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

Infine, potresti scrivere uno script come questo (può essere facilmente ottimizzato, ma l'ho mantenuto semplice per la leggibilità):

#!/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. Vdx:un intuitivo wrapper della riga di comando per FFmpeg

  2. LosslessCut – Un semplice cutter video e audio multipiattaforma

  3. Come creare video in modo programmatico?

  4. Ridimensionamento di una finestra a una dimensione impostata in Linux

  5. Come convertire video m4v e wmv in formato mp4 usando ffmpeg?

Come installare FFmpeg in Linux e utilizzare i comandi

Come ingrandire e rimpicciolire i video utilizzando FFmpeg

Come convertire video in GIF in Linux [Metodi terminale e GUI]

I comandi FFmpeg più utili per la conversione di audio e video

Riduci le dimensioni dei file delle immagini in Linux:metodi CLI e GUI

Linux - Imposta la dimensione del terminale e la posizione dello schermo predefinite?