Come posso ritagliare un video con ffmpeg?


172

Ho un file MP4 di una registrazione dello schermo che devo ritagliare. Come posso ottenere questo risultato senza utilizzare strumenti costosi come Adobe Premier o Final Cut? Preferisco ffmpegperché l'ho usato prima.

Risposte:


264

Usa il cropfiltro :

ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4

Dove le opzioni sono le seguenti:

  • out_w è la larghezza del rettangolo di output
  • out_h è l'altezza del rettangolo di output
  • xe yspecifica l'angolo in alto a sinistra del rettangolo di output

Immagine originale

immagine originale
Immagine originale 320x240

Esempio 1

80x60

Per ritagliare una sezione 80 × 60, partendo dalla posizione (200, 100):

ffmpeg -i in.mp4 -filter:v "crop=80:60:200:100" -c:a copy out.mp4
  • In questo esempio l'audio viene copiato in streaming , quindi si evita la ricodifica.

Esempio 2

quarto in basso a destra

Per ritagliare il quarto in basso a destra:

ffmpeg -i in.mp4 -filter:v "crop=in_w/2:in_h/2:in_w/2:in_h/2" -c:a copy out.mp4

Questo è lo stesso di:

ffmpeg -i in.mp4 -filter:v "crop=320/2:240/2:320/2:240/2" -c:a copy out.mp4

Che è lo stesso di:

ffmpeg -i in.mp4 -filter:v "crop=240:120:240:120" -c:a copy out.mp4
  • È possibile fare riferimento alla dimensione dell'immagine di input con in_we in_hcome mostrato in questo primo esempio. La larghezza e l'altezza dell'output possono essere utilizzate anche con out_we out_h.

Esempio 3

20 pixel dall'alto e 20 dal basso

Ritaglia 20 pixel dall'alto e 20 dal basso:

 ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4
  • Il filtro centra automaticamente il ritaglio se xe yviene omesso come in questo esempio.

l'anteprima

Puoi prendere un ritaglio (eh eh) e visualizzarne l'anteprima in tempo reale con ffplay:

ffplay -i input -vf "crop=in_w:in_h-40"

In questo modo puoi sperimentare e regolare il ritaglio senza la necessità di codificare, visualizzare, ripetere.

Appunti

  • crop documentazione del filtro

  • L'encoder predefinito per MP4 è libx264(video H.264) o mpeg4(video MPEG-4 parte 2) a seconda della ffmpegbuild. Vedi FFmpeg Wiki: Guida alla codifica video H.264 per maggiori informazioni.

  • Invece di ritagliare e ricodificare, considerare il ritaglio durante la riproduzione. Questo è possibile con qualsiasi giocatore che valga la pena usare.

  • Antica ffmpegcostruisce utilizzato -croptop, -cropbottom, -cropleft, -croprightopzioni al posto del cropfiltro. Se questo è il tuo caso, procurati un modernoffmpeg . Lo sviluppo è molto attivo e non c'è motivo di usare un oggetto antico.


2
Ora funziona con 'avconv'.
Joce,

Ho un 1923x1080 e voglio 1920x1080. Questo è il encomio che ho provato: /Users/kukodajanos/Workspace/ffmpeg -i /Users/kukodajanos/Desktop/video_640x480-2.mp4 -filter:v "crop=1920:1080:0:0" -c:a copy /Users/kukodajanos/Desktop/video_640x480-4.mp4ma il film originale viene restituito.
János,

@Joce JFYI avconv fa parte di libav - un fork di ffmpeg
andrybak,

1
vale la pena ricordare che questa tecnica (con il cropfiltro) ricodifica il video, vedi stackoverflow.com/questions/33378548/… se la ricodifica è importante per te
abernier

1
modificato per cambiare il obsoleto -filter:vin più aggiornato e più semplice da digitare -vf. Saluti!
Elder Geek il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.