2016-05-19 12 views
8

Ho video di lunghezza di circa 25 minuti ciascuno e desidero tagliare alcuni secondi dall'inizio usando python.Tagliare una porzione di video - python

Cercando su di esso, mi sono imbattuto nel pacchetto moviepy per python. Il problema è che richiede molto tempo anche per un singolo video. Di seguito è riportato lo snippet di codice che uso per tagliare 7 secondi dall'inizio di un singolo video. Il processo di scrittura consuma molto tempo. C'è un modo migliore per tagliare i video usando python?

from moviepy.editor import * 
clip = VideoFileClip("video1.mp4").cutout(0, 7) 
clip.write_videofile("test.mp4") 

Per favore fatemi sapere se ho perso tutti i dettagli.

Qualsiasi aiuto è apprezzato. Grazie!

+0

Scrivere il video probabilmente significa che la libreria deve ricodificarlo, con conseguente perdita di qualità e prestazioni scadenti. È * possibile * tagliare via da un flusso video MP4 senza ricodificarlo, ma non è così semplice come sembra che tu pensi che sia, e non puoi tagliare punti arbitrari (solo prima dei fotogrammi chiave). Inoltre, non so se Moviepy può farlo. – cemper93

+0

Sono d'accordo con @ cemper93. MoviePy decodifica sempre i tuoi frame (su array Numpy) e li ricodifica al momento della scrittura, che richiede tempo. Il modo più semplice per tagliare senza ricodifica è usare FFMPEG per estrarre il segmento giusto dal mp4. Puoi farlo direttamente dalla riga di comando, o da Python, usando la libreria dei sottoprocessi per chiamare ffmpeg. – Zulko

+0

@ Zulko: Puoi scriverlo come risposta e aggiungere qualche spiegazione in più? Non ho idea di FFMPEG e della libreria di sottoprocesso di cui stai parlando. :/ –

risposta

11

Prova questo e dirci se è più veloce (se si può, sarà estratto il video direttamente utilizzando ffmpeg, senza decodifica e ricodifica):

from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip 
ffmpeg_extract_subclip("video1.mp4", t1, t2, targetname="test.mp4") 

Se questo non aiuta, avere uno sguardo allo code

+0

Questa corsa molto più veloce del mio codice, grazie mille! :) –

+0

Com'è la più piccola unità di tempo che può essere t1, t2? – mobcdi

+0

Questa soluzione è stata eseguita immediatamente. Molte grazie! –

Problemi correlati