
어제 휴대폰으로 한 장면을 촬영하고 있었는데 갑자기 응용 프로그램이 충돌하고 생성된 m4v를 열려고 하면 손상되었다는 메시지가 표시됩니다.
동영상 파일(36MB 정도)을 PC에 다운로드했는데 열어서 복구하려고 합니다. 나에게 방법을 제안해 주실 수 있나요?
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
최근 두 줄은 빨간색으로 표시됩니다.
답변1
다음을 사용하여 손상된 mp4 또는 m4v 파일을 복구할 수 있습니다.잘림 해제.
이 방법을 사용하려면 동일한 장치의 다른 비디오 파일이 필요합니다.그렇지 않다고장난.
설치하는 방법untrunc
컴파일하려면 Linux 설치(이상적으로는 Ubuntu)와 명령줄을 사용할 수 있는 기본 기능이 필요합니다. 이 부분을 건너뛰고 untrunc
Docker를 통해 실행할 수도 있습니다(참조아래 답변), 만약 당신이 그것을 가지고 있다면.
해야 할 일은 다음과 같습니다.
다음 명령을 사용하여 일부 필수 라이브러리를 설치하십시오.
sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev
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
다음 명령을 사용하여 소스 코드를 컴파일합니다(모두 한 줄).
g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -L/usr/local/lib -lavformat -lavcodec -lavutil
(이 단계를 건너뛰고 미리 제공된 실행 파일을 사용해 볼 수 있지만 나에게는 효과가 없었습니다.)
그러면 실제로 비디오를 수정할 수 있습니다. 깨진 비디오와 작동하는 비디오 예제가 모두 필요합니다.
비디오를 수정하는 방법
이상적으로는 동일한 카메라에서, 바람직하게는 적어도 깨진 비디오만큼 긴 다른 작업 비디오를 찾으십시오. 가능하다면 동일한 해결 방법도 적용됩니다(필수적인 것은 아니지만 도움이 될 수 있다고 생각합니다).
Untrunc의 압축을 풀고 컴파일한 폴더에서 이 명령을 실행하고 /path/to/...
비트를 2개의 비디오 파일로 바꿉니다.
./untrunc /path/to/working-video.m4v /path/to/broken-video.m4v
그런 다음 이탈하여 다음과 같은 재생 가능한 파일을 생성해야 합니다.broken-video_fixed.m4v
그게 다야!
이제 VLC 미디어 플레이어가 파일을 재생할 수 있습니다. 그러나 잘못된 길이 정보를 보고할 수 있습니다(Untrunc는 이를 추측/해결하려고 시도하지만 항상 올바른 것은 아닙니다). 이 문제를 해결하려면 다른 프로그램을 통해 비디오를 다시 인코딩해 보세요.
[Untrunc을 사용해 보라고 제안한 slhck의 의견에 감사드립니다.]
[이 정확한 문제를 해결하기 위해 먼저 Untrunc을 코딩해 주신 Federico Ponchio에게 많은 감사를 드립니다.]
답변2
다음을 설치 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
및 는 모두 현재 디렉터리에 있어야 하며 해당 디렉터리는 Docker 컨테이너에 BAD-corrupt-file.md5
마운트됩니다 ./vol
더 자세한 설명을 보려면 주변의 다른 댓글을 읽어보세요.
나한테는 이게 가장 빨랐다!
답변3
다른 사람이 이 문제를 우연히 발견한 경우에는 sparrowt가 말했던 앱도 시도해 보았으나 제게는 효과가 없었습니다(개발자 저장소에서 작성한 일부 버그 보고서 참조). 아마도 mp4 파일이 아니라 MOV 파일이어서 그랬던 것 같은데...
나에게 도움이 된 것은 다음 게시물이었습니다.http://muzso.hu/2012/11/14/how-to-fix-a-broken-mp4-mov-video-ffmpeg-reports-moov-atom-not-found
"HD Video Repair Utility"(http://grauonline.de/cmsimple2_6/en/?솔루션:HD_Video_Repair_Utility), 이는 Treasured(http://aeroquartet.com/movierepair/repair). 그들은 심지어 비용이 전혀 들지 않는 이전 버전(버전 1.5)이 있다는 점을 지적했습니다(http://nagasoft.cn/download/videorepair1.5.zip)!
버전 1.5를 사용하여 파일 복구를 시도했는데 부분적으로 작동했습니다. ffmpeg로 다시 인코딩한 후(몇 가지 오류가 있음) 오디오의 일부가 사라졌음을 깨달았습니다. 로그에는(다행히 비디오 복구 유틸리티에 일부가 있음) 일정 시간이 지난 후에는 오디오에 대한 언급이 더 이상 없었습니다. 그대로 받아들이겠습니다...
답변4
untrunc가 파일 내부의 코덱을 지원하지 않는 경우 16진수 편집기를 사용하여 문제를 해결할 수 있습니다.
- 동일한 형식의 다른 파일을 구하세요. 더 큰 파일을 구했지만 아마도 길이에 관계없이 작동할 것입니다.
- 16진수 편집기에서 두 파일을 모두 엽니다.
mdat
"ok" 파일의 섹션을mdat
헤더 없이 "broken" 파일의 섹션 으로 교체합니다 (예: 'mdat' 뒤의 바이트만 복사).- 아마도 이미 그렇게 작동했을 것입니다. 그렇지 않다면 'mdat' 앞의 4바이트가 섹션의 크기를 지정하고
mdat
현재 값은 이전 크기("ok" 파일mdat
섹션 크기)가 되며 새 크기(" 깨진" 파일mdat
섹션 크기)
나는 이를 수행하기 위해 간단한 프로그램을 코딩했습니다.https://github.com/golimarrrr/fix-3gp
프로그램과 16진수 편집기를 사용하여 직접 동일한 고정 파일을 생성해야 합니다.