MP4 파일 분할


34

MP4 파일을 분할하는 가장 빠르고 가장 적은 리소스를 소비하는 방법은 무엇입니까?

ffmpeg를 시도했지만 오류가 발생했습니다.

$ 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

내가 뭘 잘못하고 있으며 어떻게 mp4 파일을 올바르게 분할합니까?


파일을 분할해야하는 이유를 알려주시겠습니까? 파일의 일부를 공유하거나 재생합니까? 아니면 다른 이유가 있습니까?
theTuxRacer

그것은 YouTube에 업로드하기위한 것이므로 두 번째 제안-파일의 일부를 재생 ...
Asaf Chertkoff

답변:


62

ffmpeg를 사용하면 다음 명령을 사용하여 파일을 분할 할 수 있습니다.

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

여기서 START는 초 단위로 또는 hh : mm : ss 형식으로 포지셔닝을 시작합니다. LENGTH는 청크 길이 (초) 또는 형식 hh : mm : ss입니다.

따라서 비디오 시간에 따라이 명령을 몇 번 실행해야합니다. 비디오의 길이가 31 분이고 15 분 단위로 분할하려는 경우 다음과 같이 실행하십시오.

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

이것을 자동으로 수행하는 python 스크립트가 있습니다 (예 : 비디오 파일, 초 단위의 청크 크기 및 개별 재생 가능한 비디오 파일 생성) : http://icephoenix.us/notes-for-myself/auto-splitting-video ffmpeg-and-python /과 같은 파일에 동일한 청크


고맙지 만 이것에 대한 추가 도움이 필요합니다. 내 답변에서 편집 한 내용을 찾으십시오.
Asaf Chertkoff

1
이것은 나를 위해 일했습니다 : ffmpeg -ss 00:05:00 -t 00:16:00 -i largfile.MP4 -acodec copy -vcodec copy smallfile.MP4 누군가가 이유를 설명 할 수 있습니까?
Asaf Chertkoff

여기에서는 조금 추측하지만 소스 파일이 libx264가 지원하지 않는 프레임 속도로 인코딩 된 것처럼 보이므로 프레임을 건너 뜁니다. 나는 이것이 잘 작동해야한다고 생각하지만, 이것 때문에 오디오에 문제가있을 수 있습니다.
Alex

아마도. ... 볼
Asaf Chertkoff

1
Asaf의 명령도 저에게 효과적이었습니다. 코덱 옵션은 입력 파일 다음에 와야합니다.
daithib8

10

GUI 사용을 선호하는 경우 리포지토리에서 avidemux를 사용할 수 있습니다. 이 방법으로 절단 점을 정의하는 것이 훨씬 쉽습니다!

선택 마커는 오디오에서 "복사"를 사용하여 내보낼 비디오의 일부를 정의하며 비디오는 재 인코딩을 피합니다. 컨테이너를 선택하거나 변경할 수도 있습니다 (avi, mp4, mkv 등).

나는 카메라에서 일부 비디오에 대한 많은 컷을했고 그것은 순간적이었다!


2
Avidemux는 Ubuntu 16.04의 저장소에서 제거되었습니다.
naXa

5

필요한 것은 확실하지 않지만 터미널에 입력 할 수 있습니다. 터미널을 열려면 Ctrl+ Alt+를 누릅니다.T

split -b 4M file.mp4 part_file

파일이 4MB 단위로 분할됩니다. 파일을 다시 작성하려면 다음을 입력하십시오.

cat part_file[a-c] > file.mp4

a-c분할이 3 개의 파일을 작성했기 때문에 대괄호 안에 입력 한 것을 알 수 있습니다. 귀하의 경우 더 많은 것을보아야 할 수도 있습니다. 예를 들어 설명하겠습니다.

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

이것은 내가 9.3MB의 단일 파일을 가지고 있음을 보여줍니다. 분할하려면 다음을 입력하십시오.

$ split -b 2M file.mp4 part_file

분할 후 파일을 다음과 같이 얻습니다.

$ 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

파일 이름에 추가 된 두 문자를 확인하십시오.

파일을 다시 받으려면 :

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

3
이 방법은 매우 빠르지 만 개별 청크를 재생할 수는 없습니다. ffmpeg를 사용하여 비디오 파일의 일부를 추출 할 수 있지만 전체를 다시 어셈블하지 않고 개별적으로 재생할 수있는 많은 작은 청크로 자동으로 분할하려면 mp4 파일로 스크립트를 작성해야합니다. 원하는 경우 예제를 제공 할 수 있지만 파일을 옮기는 것만 으로도이 대답이 좋습니다.
슬립 스트림

@ 슬립 스트림-당신이 맞아-유튜브에 대해 분할해야합니다. 내 카메라가 MP4를 생성하고 있지만 15 분 이상 허용되는 원인을 분할해야합니다.
Asaf Chertkoff

그럼 당신은 아래에 alex의 대답을 원합니다 ...
Slipstream

5

mkvtoolnix 패키지에서 mkvmerge를 사용하십시오. 같은 것을 사용하십시오

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

파일이 1GB 블록으로 분할됩니다. 시간 표시도 사용할 수 있습니다.


나는 그것을 전에 사용해 본 적이 없지만 시도했다 : 훌륭합니다! 즉각적인 속도 와 모든 것을 계속 읽을 수 있습니다. 감사!
tuk0z 2016 년

크기를 지정하려는 경우 특히 유용합니다. 감사!
BBQ Singular

0

이것이 MP4 파트 2 인 경우 매우 세심한 접근 방식을 사용하면 인코더 / 디코더없이 파일을 진행할 수 있습니다. 이 답변은 프로그래밍 배경과 ""손상되지 않은 "파일을 유지하려는 16 진수 편집기를 가진 사람들을위한 것입니다.

파일의 첫 번째 부분은 mdat이고, 두 번째 부분은 샘플을 포함하는 청크를 찾기 위해 디코더에서 사용하는 메타 데이터를 포함하는 moov입니다. 그리고 STCO, STTS, STSC 등이 있습니다. 이것을 "원자"라고합니다. 각 청크의 오프셋, 길이 등을 나타냅니다. 깨끗한 작업을 수행하면 비디오 인스턴스를 여러 개 만들고 다른 청크로 다른 버전을 만들 수 있습니다. 그런 다음 파일을 플레이어에서 재생할 수 있으며 비디오 웹 사이트에서 다이제스트됩니다. 코더 인 경우 MP4 파서를 작성하거나 기존 파서를 사용하여 부품 및 오프셋을 추적하십시오. 그러면 형식에 대해 더 많이 알고 파일을 자동으로 다시 작성하는 데 도움이됩니다.


0

가장 쉽고 확실한 방법은 MP4Box를 사용하는 것입니다.

  1. # apt install gpac
  2. $ MP4Box -split 15 /home/asafche/Videos/myVideos/MAH00124.MP4(매개 변수는 초 단위의 시간입니다). 다른 분할 가능성의 경우, 크기별로 예를 들어 볼 https://gpac.wp.imt.fr/mp4box/mp4box-documentation/ 또는MP4Box -h general

연결도 비슷합니다.


0

비디오를 분할하고 더 많은 작업을 수행 할 수있는 또 다른 오픈 소스 GUI 도구수동 브레이크입니다.

예를 들어, 여기에서 비디오를 24.53 (mm : ss)로 분할하고 오른쪽에서 프레임을 자릅니다. 여기에 이미지 설명을 입력하십시오

"미리보기"버튼을 사용하면 출력 미리보기를 쉽게 볼 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.