m4v 또는 mp4 비디오 파일을 열고 고치는 방법?


59

어제 나는 휴대 전화로 장면을 촬영하고 있었지만 갑자기 응용 프로그램이 중단되었고 m4v를 열려고하면 그것이 손상되었다고 말합니다.

내 PC에 비디오 파일 (약 36MB)을 다운로드했으며이를 열고 복구하려고합니다. 그것을 할 수있는 방법을 제안 할 수 있습니까?

FFMPEG 정보

의견에서 제안한 대로이 명령으로 해당 파일에 대해 FFMPEG가 말한 내용을 확인하십시오.

ffmpeg.exe -i VID_20120425_144739.m4v -c:v copy -c:a copy out.mp4 2> log.txt

결과는 다음과 같습니다.

ffmpeg version N-40126-ga4b58fd Copyright (c) 2000-2012 the FFmpeg developers
  built on Apr 26 2012 03:29:50 with gcc 4.6.3
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      51. 47.100 / 51. 47.100
  libavcodec     54. 15.100 / 54. 15.100
  libavformat    54.  3.100 / 54.  3.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 72.100 /  2. 72.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 11.100 /  0. 11.100
  libpostproc    52.  0.100 / 52.  0.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 003fc940] moov atom not found
VID_20120425_144739.m4v: Invalid data found when processing input

최신 두 줄이 빨간색으로 표시됩니다.


내 OS는 Windows 7이지만 필요한 경우 Linux 기반 배포판으로 가상 머신을 준비 할 수 있습니다.
Drake

@slhck 도움을 주셔서 감사합니다. 제안하고 업데이트 한 내용을 수행했습니다.
Drake

7
아, 내가 기대했던 것입니다. MOOV 아톰은 MP4 / M4V 컨테이너 내부의 원시 비디오 스트림에 액세스하는 데 필요한 데이터입니다. 온라인에는 "비디오 복구"도구가 많이 있지만 대부분의 도구를 신뢰하지는 않습니다. 당신은 확실히 그들에게 주사를 줄 수 있습니다 – 아무것도 지불하지 마십시오. 유망한 것으로 보이는 것은 Untrunk 입니다.이 정확한 문제 (즉, MOOV 원자가 없음)로 코딩 된 것 같습니다. 또는 AtomicParsley . 행운을 빕니다!
slhck

1
AtomicParsley로 깨진 mp4를 어떻게 수정합니까?
chovy

답변:


60

Untrunc를 사용하여 손상된 mp4 또는 m4v 파일을 복구 할 수 있습니다 .

이 방법의 경우 동일한 장치에서 다른 비디오 파일이 필요 하지 않습니다 깨진합니다.

설치하는 방법 untrunc

컴파일하려면 Linux 설치 (이상적으로 Ubuntu)와 명령 줄을 사용하는 기본 기능이 필요합니다. 이 부분을 건너 뛰고 untruncDocker를 통해 실행할 수도 있습니다 ( 아래 답변 참조 ).

이것이해야 할 일입니다 :

  1. 이 명령으로 일부 전제 조건 라이브러리를 설치하십시오.

    sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev

  2. GitHub 저장소에서 Untrunc의 소스 코드를 가져옵니다 (하나의 방법 선택).

    • wget https://github.com/ponchio/untrunc/archive/master.zip && unzip master.zip && cd untrunc-master
    • 또는 git clone https://github.com/ponchio/untrunc.git && cd untrunc
  3. 이 명령을 사용하여 소스 코드를 컴파일하십시오 (모두 한 줄).

    g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -L/usr/local/lib -lavformat -lavcodec -lavutil

    (이 단계를 건너 뛰고 준비된 실행 파일을 사용해 볼 수는 있지만 효과가 없었습니다)

  4. 그런 다음 실제로 비디오를 수정할 수 있습니다. 깨진 비디오와 예제 비디오가 모두 필요합니다.

비디오를 수정하는 방법

동일한 카메라에서 이상적으로는 고장난 카메라만큼 긴 다른 작업 비디오를 찾으십시오. 가능한 경우 동일한 해결책 (필자는 아니지만 이것이 도움이 될 수 있다고 생각합니다).

Untrunc를 압축 해제하고 컴파일 한 폴더에서이 명령을 실행하지만 /path/to/...비트를 2 개의 비디오 파일로 바꾸십시오 .

./untrunc /path/to/working-video.m4v /path/to/broken-video.m4v

