Puoi separare un clip di 1 minuto da un file più grande, senza transcodificarlo?
-
08-07-2019 - |
Domanda
Ho un sito che consente alle persone di caricare file video di grandi dimensioni in vari formati (avi, mp4, mkv e flv). Devo generare un "campione" di 1 minuto dal file più grande che è stato caricato e l'esempio deve essere nello stesso formato, avere le stesse dimensioni dei frame e la velocità in bit del file originale. C'è un modo per tagliare semplicemente una sezione del file in un nuovo file? Preferibilmente in ffmpeg (o in qualsiasi altro strumento se ffmpeg è impossibile).
Soluzione
Per prima cosa ti consigliamo di capire come funzionano effettivamente i file video. Ecco una serie di tutorial che spiegano che: Overly Guida semplicistica al video su Internet .
Quindi, puoi provare una varietà di strumenti che potrebbero aiutarti a tagliare un campione. Uno è flvtool (se il tuo input è FLV) o FFmpeg . Con FFmpeg puoi specificare l'ora di inizio e l'ora di fine e tenterà di ritagliare esattamente ciò che chiedi (ma dovrà trovare il fotogramma chiave più vicino per iniziare a tagliare).
Ecco il comando FFmpeg per leggere un file chiamato input.flv, avviare 15 secondi nel video, quindi tagliare i successivi 60 secondi, ma altrimenti mantenere gli stessi parametri per il codice audio e il codec video e scriverlo su un file di output:
ffmpeg -i input.flv -ss 15 -t 60 -acodec copy -vcodec copy output.flv
Infine, se vuoi, puoi scrivere il codice del computer in C o C ++ (usando le librerie libav di FFmpeg) o Java (usando Xuggler ) per farlo programmaticamente, ma è piuttosto avanzato per il tuo caso d'uso.
Altri suggerimenti
In caso di problemi con la sincronizzazione automatica di video e auto come me, potrebbe essere utile quanto segue (disponibile su un altro sito Web):
ffmpeg -sameq -i file.flv -ss 00:01:00 -t 00:00:30 -ac 2 -r 25 -copyts output.flv
Come osserva Evan, l'approccio nella risposta accettata può comportare la perdita della sincronizzazione A / V. Tuttavia, la sua soluzione non è corretta perché -sameq
è stato rimosso.
Come indicato in https://trac.ffmpeg.org/wiki/Seeking il < L'opzione code> -ss dovrebbe precedere -i
non dopo. Ciò ha risolto il problema per me.
L'opzione successiva è usare l'opzione -fs
. Esempio:
ff -i ip.mkv -fs 500M -c copy ~/Movies/reservoir/carbohydrates.mkv
Estrai 500 megabyte (500 × 1000 × 1000 byte + "sovraccarico") dalla fonte selezionata. -Basato sulla dimensione dei file, come si può dire
Un amore. E rispetto.