Dzielenie pliku MP4

34

Jaka jest najszybsza i najmniej zasobochłonna metoda dzielenia pliku MP4?

Próbowałem ffmpeg, ale wystąpił błąd:

$ ffmpeg -vcodec copy -ss 0 -t 00:10:00 -i /home/asafche/Videos/myVideos/MAH00124.MP4 /home/asafche/Videos/myVideos/eh.mp4
FFmpeg version SVN-r0.5.1-4:0.5.1-1ubuntu1.1, Copyright (c) 2000-2009 Fabrice Bellard, et al.
configuration: --extra-version=4:0.5.1-1ubuntu1.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 1 / 52.20. 1
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Mar 31 2011 18:53:20, gcc: 4.4.3

Seems stream 0 codec frame rate differs from container frame rate: 119.88 (120000/1001) -> 59.94 (60000/1001)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/asafche/Videos/myVideos/MAH00124.MP4':
  Duration: 00:15:35.96, start: 0.000000, bitrate: 5664 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 1280x720, 59.94 tbr, 59.94 tbn, 119.88 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16
Output #0, mp4, to '/home/asafche/Videos/myVideos/eh.mp4':
    Stream #0.0(und): Video: libx264, yuv420p, 1280x720, q=2-31, 90k tbn, 59.94 tbc
    Stream #0.1(und): Audio: 0x0000, 48000 Hz, stereo, s16, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Unsupported codec for output stream #0.1

Co robię źle i jak prawidłowo podzielić plik MP4?

Asaf Chertkoff
źródło
czy możesz nam powiedzieć, dlaczego musisz podzielić plik? Czy to udostępnianie, czy odtwarzanie części pliku? Czy z jakiegokolwiek innego powodu?
theTuxRacer
To jest do przesłania na youtube, dlatego twoja druga sugestia - odtworzyć części pliku ...
Asaf Chertkoff

Odpowiedzi:

62

Za pomocą ffmpeg możesz podzielić plik za pomocą następującego polecenia:

ffmpeg -i ORIGINALFILE.mp4 -acodec copy -vcodec copy -ss START -t LENGTH OUTFILE.mp4

gdzie START zaczyna pozycjonowanie w sekundach lub w formacie gg: mm: ss DŁUGOŚĆ to długość porcji w sekundach lub w formacie gg: mm: ss

Będziesz musiał uruchomić to polecenie kilka razy, w zależności od długości filmu. Jeśli powiedzmy, że Twój film ma 31 minut i chcesz go podzielić na 15-minutowe fragmenty, oto jak go uruchamiasz:

ffmpeg -i ORIGINALFILE.mp4 -acodec copy -vcodec copy -ss 0 -t 00:15:00 OUTFILE-1.mp4
ffmpeg -i ORIGINALFILE.mp4 -acodec copy -vcodec copy -ss 00:15:00 -t 00:15:00 OUTFILE-2.mp4
ffmpeg -i ORIGINALFILE.mp4 -acodec copy -vcodec copy -ss 00:30:00 -t 00:15:00 OUTFILE-3.mp4

Istnieje skrypt Pythona, którego można użyć automatycznie (np. Pobiera plik wideo, wielkość porcji w kilka sekund i generuje pojedyncze odtwarzane pliki wideo): http://icephoenix.us/notes-for-myself/auto-splitting-video -plik-w-równych-porcjach-z-ffmpeg-and-python /

Alex
źródło
Dzięki, ale potrzebuję dalszej pomocy z tym. Poszukaj edycji, którą zrobiłem w mojej odpowiedzi.
Asaf Chertkoff
1
To działało dla mnie: ffmpeg -ss 00:05:00 -t 00:16:00 -i largfile.MP4 -acodec copy -vcodec copy smallfile.MP4 może ktoś wytłumaczyć dlaczego?
Asaf Chertkoff 18.04.11
Spekuluję tutaj trochę, ale wygląda na to, że twój plik źródłowy jest zakodowany z szybkością klatek, której nie obsługuje libx264, więc pomija klatki. Myślę, że to powinno działać dobrze, ale z tego powodu mogą wystąpić pewne wpadki z dźwiękiem.
Alex
może. zobaczymy ...
Asaf Chertkoff,
1
Polecenie Asafa również dla mnie zadziałało. Wydaje się, że opcje kodeka powinny pojawić się po pliku wejściowym.
daithib8
10

Jeśli wolisz korzystać z GUI, avidemux jest dostępny w repozytoriach. W ten sposób definiowanie punktów cięcia jest znacznie łatwiejsze!

Znaczniki wyboru określają część wideo, która zostanie wyeksportowana, użycie „kopiuj” w dźwięku i wideo pozwala uniknąć ponownego kodowania. Możesz również wybrać kontener lub zmienić go (avi, mp4, mkv itp.).

Zrobiłem kilka cięć na niektórych filmach z kamery i było to natychmiastowe!

użytkownik24362
źródło
2
Avidemux został usunięty z repozytorium Ubuntu 16.04.
naXa
5

Nie wiesz, czego potrzebujesz, ale możesz wpisać to w terminalu: Aby otworzyć terminal, naciśnij Ctrl + Alt+T

