Como mesclar ou concatenar dois ou mais arquivos MP4 criando outro arquivo MP4? [duplicado]

14

Como concatenar ou mesclar 2 ou mais arquivos MP4, também em um arquivo MP4 de saída final?

Eu tentei na janela do DOS usar o comando COPY (eu li em algum lugar), mas ele não funciona bem.

Mª Isabel Teixeira
fonte
Consulte também superuser.com/questions/43588/… para obter mais informações. Não tenho certeza se eu classificaria essa pergunta como uma duplicata.
Breakthrough
1
adicione seu sistema operacional como uma tag.
tumchaaditya

Respostas:

12

O MP4Box pode fazer isso, embora você queira usar uma GUI como YAMB ou My MP4Box GUI . (Nota: não é o meu programa pessoalmente, é apenas o nome.) Os binários MP4Box para Windows estão disponíveis neste site .

Exemplo:

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

Eu recomendaria usind ffmpeg , que está disponível para Mac OS X, Linux e Windows .

Aqui está um bom exemplo de como concatenar dois filmes: http://www.ffmpeg.org/faq.html#SEC27

Na última etapa, você só precisa criar um contêiner MP4 para o arquivo resultante.

polemon
fonte
Pelo que entendi a resposta às perguntas frequentes do ffmpeg, isso não pode ser feito com o vídeo MP4 (presumivelmente H.264), porque não é um dos "formatos privilegiados".
Ttarchala 1/10/10
@ ttarchala: Eu tentaria se isso pudesse ser feito. Já converti em MP4 com FFmpeg antes, mas nunca concatenou dois filmes. Além disso: gostaria de salientar que o FFmpeg tem um desenvolvimento muito rápido. O que não funcionou com uma versão, pode funcionar apenas na próxima.
Polemon
1
Nem todas as compilações do FFMPEG têm suporte para MP4. Por um lado, é uma tecnologia patenteada e, sem dúvida, é ilegal distribuir codificadores MP4 nos EUA sem pagar uma taxa. No entanto, muitas construções podem fazer isso.
CarlF 23/09
@CarlF: Quanto ao Linux e Mac OS X, isso não é realmente um problema. O código pode ser distribuído livremente; portanto, basicamente, quem constrói seu próprio FFmpeg, tudo é bom. Quanto ao patenteamento, gostaria de compartilhar um comentário: não vou encontrar o site imediatamente, mas a primeira patente a expirar para o AAC (que é parcialmente definida no MPEG-4) é em 2022. E isso é apenas o primeiro, há muitos mais que necessidade para expirar até que é completamente legal ...
Polemon
4

Você pode tentar fazer isso com o 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

Isso não recodifica nada, coloca-os em um novo contêiner de fluxo de transporte, o que os torna mais fáceis de concatenar e depois os concatenam novamente em um MP4. Se o output.mp4 já existir, o comando falhará. A versão acima usa pipes nomeados, você está em um sistema que não suporta aqueles que você precisaria usar arquivos intermediários:

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
evilsoup
fonte
e se não for h264, mas mpeg4?
Edison
2

Atualização: Apenas verifiquei o avidemux como eu o instalei, depois de ler a outra resposta. É o que você está procurando (não achava que pudesse fazer MP4 por causa do nome…).

Acho que o VirtualDubMod é compatível com mp4, mas não o usei, então não sei ao certo.

Você pode querer conferir o MeGUI . É um aplicativo e ferramentas bastante complexos e ricos em recursos.

A ferramenta para incorporar em um contêiner (mp4 no seu caso) é chamada muxer, que provavelmente não é possível concatená-los.

Você pode usá-lo em combinação com o VirtualDub. Virtualdub para concatenar os fluxos de vídeo e o muxer para torná-lo um mp4 novamente (sem a necessidade de recodificar).

Kissaki
fonte
1

Estou fazendo isso com o mencoder, depois de convertê-los para avi com ffmpeg

aqui está um script simples, supondo que você tenha 15 arquivos, denominados 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

Felicidades

Laplace
fonte
1

Aqui está o comando:

ffmpeg -i concat:"video1.ts|video2.ts"
rogerdpack
fonte
Esse caractere de tubo precisa ser escapado? Ou estou interpretando mal completamente esse comando?
Killermist
precisava escapar. oops.
Rogerdpack