Dividir un archivo MP4

34

¿Cuál es el método más rápido y que consume menos recursos para dividir un archivo MP4?

Intenté ffmpeg pero recibí un error:

$ 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

¿Qué estoy haciendo mal y cómo divido correctamente un archivo mp4?

Asaf Chertkoff
fuente
¿podría decirnos por qué necesita dividir el archivo? ¿Es para compartir o reproducir partes del archivo? O alguna otra razón?
theTuxRacer
Es para subir a YouTube, por lo tanto, su segunda sugerencia: reproducir partes del archivo ...
Asaf Chertkoff

Respuestas:

62

Con ffmpeg puedes dividir archivos usando el siguiente comando:

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

donde START comienza a publicar en segundos o en formato hh: mm: ss LENGTH es la longitud del fragmento en segundos o en formato hh: mm: ss

Por lo tanto, deberá ejecutar este comando varias veces dependiendo de la duración de su video. Si digamos que su video dura 31 minutos y desea dividirlo en fragmentos de 15 minutos, así es como lo ejecuta:

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

Hay un script de Python que puede usar que lo hace automáticamente (es decir, toma el archivo de video, el tamaño del fragmento en segundos y genera archivos de video reproducibles individuales): http://icephoenix.us/notes-for-myself/auto-splitting-video -file-in-equal-chunks-with-ffmpeg-and-python /

Alex
fuente
Gracias, pero necesito más ayuda con esto. Busque la edición que hice en mi respuesta.
Asaf Chertkoff
1
Esto funcionó para mí: ffmpeg -ss 00:05:00 -t 00:16:00 -i largfile.MP4 -acodec copy -vcodec copy smallfile.MP4 ¿alguien puede explicar por qué?
Asaf Chertkoff
Voy a especular aquí un poco, pero parece que su archivo fuente está codificado con una velocidad de fotogramas que libx264 no admite, por lo que omite fotogramas. Creo que esto debería funcionar bien, pero puede haber algunos percances con el audio debido a esto.
Alex
tal vez. verá ...
Asaf Chertkoff
1
La orden de Asaf también funcionó para mí. Parece que las opciones de códec deberían aparecer después del archivo de entrada.
daithib8
10

Si prefiere usar una interfaz gráfica de usuario, hay avidemux disponible en los repositorios. ¡Definir los puntos de corte es mucho más fácil de esta manera!

Los marcadores de selección definen la parte del video que se exportará, el uso de "copiar" en audio y video evita la recodificación. También puede elegir el contenedor o cambiarlo (avi, mp4, mkv, etc.).

¡He hecho un montón de cortes en algunos videos de una cámara y fue instantáneo!

user24362
fuente
2
Avidemux se ha eliminado del repositorio de Ubuntu 16.04.
naXa
5

No estoy seguro de cuál es su necesidad, pero puede escribir esto en un terminal: Para abrir un terminal, presione Ctrl+ Alt+T

split -b 4M file.mp4 part_file

Esto dividirá los archivos en trozos de 4 megabytes. Para volver a crear el archivo, escriba

cat part_file[a-c] > file.mp4

Tenga en cuenta que he escrito a-cen el paréntesis, porque la división creó 3 archivos. en su caso, quizás tenga que ver más. Lo explicaré con un ejemplo.

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

Esto muestra que tengo un solo archivo, de 9.3 MB. Para dividir, escribo:

$ split -b 2M file.mp4 part_file

Después de dividir, obtengo los archivos como:

$ 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

Observe los dos caracteres agregados al nombre del archivo.

Para recuperar el archivo:

$ cat part_filename[start-end][start-end] > file.mp4
theTuxRacer
fuente
3
Este método será muy rápido, pero no le permitirá reproducir los fragmentos individuales. Puede usar ffmpeg para extraer partes de un archivo de video, pero para dividirlo automáticamente en muchos fragmentos pequeños que se pueden reproducir individualmente sin volver a ensamblarlos en un conjunto, probablemente necesite escribir un script con un archivo mp4. Puedo darle un ejemplo si lo desea, pero si es solo para mover el archivo, entonces esta respuesta es buena.
Slipstream
@Slipstream - tienes razón - necesito dividirlo para youtube. mi cámara está produciendo MP4 pero necesito dividirlos porque son más largos que los 15 minutos permitidos.
Asaf Chertkoff
entonces quieres la respuesta de Alex a continuación ...
Slipstream
5

Use mkvmerge del paquete mkvtoolnix. Usa algo como

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

Esto dividiría su archivo en bloques de 1 GB. También puede usar indicaciones de tiempo.

rtega
fuente
Nunca lo he usado antes, pero lo intenté: ¡genial! velocidad instantánea y todo sigue siendo legible. ¡Gracias!
tuk0z
Esto es particularmente útil si desea especificar un tamaño. ¡Gracias!
BBQ Singular
0

Si se trata de una parte 2 de MP4, con un enfoque muy meticuloso, puede continuar el archivo sin codificador / decodificador. Esta respuesta está destinada a personas con experiencia en programación y un editor hexadecimal que desean mantener el archivo "" intacto "".

La primera parte del archivo es un mdat, la segunda es un moov, que contiene metadatos utilizados por el decodificador para localizar fragmentos, que contienen muestras (imágenes codificadas y sonido, no es importante saberlo). Luego están STCO, STTS, STSC, etc. Esto se llama "átomos". Indican cuál es el desplazamiento, la longitud, etc., de cada uno de los fragmentos. Si hace un trabajo limpio, puede hacer varias instancias de su video y diferentes versiones con diferentes fragmentos. El archivo se podrá reproducir en reproductores y se digiere en sitios web de video. Si es un programador, cree un analizador MP4 o use uno existente para realizar un seguimiento de las partes y sus compensaciones. Eso lo ayudará a saber más sobre el formato y a reconstruir los archivos automáticamente.

Léon Pelletier
fuente
0

El método más fácil e infalible es usar MP4Box:

  1. # apt install gpac
  2. $ MP4Box -split 15 /home/asafche/Videos/myVideos/MAH00124.MP4(el parámetro es el tiempo en segundos). Para otras posibilidades divididas, por ejemplo, por tamaño, consulte https://gpac.wp.imt.fr/mp4box/mp4box-documentation/ oMP4Box -h general

La concatenación es igualmente simple.

Csaba Toth
fuente
0

Otra herramienta GUI de código abierto , que puede dividir videos y hacer mucho más, es el freno de mano

Por ejemplo, aquí estoy dividiendo mi video en 24.53 (mm: ss), y también recortando el marco en el lado derecho: ingrese la descripción de la imagen aquí

Puede ver la vista previa de la salida fácilmente, con el botón "Vista previa".

Noam Manos
fuente