FFMPEG overlay filter parzialmente conversion


0

Sto cercando di applicare il filtro di sovrapposizione sul video per unire una singola immagine per alcuni secondi. Dal momento che la durata del mio video è di circa 1 min, sembra inutile quando FFMPEG tenta di ricodificare nuovamente l'intero video invece di ricodificare la parte del video che deve essere modificata.

Il mio comando video blend è:

ffmpeg -i beach.mp4 -i logo.png 
-filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" 
-pix_fmt yuv420p -c:a copy output.mp4

Qualcuno sa come posso evitarlo? (Stavo pensando di dividere il video, ma sembra che il video non possa essere diviso accuratamente specificando l'inizio e il fotogramma finale)


Puoi codificare il segmento da 20 secondi con la sovrapposizione come un file separato, quindi tagliare i primi ~ 20 secondi dall'originale con -c copy. Quindi utilizzare il concat demuxer unirmi a loro. Si noti che i due segmenti risultanti da unire devono corrispondere ai parametri (codec, base dei tempi, ecc.) E sarà necessario tagliare su un fotogramma chiave per ottenere i migliori risultati. Un sacco di lavoro per un video di un minuto. La mia pigrizia mi direbbe semplicemente ricodificare tutto o semplicemente non occuparmi della sovrapposizione. Se stai usando un player basato sul web puoi farlo aggiungere il logo.
— llogan

@LordNeckbeard Grazie, ma questa operazione verrà eseguita molte volte, non solo una volta. Ecco perché ho bisogno di prestazioni.
— dajuric

Ho pensato che fosse una possibilità, ma non l'hai menzionato nella domanda. Dovresti mostrare l'output completo della console dal tuo comando.
— llogan

@LordNeckbeard Ci scusiamo per non averlo menzionato. Questa era l'uscita completa; Non ho scritto nient'altro, ho bloccato il primo passo.
— dajuric

L'overlay deve accadere esattamente per 20 secondi?
— Gyan

Risposte:


2

Dato che stai bene con qualche imprecisione, ti suggerisco il seguente metodo:

Segmenta l'input video

ffmpeg -i beach.mp4 -c copy -segment_time 20 -f segment beach_seg%02d.mp4

Sovrapposizione logo sul primo segmento

ffmpeg -i beach_seg00.mp4 -loop 1 -i logo.png 
-filter_complex "[0:v][1:v] overlay=25:25:shortest=1" 
-pix_fmt yuv420p -c:a copy overlay.mp4

Segmenti concatenati

Per prima cosa, prepara un file di testo segments.txt

file 'overlay.mp4'
file 'beach_seg01.mp4'
file 'beach_seg02.mp4'
file 'beach_seg03.mp4'
...

Quindi, concat

ffmpeg -f concat -i segments.txt -c copy beach_with_logo.mp4

L'avvertimento qui è che la base temporale di overlay.mp4 potrebbe non corrispondere a quella dei segmenti della spiaggia. In tal caso, controlla la base dei tempi di uno dei segmenti della spiaggia (il tbn ) e aggiungi -video_track_timescale <tbn> al comando di sovrapposizione.


Grazie mille (Mulvya e LordNeckbeard)! Puoi semplicemente spiegarmi se taglio un video in tre parti e ho bisogno di elaborare il pezzo medio con un software, e quel software richiede l'offset del fotogramma, come dovrei ottenere l'offset del fotogramma? (Ho usato force_keyframes per impostare i fotogrammi chiave e poi ho eseguito il taglio - è OK?)
— dajuric
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.