Dividindo um arquivo MP4

29

Qual é o método que consome mais rápido e menos recursos para dividir um arquivo MP4?

Eu tentei o ffmpeg, mas recebi um erro:

$ 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

O que estou fazendo errado e como dividir corretamente um arquivo mp4?

    
por Asaf Chertkoff 17.04.2011 / 14:57

6 respostas

53

Com o ffmpeg você pode dividir o arquivo usando o seguinte comando:

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

onde START está começando a postar em segundos ou no formato hh: mm: ss LENGTH é o tamanho do pedaço em segundos ou no formato hh: mm: ss

Então, você precisará executar este comando algumas vezes, dependendo de quanto tempo seu vídeo. Se, digamos, seu vídeo tiver 31 minutos e você quiser dividi-lo em blocos de 15 min, veja como você o executa:

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

Existe um script python que você pode usar para fazer isso automaticamente (isto é, pega arquivo de vídeo, tamanho de partes em segundos e gera arquivos de vídeo individuais): link

    
por Alex 17.04.2011 / 21:55
9

Se você preferir usar um gui, há o avidemux disponível nos repositórios. Definir os pontos de corte é muito mais fácil assim!

Os marcadores de seleção definem a parte do vídeo que será exportada, usando "copiar" em áudio e vídeo para evitar a reencodificação. Você também pode escolher o container ou alterá-lo (avi, mp4, mkv, etc).

Eu fiz um monte de cortes em alguns vídeos de uma câmera e foi instantâneo!

    
por user24362 03.09.2011 / 21:23
4

Não tenho certeza de qual é sua necessidade, mas você pode digitar isso em um terminal: Para abrir um terminal, pressione Ctrl + Alt + T

split -b 4M file.mp4 part_file

Isso dividirá os arquivos em blocos de 4 megabytes. Para recriar o arquivo novamente, digite

cat part_file[a-c] > file.mp4

Repare que eu digitei a-c no colchete, porque a divisão criou 3 arquivos. no seu caso, você pode ter que ver mais.

Vou explicar com um exemplo.

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

Isso mostra que eu tenho um único arquivo, de 9,3 MB. Para dividir, eu digito:

$ split -b 2M file.mp4 part_file

Após a divisão, recebo os arquivos 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 os dois caracteres anexados ao nome do arquivo.

Para recuperar o arquivo:

$ cat part_filename[start-end][start-end] > file.mp4
    
por theTuxRacer 17.04.2011 / 16:47
4

Use o mkvmerge do pacote mkvtoolnix. Use algo como

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

Isso dividiria seu arquivo em blocos de 1 GB. Você também pode usar indicações de tempo.

    
por rtega 12.11.2015 / 10:00
0

Se este é um MP4 parte 2, então com uma abordagem muito meticulosa, você pode continuar o arquivo sem codificador / decodificador. Esta resposta é destinada a pessoas com um fundo de programação e um editor hexadecimal que deseja manter o arquivo "" intacto "".

A primeira parte do arquivo é um mdat, o segundo é um moov, contendo metadados usados pelo decodificador para localizar pedaços, que contêm amostras (imagens codificadas e som, não é importante saber). Depois, há STCO, STTS, STSC, etc. Isso é chamado de "átomos". Eles indicam o que são o deslocamento, comprimento, etc, de cada um dos pedaços. Se você fizer um trabalho limpo, poderá criar várias instâncias do seu vídeo e uma versão diferente com partes diferentes. O arquivo será jogável em jogadores e digerido em sites de vídeo. Se você é um programador, então construa um analisador MP4 ou use um existente para monitorar as partes e seus deslocamentos. Isso ajudará você a saber mais sobre o formato e a reconstruir arquivos automaticamente.

    
por Léon Pelletier 13.06.2013 / 01:22
0

O método mais fácil e infalível é usar o MP4Box:

  1. # apt install gpac
  2. $ MP4Box -split 15 /home/asafche/Videos/myVideos/MAH00124.MP4 (o parâmetro é tempo em segundos). Para outras possibilidades de divisão, por exemplo, por tamanho, consulte link ou MP4Box -h general

A concatenação é similarmente simples.

    
por Csaba Toth 09.01.2018 / 02:57