Jak mogę scalić lub połączyć dwa lub więcej plików MP4, tworząc kolejny plik MP4? [duplikować]

14

Jak mogę połączyć lub scalić 2 lub więcej plików MP4, również w końcowym pliku wyjściowym MP4?

Próbowałem w oknie DOS użyć polecenia KOPIUJ (gdzieś to przeczytałem), ale to nie działa dobrze.

Mª Isabel Teixeira
źródło
Zobacz także superuser.com/questions/43588/..., aby uzyskać więcej informacji. Nie jestem jednak pewien, czy sklasyfikowałbym to pytanie jako duplikat.
Przełom
1
uprzejmie dodaj swój system operacyjny jako tag.
tumchaaditya

Odpowiedzi:

12

MP4Box może to zrobić, chociaż możesz chcieć użyć do tego GUI, takiego jak YAMB lub My MP4Box GUI . (Uwaga: To nie jest mój program osobiście, to tylko nazwa.) Pliki binarne MP4Box dla Windows są dostępne z tej strony .

Przykład:

MP4Box -tmp $HOME -add vid.01.m4v \
    -cat vid.02.m4v -cat vid.03.m4v vid-out.mp4
afrazier
źródło
4

Polecam skorzystanie z ffmpeg , która jest dostępna dla systemów Mac OS X, Linux i Windows .

Oto dobry przykład połączenia dwóch filmów: http://www.ffmpeg.org/faq.html#SEC27

W ostatnim kroku musisz tylko zrobić kontener MP4 dla pliku wynikowego.

polemon
źródło
Jak rozumiem podaną odpowiedź ffmpeg FAQ, nie można tego zrobić z wideo MP4 (prawdopodobnie H.264), ponieważ nie jest to jeden z „uprzywilejowanych formatów”.
ttarchala
@ttarchala: Spróbowałbym, jeśli da się to zrobić. Wcześniej konwertowałem na MP4 z FFmpeg, ale nigdy nie połączyłem dwóch filmów. Ponadto: chciałbym zauważyć, że FFmpeg rozwija się bardzo szybko. Co nie działało z jedną wersją, może działać tylko w następnej.
polemon
1
Nie wszystkie wersje FFMPEG mają obsługę MP4. Po pierwsze, jest to opatentowana technologia i zapewne nielegalna jest dystrybucja koderów MP4 w USA bez uiszczania opłaty. Jednak wiele kompilacji może to zrobić.
CarlF,
@CarlF: W przypadku Linuksa i Mac OS X tak naprawdę nie jest to problem. Kod może być dystrybuowany dowolnie, więc w zasadzie każdy, kto buduje swój własny FFmpeg, wszystko jest w porządku. Co do patentowania, chciałbym podzielić się komentarzem: nie znajdę teraz strony pod ręką, ale pierwszy patent, który wygasł dla AAC (który jest częściowo zdefiniowany w MPEG-4), jest w 2022 roku. I to jest tylko pierwszy, jest wiele innych, które muszą wygasnąć, aż będzie całkowicie legalne ...
polemon
4

Możesz spróbować to zrobić za pomocą 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

To niczego nie koduje ponownie, umieszcza je w nowym kontenerze strumienia transportowego, co ułatwia ich konkatenację, a następnie konkatenuje je z powrotem do MP4. Jeśli output.mp4 już istnieje, polecenie zakończy się niepowodzeniem. Powyższa wersja używa nazwanych potoków, jeśli korzystasz z systemu, który nie obsługuje plików pośrednich:

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
zła
źródło
co jeśli nie jest to h264, ale mpeg4?
Edison,
2

Aktualizacja: Właśnie sprawdziłem avidemux, gdy go zainstalowałem, po przeczytaniu innej odpowiedzi. To jest to, czego szukasz (nie sądziłem, że może zrobić MP4 z powodu swojej nazwy…).

Myślę, że VirtualDubMod jest w stanie obsługiwać mp4, chociaż go nie użyłem, więc na pewno nie wiem.

Może chcesz sprawdzić MeGUI . Jest to dość złożona i bogata w funkcje aplikacja i narzędzia.

Narzędzie do osadzania w kontenerze (w twoim przypadku mp4) nazywa się multiplekserem, ale prawdopodobnie nie można ich połączyć.

Możesz używać go w połączeniu z VirtualDub. Virtualdub do konkatenacji strumieni wideo i multiplekser, aby uczynić go ponownie mp4 (bez konieczności ponownego kodowania).

Kissaki
źródło
1

Robię to za pomocą mencodera, po przekonwertowaniu ich na avi za pomocą ffmpeg

oto prosty skrypt, zakładając, że masz 15 plików o nazwie 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

Twoje zdrowie

laplace
źródło
1

Oto polecenie:

ffmpeg -i concat:"video1.ts|video2.ts"
rogerdpack
źródło
Czy ten znak potoku wymaga ucieczki? Czy też całkowicie błędnie interpretuję to polecenie?
killermist
trzeba było uciec. ups.
rogerdpack