split -b 4M file.mp4 part_file

Spowoduje to podzielenie plików na fragmenty o wielkości 4 megabajtów. Aby ponownie utworzyć plik, wpisz

cat part_file[a-c] > file.mp4

Zauważ, że wpisałem a-cw nawiasie, ponieważ podział utworzył 3 pliki. w twoim przypadku być może będziesz musiał zobaczyć więcej.Wyjaśnię na przykładzie.

$ ls -lh
-rwxr-xr-x 1 root        root        9.3M 2011-04-17 20:09 file.mp4

To pokazuje, że mam jeden plik, 9,3 MB. Aby podzielić, piszę:

$ split -b 2M file.mp4 part_file

Po podzieleniu otrzymuję pliki jako:

$ ls -lh
-rwxr-xr-x 1 root        root        9.3M 2011-04-17 20:09 file.mp4
-rw-r--r-- 1 thetuxracer thetuxracer 2.0M 2011-04-17 20:12 part_fileaa
-rw-r--r-- 1 thetuxracer thetuxracer 2.0M 2011-04-17 20:12 part_fileab
-rw-r--r-- 1 thetuxracer thetuxracer 2.0M 2011-04-17 20:12 part_fileac
-rw-r--r-- 1 thetuxracer thetuxracer 2.0M 2011-04-17 20:12 part_filead
-rw-r--r-- 1 thetuxracer thetuxracer 1.3M 2011-04-17 20:12 part_fileae

Zwróć uwagę na dwa znaki dołączone do nazwy pliku.

Aby odzyskać plik:

$ cat part_filename[start-end][start-end] > file.mp4
theTuxRacer
źródło
3
Ta metoda będzie bardzo szybka, ale nie pozwoli ci grać w poszczególne fragmenty. Możesz użyć ffmpeg do wyodrębnienia części pliku wideo, ale w celu automatycznego podzielenia go na wiele małych fragmentów, z których wszystkie można odtwarzać oddzielnie bez ponownego złożenia ich w całość, prawdopodobnie będziesz musiał napisać skrypt z plikiem mp4. Mogę podać przykład, jeśli chcesz, ale jeśli chcesz po prostu przenieść plik, to odpowiedź jest dobra.
Slipstream
@Slipstream - masz rację - muszę podzielić na YouTube. mój aparat produkuje MP4, ale muszę je rozdzielić, ponieważ są dłuższe niż 15 minut.
Asaf Chertkoff,
to chcesz odpowiedzi Alexa poniżej ...
Slipstream
5

Użyj mkvmerge z pakietu mkvtoolnix. Użyj czegoś takiego

mkvmerge -o outputprefix --split 1G origfile.mp4

To podzieli Twój plik na bloki 1 GB. Możesz także użyć wskazań czasu.

rtega
źródło
Nigdy wcześniej go nie używałem, ale próbowałem: genialnie! natychmiastowa prędkość i wszystko jest czytelne. Dzięki!
tuk0z
Jest to szczególnie przydatne, jeśli chcesz określić rozmiar. Dzięki!
BBQ Singular
0

Jeśli jest to MP4 część 2, to przy bardzo skrupulatnym podejściu możesz kontynuować plik bez kodera / dekodera. Ta odpowiedź jest przeznaczona dla osób z wykształceniem programistycznym i edytorem szesnastkowym, które chcą zachować plik „nienaruszony”.

Pierwsza część pliku to mdat, druga to moov, zawierający metadane używane przez dekoder do lokalizowania fragmentów, które zawierają próbki (zakodowane obrazy i dźwięk, o których nie warto wiedzieć). Są też STCO, STTS, STSC itp. Nazywa się to „atomami”. Wskazują, jakie jest przesunięcie, długość itp. Każdej z części. Jeśli wykonasz czystą robotę, możesz zrobić kilka wystąpień swojego filmu i inną wersję z różnymi fragmentami. Plik będzie następnie odtwarzany w odtwarzaczach i przetwarzany na stronach wideo. Jeśli jesteś programistą, zbuduj parser MP4 lub użyj istniejącego, aby śledzić części i ich przesunięcia. Pomoże Ci to dowiedzieć się więcej o tym formacie i automatycznie odbudować pliki.

Léon Pelletier
źródło
0

Najłatwiejszą i niezawodną metodą jest użycie MP4Box:

  1. # apt install gpac
  2. $ MP4Box -split 15 /home/asafche/Videos/myVideos/MAH00124.MP4(parametrem jest czas w sekundach). Inne możliwości podziału, na przykład według wielkości, patrz https://gpac.wp.imt.fr/mp4box/mp4box-documentation/ lubMP4Box -h general

Łączenie jest podobnie proste.

Csaba Toth
źródło
0

Innym narzędziem GUI typu open source , które może dzielić filmy i robić znacznie więcej, jest hamulec ręczny

Na przykład tutaj dzielę wideo na 24,53 (mm: ss), a także kadruję ramkę po prawej stronie: wprowadź opis zdjęcia tutaj

Możesz łatwo wyświetlić podgląd danych wyjściowych - za pomocą przycisku „Podgląd”.

Noam Manos
źródło