Dividere un file MP4


34

Qual è il metodo più veloce e meno dispendioso in termini di risorse per suddividere un file MP4?

Ho provato ffmpeg ma ho ricevuto un errore:

$ 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

Cosa sto facendo di sbagliato e come divido correttamente un file mp4?


potresti per favore dirci il motivo per cui è necessario dividere il file? Condividere o riprodurre parti del file? O qualsiasi altro motivo?
theTuxRacer,

È per il caricamento su YouTube, quindi il tuo secondo suggerimento: riproduci parti del file ...
Asaf Chertkoff,

Risposte:


62

Con ffmpeg puoi dividere il file usando il seguente comando:

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

dove START inizia a posarsi in secondi o nel formato hh: mm: ss LENGTH è la lunghezza del pezzo in secondi o nel formato hh: mm: ss

Quindi dovrai eseguire questo comando alcune volte a seconda della durata del tuo video. Se diciamo che il tuo video dura 31 minuti e che vuoi dividerlo in blocchi di 15 minuti ecco come lo esegui:

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

Esiste uno script Python che puoi usare per farlo automaticamente (ovvero prende file video, dimensione del pezzo in pochi secondi e genera singoli file video riproducibili): http://icephoenix.us/notes-for-myself/auto-splitting-video -file-in-pari-blocchi-con-ffmpeg-e-python /


Grazie, ma ho bisogno di ulteriore aiuto con questo. Cerca la modifica che ho fatto nella mia risposta.
Asaf Chertkoff,

1
Questo ha funzionato per me: ffmpeg -ss 00:05:00 -t 00:16:00 -i largfile.MP4 -acodec copy -vcodec copy smallfile.MP4 qualcuno può spiegare perché?
Asaf Chertkoff,

Ho intenzione di speculare un po 'qui, ma sembra che il tuo file sorgente sia codificato con framerate che libx264 non supporta, quindi salta i frame. Penso che dovrebbe funzionare bene, ma a causa di ciò potrebbero esserci degli svantaggi nell'audio.
Alex,

può essere. vedrà ...
Asaf Chertkoff il

1
Il comando di Asaf ha funzionato anche per me. Sembrerebbe che le opzioni del codec dovrebbero venire dopo il file di input.
daithib8,

10

Se preferisci usare una gui, nei repository è disponibile avidemux. Definire i punti di taglio è molto più semplice in questo modo!

I marcatori di selezione definiscono la parte del video che verrà esportata, utilizzando "copia" in audio e video per evitare la ricodifica. Puoi anche scegliere il contenitore o cambiarlo (avi, mp4, mkv, ecc.).

Ho fatto un sacco di tagli su alcuni video da una macchina fotografica ed è stato istantaneo!


2
Avidemux è stato rimosso dal repository di Ubuntu 16.04.
naXa,

5

Non sei sicuro di quale sia il tuo bisogno, ma puoi inserirlo in un terminale: Per aprire un terminale, premi Ctrl+ Alt+T

split -b 4M file.mp4 part_file

Ciò dividerà i file in blocchi di 4 megabyte. Per ricreare nuovamente il file, digitare

cat part_file[a-c] > file.mp4

Si noti che ho digitato a-ctra parentesi, perché la divisione ha creato 3 file. nel tuo caso potresti dover vedere di più. Spiegherò con un esempio.

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

Ciò dimostra che ho un singolo file, di 9,3 MB. Per dividere, scrivo:

$ split -b 2M file.mp4 part_file

Dopo la divisione, ottengo i file come:

$ 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

Notare i due caratteri aggiunti al nome file.

Per recuperare il file:

$ cat part_filename[start-end][start-end] > file.mp4

3
Questo metodo sarà molto veloce ma non ti permetterà di giocare i singoli pezzi. Puoi usare ffmpeg per estrarre parti di un file video ma per dividerlo automaticamente in molti piccoli pezzi che sono tutti riproducibili individualmente senza riassemblarli in un intero probabilmente dovrai scrivere uno script con un file mp4. Posso darti un esempio se vuoi, ma se è solo per spostare il file, questa risposta è buona.
Slipstream,

@Slipstream - hai capito bene - devo dividerlo per YouTube. la mia macchina fotografica sta producendo MP4 ma devo dividerle perché sono più lunghe dei 15 minuti consentiti.
Asaf Chertkoff,

allora vuoi la risposta di alex qui sotto ...
Slipstream,

5

Usa mkvmerge dal pacchetto mkvtoolnix. Usa qualcosa di simile

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

Ciò dividerebbe il file in blocchi da 1 GB. Puoi anche usare le indicazioni del tempo.


Non l'ho mai usato prima, ma ho provato: geniale! velocità istantanea e tutto continua a essere leggibile. Grazie!
tuk0z,

Ciò è particolarmente utile se si desidera specificare una dimensione. Grazie!
BBQ Singular,

0

Se si tratta di una parte 2 di MP4, quindi con un approccio molto meticoloso, è possibile procedere al file senza encoder / decoder. Questa risposta è destinata a persone con un background di programmazione e un editor esadecimale che vogliono mantenere il file "" intatto "".

La prima parte del file è un mdat, la seconda è un moov, contenente i metadati utilizzati dal decodificatore per individuare blocchi, che contengono campioni (immagini e suoni codificati, non importanti da sapere). Poi ci sono STCO, STTS, STSC, ecc. Questo si chiama "atomi". Indicano quali sono l'offset, la lunghezza, ecc. Di ciascuno dei blocchi. Se fai un lavoro pulito, puoi creare diverse istanze del tuo video e versioni diverse con blocchi diversi. Il file sarà quindi riproducibile nei lettori e digerito sui siti Web di video. Se sei un programmatore, crea un parser MP4 o usane uno esistente per tenere traccia delle parti e dei loro offset. Ciò ti aiuterà a conoscere meglio il formato e a ricostruire automaticamente i file.


0

Il metodo più semplice e sicuro è usare MP4Box:

  1. # apt install gpac
  2. $ MP4Box -split 15 /home/asafche/Videos/myVideos/MAH00124.MP4(il parametro è tempo in secondi). Per altre possibilità di suddivisione, ad esempio per dimensione, consultare https://gpac.wp.imt.fr/mp4box/mp4box-documentation/ oMP4Box -h general

La concatenazione è altrettanto semplice.


0

Un altro strumento GUI open source , che può dividere i video e fare molto di più, è il freno a mano

Ad esempio, qui sto dividendo il mio video su 24,53 (mm: ss) e anche ritagliando il riquadro sul lato destro: inserisci qui la descrizione dell'immagine

Puoi vedere facilmente l'anteprima dell'output - con il pulsante "Anteprima".

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.