Taglia parte dal file video dalla posizione iniziale alla posizione finale con FFmpeg [duplicato]


144

Questa domanda ha già una risposta qui:

Ho un file video di 30 minuti, ma voglio estrarre un video da 00:09:23 a 00:25:33.

Posso definire la posizione iniziale con -ss, ma non riuscivo a trovarne una per la posizione finale. Qualche aiuto per favore?

Risposte:


244

Installa ffmpeg

Assicurati di scaricare una versione recente diffmpeg e non utilizzare quella fornita con la tua distribuzione (ad esempio Ubuntu). Le versioni impacchettate di varie distribuzioni sono spesso obsolete e non si comportano come previsto.

O compilalo tu stesso .

Come tagliare un video, senza ricodifica

Usa questo per tagliare il video da [start]per [duration]:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4

Qui, le opzioni indicano quanto segue:

  • -ssspecifica l'ora di inizio, ad es. 00:01:23.000oppure 83(in secondi)
  • -t specifica la durata della clip (stesso formato).
  • Recenti ffmpegha anche una bandiera per fornire l'ora di fine -to.
  • -c copycopia il primo flusso di video, audio e sottotitoli dall'input al file di output senza ricodificarli. Ciò non danneggerà la qualità e farà eseguire il comando in pochi secondi.

Come tagliare un video, con ricodifica

Se si esclude l' -c copyopzione, ffmpegricodificheranno automaticamente il video e l'audio in uscita in base al formato scelto. Per video e audio di alta qualità, leggi rispettivamente la Guida alla codifica x264 e la Guida alla codifica AAC .

Per esempio:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4

1
Su ubuntu 12:10, -c: ve -c: a non ha funzionato. Ho dovuto usare invece "-acodec copy e -vcodec copy".
Samuel Lampa,

1
@Samuel Quindi stai usando una versione obsoleta, che non è nemmeno FFmpeg reale, ma il fork di Libav. Vedi: stackoverflow.com/a/9477756/1109017
slhck

Grazie per questo! se non specifichi una durata, andrà alla fine?
Jeff

@Jeff Sì! (carattere minimo)
slhck

3
@Prateek Quando si copia il bitstream video (anziché ricodificarlo), è possibile tagliare solo i fotogrammi chiave . Se ci sono fotogrammi chiave ai secondi 1, 2 e 3, ma si desidera tagliare al secondo 1.5, ffmpeg attenderà fino al secondo 2 prima di poter iniziare a tagliare. Questo lo rende inaccurato.
slhck,

26

Penso che ora puoi usare il seguente comando.

ffmpeg -i inputFile -vcodec copy -acodec copy -ss 00:09:23 -to 00:25:33 outputFile

Dai un'occhiata anche a ffmpeg Doc o a questa pagina wiki .


6
ffmpeg -i inputFile -c copy -ss 00:09:23 -to 00:25:33 outputFileversione più semplice
nwgat

3
Ho dovuto usare la ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4versione (con -copyts), altrimenti è stata tagliata in modo errato (con una schermata nera all'inizio). Grazie per il 2 ° link però.
Necronomicron,

Questo è fantastico, l'ultima cosa che volevo era calcolare la durata dagli endpoint.
Tomasz Gandor,

L'opzione -to risponde alla domanda che è stata effettivamente posta. Il resto delle risposte è impertinente o obsoleto.
James Bowery,

12

È strano che nessuno abbia suggerito il trim filtro .

Rilascia tutto tranne il secondo minuto di input:

ffmpeg -i INPUT -vf trim=60:120

Mantieni solo il primo secondo:

ffmpeg -i INPUT -vf trim=duration=1

Rilascia tutto tranne dal secondo 13 al secondo 58:

ffmpeg -i INPUT -vf trim=13:58 OUTPUT

8
Sì, buono a dirsi trime atrim. Di solito li uso durante il filtraggio, ma gli utenti dovrebbero notare che il filtraggio richiede la ricodifica .
Llogan,

Tu sei il mio eroe. Avevo davvero bisogno di un filtro per farlo.
Fahadash,

5

È possibile utilizzare questi due metodi che funzionano per Windows e Linux.

Esistono due modi per dividere i file video per ffmpeg. Il primo è buono in sé, più di questo: è più veloce, ma a volte crea file di output con alcuni difetti. Quindi per quei casi c'è il secondo modo di dividere i file video: è considerevolmente più lento, i file di output sono più grandi, ma sembra che abbiano sempre lo stesso livello di qualità dei file di input utilizzati.

Modo 1:

ffmpeg -ss <start> -i in1.avi -t <duration> -c copy out1.avi

Modo 2:

ffmpeg -ss <start> -i in1.avi -t <duration> out1.avi
  • <start>- l'inizio della parte di un video ffmpeg è tagliare. Formato:, che 00:00:00.0000significa ore: minuti: secondi: millisecondi.

  • <duration>- la durata della parte di un video ffmpeg è di tagliare. Stesso formato come sopra.

Esempi:

ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 -c copy out1.avi
ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 out1.avi

ffmpeg ritaglia una parte del file video a partire da 1 ora 19 minuti 0 secondi. La durata del taglio della sequenza video è di 5 minuti 0 secondi.


Ok grazie. Verificherà i documenti e lo proverò domani.
juGGaKNot

3
-sameqnon significa "stessa qualità" ed è stato rimosso da ffmpeg. Usa -codec copyinvece. Inoltre, non dimenticare l' -toopzione.
Llogan,

Ho corretto i comandi nella tua citazione, poiché erano abbastanza obsoleti. Si prega di non copiare e incollare le informazioni senza citarle correttamente.
slhck,

-1

Puoi usare questo

ffmpeg -sameq -ss clip_start -t duration  -i  original.ogg  clip.ogg

Qui devi dare la durata del video. vale a dire. 00: 25: 33-00: 09: 23


1
Come ho già detto sull'altra risposta: con il tuo comando, stai ricodificando il file, il che non è assolutamente necessario e si traduce in una qualità ridotta e in un tempo di elaborazione maggiore.
slhck,

-2

Uso la sintassi seguente per tagliare il video con ffmpef:

ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [outputfile]

-t viene utilizzato per impostare la durata in secondi - non è possibile specificare l'ora di fine ma questo dovrebbe funzionare per te.


1
Perché stai impostando FFmpeg per ricodificare il file? Nota che -sameqnon significa affatto "stessa qualità".
slhck,
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.