FFMPEG concat non include un'immagine in loop (usando named pipe)


0

Dopo molte ricerche e prove, ho scritto un comando che posso adattare affinché più fonti possano essere concatenate usando FFMPEG. Sto riscontrando un problema con l'aggiunta di immagini in loop (come video) nella concatenazione.

Ecco il comando:

ffmpeg -y -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1 2> /dev/null & \
ffmpeg -y -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2 2> /dev/null & \
ffmpeg -y -f lavfi -i anullsrc  -loop 1 -f image2 -i input3.jpg -r 30 -t 3 -pix_fmt yuvj420p -map 0:a -map 1:v -f mpegts temp3 2> /dev/null & \
ffmpeg -y -f mpegts -i "concat:temp1|temp2|temp3" -bsf:a aac_adtstoasc out.mp4

Il risultato finale dovrebbe essere di 2 video, quindi un'immagine in loop per 3 secondi (senza audio), tutti concatenati in un lungo video. Invece, tutto ciò che ottengo è un singolo video concatenato che contiene i primi due video, ma non l'immagine in loop.


Ecco l'output di FFMPEG: d.pr/n/1aHGB
Daniel Jacob Archer

Mostra l'output completo della console di:ffmpeg -i input1.mp4 -i input2.mp4 -i input3.jpg
llogan

@LordNeckbeard cosa speri con quel comando? Sono solo input: intendi ffmpeg concat con quegli input?
Daniel Jacob Archer,

Voglio vedere tutte le informazioni sugli input. Ho il sospetto che abbiano bisogno di un po 'di lavoro prima di essere concatenati.
Llogan il

Ah ok. Ecco l'output: d.pr/n/19Dgv
Daniel Jacob Archer il

Risposte:


0

Sembra che i primi 3 comandi del tuo script siano in background, quindi il tuo script esegue i comandi praticamente contemporaneamente. Non vi è alcuna garanzia che i comandi 1-3 vengano completati prima che il 4 ° concatena il loro output. La rimozione di e commerciali e barre rovesciate finali farà sì che lo script attenda il completamento di ciascun comando prima di iniziare il successivo. Se ogni comando utilizza la maggior parte della larghezza di banda di I / O, questa modifica non rallenterà molto lo script. Altrimenti, ecco un metodo per eseguire i primi 3 comandi in background ma attendere fino a quando non hanno finito di eseguire il 4 ° (non testato).

{ ./prog1 ; ./prog2 ; ./prog3 ; } && ./prog4

In realtà sto seguendo da vicino la documentazione concatenata di FFMPEG, quindi non so che dovrebbe essere scritto come hai suggerito ... Anche la soluzione proposta richiederebbe la scrittura di script per ciascun comando.
Daniel Jacob Archer,

Non intendevo suggerire che sarebbero stati necessari più "prog". "prog1", ad esempio, è un segnaposto per "ffmpeg -y -i input1.mp4 -c copia -bsf: v h264_mp4toannexb -f mpegts temp1". (Dovresti / non dovresti fare più comandi.) Il mio punto generale era esplorare il controllo del lavoro inerente a bash, ad esempio i lavori in background e le sue implicazioni. Non ho i documenti ffmpeg, ma penso che se provi lo snippet di codice (ovviamente inserendo i tuoi comandi ffmpeg per intero invece di "prog1", ad esempio) potresti essere piacevolmente sorpreso. Buona fortuna a te.
Erik Bryer,
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.