tagliando con ffmpeg risulta in pochi secondi di schermo nero, come posso risolvere questo problema?


8

sto usando questo comando per tagliare un segmento da un video dalla riga di comando

ffmpeg -i %1 -vcodec copy -acodec copy -ss %2 -t %3 %~n1_cut%~x1

e lo chiamo così

cut.bat video.mp4 001:23:45:678 10

e come previsto ottengo un video_cut.mp4 con 10 secondi del video originale, il problema è che pochi secondi del file risultante sono schermo nero con audio, perché succede e come posso ripararlo?


% ~ n1_cut% ~ x1 cosa significa questa parte del comando?
Scipione Africano,

@ScipioAfricanus %~n1espande% 1 in un nome file o se è presente solo un percorso (senza barra rovesciata finale) - l'ultima cartella in quel percorso ed %~x1espande% 1 solo in un file eXtension - .txt source: superuser.com/questions/ 224416 /…
Shayan,

Risposte:


8

La maggior parte dei video utilizza codec che eseguono la compressione temporale, quindi un punto di arresto specifico può fare affidamento sui frame prima (e dopo) di quel punto di decodifica per essere decodificati correttamente. Pertanto, quando si utilizza ffmpeg per tagliare i video e utilizzare la copymodalità, ffmpeg deve includere tutti i fotogrammi prima e dopo il segmento ritagliato necessari per decodificare correttamente il segmento.

Quindi, hai due opzioni, usa la modalità copia ma imposta un interruttore che consentirà a tutti i giocatori di riprodurre correttamente questi file

ffmpeg -ss %2 -t %3 -i %1 -vcodec copy -acodec copy -avoid_negative_ts make_zero %~n1_cut%~x1

(ciò comporterà probabilmente un output che inizia prima del tuo cutpoint)

o ricodificare i flussi

ffmpeg -ss %2 -t %3 -i %1 %~n1_cut%~x1

Sebbene la ricodifica sia più lenta, produrrà risultati migliori, poiché con l'altra soluzione il video potrebbe essere più lungo di quanto specificato -tnell'opzione.
totymedli,

@Gyan Cosa fa %? Ho provato a cercare ffmpeg.org/ffmpeg.html ma non riesco a trovare l'utilizzo.
Shayan

Come suggerito dalla tua risposta, ho usato sia prima -ssche -tprima -ie ha funzionato, prima ho messo solo -ssprima -ie -tlo seguivo, quindi non ha funzionato.
Shayan

1

https://github.com/mifi/lossless-cut/pull/13

Quando eseguo ffmpeg con gli argomenti in questo ordine -i ... -ss ... -t ..., produce un file video che non ha video per alcuni secondi iniziali. (per quanto posso capire questo è perché non cerca un fotogramma chiave?)

Se cambio l'ordine in -ss ... -i ... -t ..., i video di taglio risultanti vengono riprodotti correttamente.

Mio ffmpeg -version


Ho provato -ssprima -ima non ha funzionato sul mio file mp4.
Shayan

Ha funzionato per me, grazie. Modificato semplicemente l'ordine dei parametri. ffmpeg versione 3.2.12-1 ~ deb9u1
shukshin.ivan

In realtà, questo sposta solo la durata in bianco alla fine del video
Honghao Zhang,
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.