참고 : 나는 이 공동체를 아직 찾지 못했던 짧은 시간 전에 동일한 질문을 stackoverflow에 게시했습니다 . 질문이이 커뮤니티에 더 적합하기 때문에 이것을 다시 게시합니다.
1. 내가 시도한 것
좀이 .MTS (AVCHD 형식) 내 AVCHD 카메라로 recoreded 파일을 . 사양은 다음과 같습니다.
$ ffprobe 140612_Canon-00000.MTS
ffprobe version 2.2.1 Copyright (c) 2007-2014 the FFmpeg developers
(snip)
Input #0, mpegts, from '140612_Canon-00000.MTS':
Duration: 00:48:58.40, start: 0.800300, bitrate: 5563 kb/s
Program 1
Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448),
yuv420p, 1440x1080 [SAR 4:3 DAR 16:9],
29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz,
stereo, fltp, 256 kb/s
프레임 속도 / 타임베이스 부분에주의 : 29.97fps, 29.97tbr, 90k tbn, 59.94tbc
이제 H264 비디오 스트림을 다시 인코딩하지 않고 오디오 스트림을 AAC 로 코드 변환 하여이 파일을 .mp4 파일로 변환 하고 싶습니다 . 그래서 다음 명령을 시도했습니다.
ffmpeg -i 140612_Canon-00000.MTS -t 60 -y -vcodec copy -acodec libfaac -ab 128k 140612_Canon-00001.MTS.mp4
2. 결과
출력 파일의 사양은 다음과 같습니다.
$ ffprobe 140612_Canon-00000.MTS.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '140612_Canon-00000.MTS.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.33.100
Duration: 00:01:00.04, start: 0.021333, bitrate: 4590 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
1440x1080 [SAR 4:3 DAR 16:9], 4448 kb/s,
59.94 fps, 59.94 tbr, 90k tbn, 59.94 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D),
48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
프레임 속도 / 타임베이스 부분을 살펴보십시오 : 59.94 fps, 59.94 tbr, 90k tbn, 59.94 tbc . ffmpeg가 방금 비디오 스트림을 복사했지만 프레임 속도와 타임베이스가 두 번 value로 변경되었습니다 .
따라서 QuickTime Player 또는 VLC Player로 출력 파일을 열고 재생할 때 오디오에는 문제가 없지만 비디오 스트림이 올바르게 재생되지 않습니다. 프레임을 앞뒤로 떨림 반복적으로 반복하여 비디오를 재생합니다.
3. 질문
- H264 비디오 스트림을 올바르게 다시 인코딩하지 않고 ffmpeg로 .MTS 파일 (AVCHD)을 .mp4로 변환하려면 어떻게 해야 합니까?
- 어떻게 수있는 원래의 프레임 속도 / 타임베이스 값을 유지 (FPS / TBR / TBN / TBC) I는 컨테이너를 변환 할 때
ffmpeg
와-vcodec copy
스위치를. - 비디오 스트림을 다시 인코딩하지 않고 ffmpeg의 명령 줄 옵션으로 프레임 속도 / 타임베이스 값 (fps / tbr / tbn / tbc)을 설정 하는 방법
어떤 아이디어?
4. -r 29.97
옵션 추가
스파클 스 교수는 추가 할 조언을했다 -r 29.97
. 나는 그것을 시도했다 :
ffmpeg -i 140612_Canon-00001.MTS -t 60 -r 29.97 -y -vcodec copy -acodec libfaac -ab 128k 140612_Canon-00001.MTS.mp4
그러나 출력 파일에 여전히 잘못된 프레임 속도 / 타임베이스가 있습니다.
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
1440x1080 [SAR 4:3 DAR 16:9], 4448 kb/s,
59.94 fps, 59.94 tbr, 11988 tbn, 59.94 tbc (default)
5. MP4Box를 이용한 Remux
Sparkles 교수의 조언에 따르면 MP4Box를 사용하여 demux와 remux를 시도했습니다.
brew install mp4box
ffmpeg -i 140612_Canon-00000.MTS -t 60 -y \
-vcodec copy -an 140612_Canon-00000.MTS.h264
ffmpeg -i 140612_Canon-00000.MTS -t 60 -y \
-vn -acodec libfaac -ab 128k 140612_Canon-00000.MTS.aac
mp4box -add 140612_Canon-00000.MTS.h264:fps=29.97 \
-add 140612_Canon-00000.MTS.aac \
-new 140612_Canon-00000.MTS.mp4
출력은 다음과 같습니다.
ffprobe 140612_Canon-00000.MTS.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '140612_Canon-00000.MTS.mp4':
(snip)
Duration: 00:02:00.22, start: 0.000000, bitrate: 2293 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661),
yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 2228 kb/s,
29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
creation_time : 2014-07-14 00:38:23
handler_name : 140612_Canon-00000.MTS.h264:fps=29.97
- Imported with GPAC 0.5.0-rev4065
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz,
stereo, fltp, 125 kb/s (default)
조금 앞으로 나아 보입니다. 프레임 속도 / 타임베이스 부분을 살펴보십시오 : 29.97fps, 29.97tbr, 30k tbn, 59.94tbc . (컨테이너의 타임베이스 값)을 제외하고tbn
원래 스트림과 일치합니다 .
그러나 Quicktime Player 또는 VLC로 출력 파일을 재생 하면 비디오가 절반 속도로 재생됩니다 .
원본 파일은 90k tbn
(90000 틱 / 초) MP4Box의 새로운 출력 파일 30k tbn
은 원본 파일의 3 분의 1에 불과하지만 출력 파일은 절반 속도로 재생됩니다.
이유를 모르겠습니다. 그러나 나머지 문제는 tbn
값을 조정할 수있는 방법이라고 생각합니다 .
5-b. 출력 파일에 대한 MediaInfo의 보고서
또한 MP4Box를 사용하여 5. Remux에서 생성 된 출력 파일에서 MediaInfo 도구 를 사용해 보았습니다 . 출력은 다음과 같습니다. https://gist.github.com/kaorukobo/c5ab9eaa413dff6cd26a
6. avconv 시도
Volodya는 avconv
효과가 있다고보고했다 . 또한 동일한 카메라로 녹화 된 짧은 샘플 동영상 파일 (Canon-00006.MTS)을 준비했습니다. 좋아, 시도해 보자.
brew install avconv
avconv -i Canon-00006.MTS -c:a copy -c:v copy -y Canon-00006.MTS.mp4
ffprobe Canon-00006.MTS.mp4
출력 파일의 ffprobe 정보는 여기 ( https://gist.github.com/kaorukobo/5b53244ade2632ff1211) 이며 프레임 속도 / 시간축 정보는 다음과 같습니다. 59.94 fps, 59.94 tbr, 90k tbn, 59.94 tbc
Volodya가보고 한 바와 같이 출력 파일은 VLC Player 로 잘 재생 되었습니다. 그러나 Quicktime Player X로 비디오를 열면 비디오가 정상 속도로 재생되었지만 프레임이 뒤로 떨림 반복적으로 재생되었습니다.
7. "Free AVCHD to MOV"앱이 작동하는 이유는 무엇입니까?
마찬가지로 나는 내 이전의 코멘트에 언급 , MOV의 무료 AVCHD 응용 프로그램의 "재 포장 MOV에" 기능은 MP4하지만, MOV를하지하게하더라도 잘 작동.
소프트웨어는 내부적으로 자체 ffmpeg (또는 avconv) 프로그램을 호출하며 어떤 옵션이 전달되는지 확인했습니다. 다음과 같습니다.
/Applications/Free AVCHD to Mov.app/Contents/Resources/bin/com.geranium-soft.convert \
-i /path/to/140710_Canon-00003.MTS \
-map 0:0 -map 0:1 -c:a libfaac -vol 256 -b:a 128k -c:v copy \
-sn -movflags faststart -threads 0 -pix_fmt yuv420p -y \
/path/to/140710_Canon-00003.mov
-t 60
ffmpeg 프로그램으로 변환하고 동일한 옵션 (매우 동일. 출력 컨테이너 유형을 MOV로 설정하고 스위치 조차 제거 했습니다)을 전달하려고했습니다 . 그러나 결과는 지금까지보고 된 것과 동일 합니다.
어쨌든 훌륭한 응용 프로그램은 ".mp4"및 "ffmpeg"로를 제외하고 "H264 비디오 스트림을 다시 인코딩하지 않고 .MTS 파일 (AVCHD)을 .mp4로 변환하는 방법"에 관한 문제를 해결했습니다. 그러나 나는 여전히 그 앱이 잘 작동하지만 ffmpeg가 그렇지 않은 이유에 관심이 있습니다.