그런 다음 이탈하고 희망적으로 재생 가능한 파일을 생성해야합니다. broken-video_fixed.m4v

그게 다야!

이제 VLC Media Player가 파일을 재생할 수 있습니다. 그러나 잘못된 길이 정보를보고 할 수 있습니다 (Untrunc는 이것을 추측 / 해결하려고하지만 항상 올바르게하지는 않습니다). 이 문제를 해결하려면 다른 프로그램을 통해 비디오를 다시 인코딩하십시오.

[Untrunc를 시도하는 제안에 대한 slhck의 의견에 감사드립니다.]

[이 정확한 문제를 해결하기 위해 Untrunc를 코딩 한 Federico Ponchio에게 많은 감사를드립니다.]


여기 전체 지침을 제공해 주셔서 감사합니다.
slhck

3
감사합니다 @Alex 링크를 업데이트했습니다. github의 Readme는이 답변을 기반으로합니다!
참새

1
Windows 기반 솔루션을 제공합니다. 리눅스 배포판에서 인터넷에 접속할 수 없으므로 < superuser.com/questions/938185/recover-incomplete-video-files >
RogUE

2
FWIW 이것은 나에게 재생 가능한 비디오를 생성하지는 않았지만 와인을 통해 recover_mp4_to_h264 를 실행하면 잘 작동했습니다.
컴파일러

1
Untrunc가 나를 위해 일했지만 숨겨진 .untrunc 폴더의 하위 디렉토리에 두 비디오 파일을 모두 넣어야했습니다 untrunc-master. 그런 다음 다음을 실행하십시오. ./untrunc goodfile.mp4 badfile.mp4 2GB 파일의 경우 약 3 분이 걸렸으며 오디오 만 다시 동기화해야했습니다. 다른 모든 것이 괜찮 았습니다.
user8547

8

다른 사람 이이 문제를 발견하면 앱 참새가 이야기했지만 시도해 보지 못했습니다 (개발자 저장소에서 만든 버그 보고서 참조). 어쩌면 이것은 mp4 파일이 아니라 MOV 파일이기 때문일 수 있습니다 ...

나를 위해 도움이 된 것은이 게시물입니다 : http://muzso.hu/2012/11/14/how-to-fix-a-broken-mp4-mov-video-ffmpeg-reports-moov-atom-not-found

