Come posso unire o concatenare due o più file MP4 creando un altro file MP4? [duplicare]


14

Come posso concatenare o unire 2 o più file MP4, anche in un file MP4 di output finale?

Ho provato nella finestra DOS per usare il comando COPY (l'ho letto da qualche parte) ma non funziona bene.


Vedi anche superuser.com/questions/43588/… per maggiori informazioni. Non sono sicuro se classificherei questa domanda come duplicata.
Breakthrough

1
aggiungi gentilmente il tuo sistema operativo come tag.
tumchaaditya,

Risposte:


12

MP4Box può farlo, anche se potresti voler usare una GUI come YAMB o My MP4Box GUI . (NB: Non è il mio programma personalmente, questo è solo il nome.) I binari MP4Box per Windows sono disponibili da questo sito .

Esempio:

MP4Box -tmp $HOME -add vid.01.m4v \
    -cat vid.02.m4v -cat vid.03.m4v vid-out.mp4

4

Consiglierei usind ffmpeg , che è disponibile per Mac OS X, Linux e Windows .

Ecco un buon esempio su come concatenare due film: http://www.ffmpeg.org/faq.html#SEC27

Nell'ultimo passaggio, devi solo assicurarti di creare un contenitore MP4, per il file risultante.


Come capisco la risposta alle FAQ di ffmpeg, questo non può essere fatto con il video MP4 (presumibilmente H.264), perché non è uno dei "formati privilegiati".
ttarchala,

@ttarchala: proverei se si può fare. Ho convertito in MP4 con FFmpeg prima, ma non ho mai concatenato due film. Inoltre: vorrei sottolineare che FFmpeg ha uno sviluppo molto rapido. Ciò che non ha funzionato con una versione, potrebbe funzionare solo nella successiva.
polemon

1
Non tutte le build di FFMPEG hanno il supporto MP4. Per prima cosa è una tecnologia brevettata e probabilmente è illegale distribuire encoder MP4 negli Stati Uniti senza pagare una tassa. Tuttavia, molte build possono farlo.
CarlF,

@CarlF: quanto a Linux e Mac OS X, questo non è un problema, davvero. Il codice può essere distribuito liberamente, quindi in pratica, chiunque costruisca il proprio FFmpeg, va tutto bene. Per quanto riguarda i brevetti, vorrei condividere un commento: non trovo il sito fuori mano in questo momento, ma il primo brevetto che scade per AAC (che è parzialmente definito in MPEG-4), è nel 2022. E questo è solo il primo, ce ne sono molti altri che devono scadere fino a quando non è completamente legale ...
polemon

4

Puoi provare a farlo con ffmpeg:

mkfifo temp0 temp1
ffmpeg -i input0.mp4 -c copy -bsf h264_mp4toannexb -f mpegts -y temp0 2> /dev/null & \
ffmpeg -i input1.mp4 -c copy -bsf h264_mp4toannexb -f mpegts -y temp1 2> /dev/null & \
ffmpeg -f mpegts -i "concat:temp0|temp1" -c copy -absf aac_adtstoasc output.mp4

Questo non ricodifica nulla, li inserisce in un nuovo contenitore del flusso di trasporto, il che li rende più facili da concatenare e quindi li ricatena in un MP4. Se output.mp4 esiste già, il comando fallirà. La versione sopra utilizza named pipe, è su un sistema che non supporta quelli che dovresti usare file intermedi:

ffmpeg -i input0.mp4 -c copy -bsf h264_mp4toannexb temp0.ts
ffmpeg -i input1.mp4 -c copy -bsf h264_mp4toannexb temp1.ts
ffmpeg -i "concat:temp0.ts|temp1.ts" -c copy -absf aac_adtstoasc output.mp4

cosa succede se non è h264 ma mpeg4?
Edison,

2

Aggiornamento: Ho appena controllato avidemux come avevo installato, dopo aver letto l'altra risposta. È quello che stai cercando (non pensavo che potesse fare MP4 a causa del suo nome ...).

Penso che VirtualDubMod sia compatibile con mp4, anche se non l'ho usato, quindi non lo so per certo.

Potresti voler dare un'occhiata a MeGUI . È un'app e strumenti piuttosto complessi e ricchi di funzionalità.

Lo strumento per l'incorporamento in un contenitore (mp4 nel tuo caso) si chiama muxer, ma probabilmente non è possibile concatenarli.

Puoi usarlo in combinazione con VirtualDub. Virtualdub per concatenare i flussi video e il muxer per renderlo nuovamente un mp4 (senza dover ricodificare).


1

Lo sto facendo con mencoder, dopo averli convertiti in avi con ffmpeg

ecco uno script semplice, supponendo che tu abbia 15 file, chiamato 01.mp4 ... 15.mp4

#!/bin/bash
for j in `seq -w 1 15`;
do
    echo converting file $j.avi
    ffmpeg -i $j.mp4 $j.avi        

    echo adding file $j.avi to list
    z="$z $j.avi"
done 

echo doing append
mencoder -oac copy -ovc copy $z -o all.avi

Saluti


1

Ecco il comando:

ffmpeg -i concat:"video1.ts|video2.ts"

Quel personaggio di pipe deve essere evaso? O sto completamente fraintendendo quel comando?
assassino

doveva essere evaso. oops.
rogerdpack,
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.