2016-02-01 17 views
6

Ho un file video .mp4, ho bisogno di tagliarlo, comunque non importa come lo faccio, il video tagliato viene codificato di nuovo che si traduce in video rumoroso.Tagliare i file mp4 senza codificarlo di nuovo

Quello che ho provato:

  1. Apri video con Matlab, leggo e scrivo cornici solo i fotogrammi che voglio avere in video tagliato, io uso 'MPEG-4' opzione.

  2. Taglia video utilizzando Windows Movie Maker.

  3. Taglia video utilizzando VirtualDub.

Nei primi due scenari il filmato di mp4 originale viene nuovamente codificato dopo averlo ritagliato. Non ho potuto aprire i file mp4 in VirtualDub.

Quindi quale sarebbe il modo più semplice per tagliare un video senza re-inserirlo?

+0

@rayryeng si potrebbe dare maggiori dettagli? – guneykayim

+3

Mi scuso, ho fatto una dichiarazione sbagliata. Non è possibile ritagliare senza ricodificare. Il motivo è perché è principalmente dovuto al modo in cui funziona MPEG-4. Le informazioni di movimento sono codificate essenzialmente in blob. Stai seguendo il modo in cui i BLOB si spostano sullo spazio e il ritaglio modificherà il modo in cui queste informazioni vengono archiviate. Non hai altra scelta che ricodificare. Vedi questo post per maggiori dettagli: http://video.stackexchange.com/questions/12762/crop-video-in-ffmpeg-without-re-encoding – rayryeng

+0

@rayryeng Quindi se ho un video mp4 e mi piacerebbe crop middle 20 secondi, non importa quello che faccio, perderò sempre le informazioni quando lo farò. È giusto? – guneykayim

risposta

3

È possibile eseguire lo split e ricodificare in un unico comando.

Creare un file di testo, list.txt,

come questo

file 'in.mp4' 
inpoint 48.101 
outpoint 67.459 
file 'in.mp4' 
inpoint 76.178 
outpoint 86.399 
file 'in.mp4' 
inpoint 112.140 
outpoint 125.031 

quindi eseguire,

ffmpeg -f concat -i list.txt -an -crf 18 out_merged.mp4 
+0

Non voglio ricodificare? – guneykayim

+0

Il primo passaggio nel flusso di lavoro è già ricodificato, ad esempio la transcodifica. – Mulvya

+0

Quindi non è quello che voglio, come posso farlo senza ricodificare? Non voglio perdere di nuovo le informazioni codificando un file .mp4 già codificato. – guneykayim

2

ho risolto con i seguenti comandi:

ffmpeg.exe -ss 48.101 -t 19.358 -i in.mp4 -an out_part1.mp4 
ffmpeg.exe -ss 76.178 -t 10.221 -i in.mp4 -an out_part2.mp4 
ffmpeg.exe -ss 112.140 -t 12.891 -i in.mp4 -an out_part3.mp4 

ffmpeg -i out_part1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intrmdt1.ts 
ffmpeg -i out_part2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intrmdt2.ts 
ffmpeg -i out_part3.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intrmdt3.ts 

ffmpeg -i "concat:intrmdt1.ts|intrmdt2.ts|intrmdt3.ts" -c copy out_merged.mp4 

E qualche spiegazione:

  1. Dare -ss (start time) e -t (duration) opzioni prima -i (input) opzione evita inutili decodifica.
  2. Non utilizzare -c copy fornisce transcodifica quindi risulta un taglio più preciso (ottenuto da here).
  3. Ho usato perché non avevo bisogno dell'audio, se hai bisogno di audio ometti questa opzione.
  4. Prima di concatenare i video tagliati risultanti, avevo bisogno di transcodificarli in flussi di trasporto mpeg, per ottenere una concatenazione senza perdite (per maggiori dettagli si può vedere questo link).
+0

Il punto 1 è errato. Eliminare '-c copy' fa in modo che transcode, -'ss-' e '-t' prima che' -i' eviti la decodifica non necessaria. – Mulvya

+0

@ Mulvya che ne dici adesso? – guneykayim

+0

Buono adesso. Grazie. – Mulvya

Problemi correlati