ffmpeg: taglia più file di input cercando un file di output [chiuso]

1

Ho una lista di file video (caricati dal database), ognuno con l'ora di inizio e di fine dell'intervallo richiesto:

  # file   begin  end
  v1.mp4   1:01   2:01
  v2.mp4   3:02   3:32
  v3.mp4   2:03   5:23

E ho bisogno di creare un singolo file video contenente questi intervalli:

 [0:00]---v1---[2:00]---v2---[2:30]---v3---[5:50]

Preferisco usig ffmpeg, dal momento che è installato sul server. Il programma chiamante è scritto in PHP.

È facile tagliare un input su un output (l'escape dell'argomento viene rimosso per chiarezza):

  exec("ffmpeg -ss $begin -i $input_file -ss $begin -c copy $output_file");

C'è un modo più semplice di eseguire ffmpeg per ogni intervallo e poi eseguirlo ancora una volta per concatenare insieme le clip preparate? Non mi piace davvero avere molti file temporanei o gestire una complessa gestione dei processi.

    
posta Josef Kufner 31.05.2014 - 15:28
fonte

1 risposta

-2

Soluzione n. 1:

ffmpeg -ss 1:01 -t 60 -i v1.mp4 -ss 3:02 -t 30 -i v2.mp4 -ss 2:03 -t 200 -i v3.mp4 \
-filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1" \
-y mixed.mp4

Soluzione n. 2:

ffmpeg -i v1.mp4 -i v2.mp4 -i v3.mp4 -filter_complex "\
[0:v]trim=61:121,setpts=PTS-STARTPTS[v1]; \
[0:a]atrim=61:121,asetpts=PTS-STARTPTS[a1]; \
[1:v]trim=182:212,setpts=PTS-STARTPTS[v2]; \
[1:a]atrim=182:212,asetpts=PTS-STARTPTS[a2]; \
[2:v]trim=123:323,setpts=PTS-STARTPTS[v3]; \
[2:a]atrim=123:323,asetpts=PTS-STARTPTS[a3]; \
[v1][a1][v2][a2][v3][a3]concat=n=3:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" -y mixed.mp4
    
risposta data 11.11.2017 - 09:45
fonte

Leggi altre domande sui tag