I tuoi file non si uniranno correttamente perché qualcosa non corrisponde.
Come molti altri ho avuto problemi con la sincronizzazione del suono correttamente nei video uniti. e mentre MP4Box funziona bene se le clip hanno specifiche identiche, in alcuni casi verrei colpito dal "Nessun binario di destinazione adatto trovato - creandone uno nuovo", nel qual caso Totem (aka Video) non riprodurrebbe quel segmento nel file unito Dopo alcune prove, errori e ulteriori ricerche ho sviluppato il seguente metodo per gestire i video che finora ha funzionato ogni volta con una qualità accettabile (per me).
Se le dimensioni dei fotogrammi non corrispondono (errori di unione relativi alle tracce video):
Normalizza il video senza interrompere l'audio (-c: una copia) impostando i vincoli (divisibile per 8 per la massima compatibilità del codec) per segmenti senza pari
Comandi di esempio
width=856
height=480
avconv -i input.mp4 -filter:v "scale=iw*min($width/iw\,$height/ih):ih*min($width/iw\,$height/ih), pad=$width:$height:($width-iw*min($width/iw\,$height/ih))/2:($height-ih*min($width/iw\,$height/ih))/2" -c:a copy output.mp4
Se l'audio non corrisponde (errori di unione relativi alle tracce audio):
Normalizza audio
Elabora l'audio senza interrompere il video (copia c: v) in modo che tutte le clip corrispondano al codec, alla frequenza e al bitrate desiderati con c: una frequenza -ar del codec come -ar 48000 e la velocità in bit con b: a 128k per stereo (64K per canale sembra un buon obiettivo) o qualunque corrispondenza.
Esempio: avconv -i input.mp4 -c:v copy -c:a libmp3lame -ar 48000 b:a 128k output.mp4
(nota che libmp3lame è un codec per l'audio mp3) Puoi ottenere un elenco di codificatori supportati da avconv emettendo il comando avconv -codecs
o restringere le cose a un codice specifico avconv -codecs|grep *codecname*
per esempioavconv -codecs|grep mp3
Ora che abbiamo normalizzato i file, possiamo unirli. In questo esempio, unirò i file con MP4Box. Se non lo hai, puoi ottenerlo emettendo il comandosudo apt-get install gpac
Unisci i file con il comando MP4Box file1.mp4 -cat file2.mp4 -cat file3.mp4 -cat file4.mp4 -out joinedfile.mp4
(nota che non esiste un gatto prima del primo file e che ogni file aggiuntivo è preceduto da -cat e il file di destinazione è preceduto da -out)
Se si utilizza MP4Box (consigliato per MP4) per unirsi, è possibile che sia necessario elaborare tutte le clip con avconv se le specifiche sembrano corrispondere o meno per evitare l'errore "Nessuna traccia di destinazione adatta trovata - crearne una nuova (tipo vide)"
Nota: ho riscontrato che Avidemux ha problemi con i video codificati utilizzando i file H.264 / AVC (per totem) a causa dei fotogrammi B come riferimento. Ciò sembra comportare l'audio non sincronizzato quando ci si unisce anche quando si sceglie di copiare sia l'audio che il video senza remux. Si arresta in modo anomalo quando non si sceglie la modalità provvisoria e non è sincronizzato quando si utilizza la modalità provvisoria
fonti:
/superuser/547296/resizing-videos-with-ffmpeg-avconv-to-fit-into-static-sized-player
/programming/20703160/problems-with-setting-constant-bitrate-by-using-avconv
https://trac.ffmpeg.org/wiki/Encode/AAC#fdk_cbr
Nota: per quanto ne so altri formati (contenitori) hanno vincoli simili per la corrispondenza delle dimensioni dei fotogrammi e delle frequenze audio, quindi questo può funzionare anche per avi se si tenta di unirsi tramite cat o mencoder dopo aver normalizzato video e audio .
Opzionale: utilizzare il freno a mano per ricodificare il file unito per dimensioni inferiori, se lo si desidera con un framerate variabile e un'impostazione di qualità costante di 25 (impostazioni suggerite - regolare secondo le esigenze del materiale e le aspettative di qualità)