그들은 "HD 비디오 복구 유틸리티"( http://grauonline.de/cmsimple2_6/en/?Solutions:HD_Video_Repair_Utility ) 라는 프로그램에 연결되어 Treasured ( http://aeroquartet.com/movierepair/repair ) 보다 훨씬 저렴합니다. . 그들은 심지어 비용이 들지 않은 이전 버전 (버전 1.5)이 있다고 지적했습니다 ( http://nagasoft.cn/download/videorepair1.5.zip )!

버전 1.5를 사용하여 파일을 복구하려고 시도하고 부분적으로 작동했습니다. ffmpeg를 사용하여 다시 인코딩 한 후 (일부 오류가 있음) 오디오의 일부가 사라 졌다는 것을 깨달았습니다. 로그에는 (유감스럽게도 비디오 복구 유틸리티에 일부가 있음) 주어진 시간이 지난 후에는 더 이상 오디오에 대한 언급이 없었습니다. 나는 그대로 가지고 갈게 ...


3
DROPBOX URL이 죽었습니다. 대안을 찾았습니다 : nagasoft.cn/download/videorepair1.5.zip
T.Todua

2
@ T.Todua, 알려 주셔서 감사합니다. 드롭 박스 링크를 제공 한 링크로 교체했습니다.
SimonSimCity

8

docker(모든 주요 운영 체제에서 사용 가능)을 설치 하고 실행할 수 있습니다.

docker run -v $(pwd):/vol -it synctree/untrunc /vol/GOOD-reference-file.MP4 /vol/BAD-corrupt-file.mdt

구문은 Linux 또는 macOS에서 Bash 용입니다. 여기, GOOD-reference-file.MP4그리고 BAD-corrupt-file.md5현재 디렉토리에 있어야하며 디렉토리는 /volDocker 컨테이너에 마운트됩니다 .

더 자세한 설명은 다른 주석을 읽으십시오.

이것은 나를 위해 가장 빠르다!


감사 @slhck는이 Dockerfile사람이 당신의 컴퓨터에 실행하기 전에이 실행할 것을보고 싶다면 여기로 볼 수 있습니다 : github.com/synctree/docker-untrunc 또한이 Dockerfile실제에 untrunc저장소 지금 - 나도 시험 또는 비교하지 않은 : 상세 그들하지만 완전성을 위해 여기 언급 github.com/ponchio/untrunc/blob/master/Dockerfile
sparrowt

7

@sparrowt 최근 Ubuntu 16.10 설치에서 현재 지침이 작동하지 않았습니다. 잘라내기를 해결하는 동안 다음 오류가 발생했습니다.

track.cpp: In member function ‘int Codec::getLength(unsigned char*, int)’:
track.cpp:204:40: error: ‘avcodec_alloc_frame’ was not declared in this scope
   AVFrame *frame = avcodec_alloc_frame();

untrunc 저장소에 설명 된대로 Ubuntu 저장소의 버전을 사용하는 대신 libav를 별도로 다운로드해야 할 수도 있습니다. 다음 코드는 저에게 효과적이었습니다.

sudo apt-get install unzip yasm g++ zlib1g-dev libbz2-dev
cd /tmp/
wget https://github.com/ponchio/untrunc/archive/master.zip
unzip master.zip
cd untrunc-master
wget http://libav.org/releases/libav-12.2.tar.xz
tar xvf libav-12.2.tar.xz
cd libav-12.2
./configure
make
cd ..
g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -I./libav-12.2 -L./libav-12.2/libavformat -lavformat -L./libav-12.2/libavcodec -lavcodec -L./libav-12.2/libavresample -lavresample -L./libav-12.2/libavutil -lavutil -lpthread -lz -lbz2
./untrunc /path/to/working-video.mp4 /path/to/broken-video.mp4

이것은 나를 위해 일한 broken-video_fixed.mp4라는 파일을 만들었습니다. 이 스레드를 시작해 주셔서 감사합니다.


1
감사합니다! untrunc 컴파일 라인에서 "`BZ2_bzDecompressInit '에 대한 정의되지 않은 참조"라인을 따라 약간의 오류가 발생
Andrew Smart

큰 파일을 처리 할 수 ​​없습니다. 그냥 포기 해
Ken Sharp

libav에 포함되어 h264dec.h있습니까? 때문에은 track.cpp을 포함하려고하고 내가 어디를 찾을 수 없습니다 : /
x29a

그 의존성은 커밋 하였다 github.com/ponchio/untrunc/commit/... 2017 난 당신이 donwload해야 지금 생각 년 10 월 10 일 libav - 12.2보다는 libav-0.8.7
freeseek

마침내 우분투 14.04.5 LTS에서 작동하도록했습니다. 실행했다 sudo apt-get install yasm, sudo apt-get install libbz2-dev추가, '위해 clock_gettime'에 대한 정의되지 않은 참조를 극복하고, -lrt의 끝에 g++명령 행 (참조 stackoverflow.com/a/2418175/550712을 ). 내 동영상의 2/3 정도를 변환했습니다.
Mark Berry

2

untrunc가 파일 내부의 코덱을 지원하지 않는 경우 16 진 편집기로 수정 해보십시오.

  1. 같은 형식의 다른 파일을 가져 오면 더 큰 파일이 있지만 길이가 길어집니다.
  2. 16 진 편집기에서 두 파일을 모두여십시오
  3. 바꾸기 mdat와 "확인"파일 섹션 mdat(즉, 'MDAT'이후에만 바이트를 복사) 헤더없이 "깨진"파일의 섹션을
  4. 'mdat'앞의 4 바이트가 mdat섹션 의 크기를 지정 하면 현재 값이 이전 크기 ( "ok"파일 mdat섹션 크기)가되고 새 크기 ( " 깨진 "파일 mdat섹션 크기)

나는 그것을하기 위해 간단한 프로그램을 코딩했다 : https://github.com/golimarrrr/fix-3gp

프로그램과 16 진 편집기를 사용하여 수동으로 동일한 고정 파일을 작성해야합니다.


-3

VLC Player로 파일을 열려고 했습니까 ? 일반적으로 손상된 파일을 복구하는 것이 좋습니다.


8
인덱스가 메모리에 내장 될 수있는 AVI 파일에 적용 할 수 있지만 ffmpeg 처리 중에 "moov atom not found"라는 오류가 MP4 파일로 VLC에서 재생되지 않습니다.
일요일

2
내 경우에는 VLC도 재생되지 않습니다 (.mov 파일)
rogerdpack
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.