요약
H.264 비디오는 추출하려는 비디오 지속 시간 (900 배 낮음)에 적용되는 스케일링 계수가 필요한 프레임 속도가 매우 높은 것 같습니다.
Body
MP4 형식 ( Handbrake 사용 )으로 만든 동영상에서 클립을 추출하려고합니다 . mencoder와 VLC를 시도한 후 코덱 복사와 관련하여 FFmpeg를 사용하는 것이 가장 번거로 웠습니다. 즉, mencoder 및 VLC와 비교하여 결과 파일은 여전히 QuickTime에서 재생할 수 있습니다 (Perian 등에 대해 알고 있습니다.이 모든 것이 어떻게 작동하는지 배우려고합니다).
어쨌든 내 명령은 다음과 같습니다.
ffmpeg -ss 01:15:51 -t 00:05:59 -i outofsight.mp4 \
-acodec copy -vcodec copy clip.mp4
복사하는 동안 다음이 나타납니다.
Seems stream 0 codec frame rate differs from container frame rate: 45000.00 (45000/1) -> 25.00 (25/1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from outofsight.mp4':
Duration: 01:57:42.10, start: 0.000000, bitrate: 830 kb/s
Stream #0.0(und): Video: h264, yuv420p, 720x384, 25 tbr, 22500 tbn, 45k tbc
Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16
Output #0, mp4, to 'out.mp4':
Stream #0.0(und): Video: libx264, yuv420p, 720x384, q=2-31, 90k tbn, 22500 tbc
Stream #0.1(eng): Audio: libfaac, 48000 Hz, stereo, s16
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop encoding
frame= 2591 fps=2349 q=-1.0 size= 8144kB time=101.60 bitrate= 656.7kbits/s
…
5:59 길이의 클립 대신 나머지 영화 전체를 얻습니다. 그래서 이것을 테스트하기 위해 ffmpeg 명령을로 실행했습니다 -t 00:00:01
. 내가 얻은 것은 정확히 15:00 분 클립이었습니다. 그래서 나는 블랙 박스 엔지니어링을했고 -t
1 초가 900 초로 해석 될 때 입력 할 값을 계산하여 옵션 을 조정하기로 결정했습니다 . 원하는 359 초 클립의 경우 0.399 초를 계산하여 ffmpeg 명령이 다음과 같이되었습니다.
ffmpeg -ss 01:15.51 -t 00:00:00.399 -i outofsight.mp4 \
-acodec copy -vcodec copy clip.mp4
이것은 효과가 있지만 지속 시간이 900으로 조정되는 이유를 모르겠습니다. 더 조사하면 각 ffmpeg 실행에는 다음 줄이 있습니다.
Seems stream 0 codec frame rate differs from container frame rate: 45000.00 (45000/1) -> 25.00 (25/1)
45000/25 = 1800. 어딘가에 관계가 있어야합니다. 어쨌든 외설적으로 높은 프레임 속도로 인해 타이밍 문제가 발생하고 있습니다. 그 프레임 속도는 어떻게 그렇게 높습니까? 이것에 대한 가장 좋은 부분은 결과 clip.mp4가 (복사 된 비디오 코덱으로 인해) 정확히 동일한 기능을 가지고 있으며, 이로부터 더 많은 클립을 가져 오려면 -t
지속 시간 옵션에 대해 동일한 스케일링이 필요하다는 것입니다. 따라서 기꺼이 확인하려는 사람 이 사용할 수 있도록 만들었습니다 .
부록
내 시스템에서 ffmpeg의 프리앰블 (MacPorts ffmpeg 포트를 사용하여 빌드) :
FFmpeg version 0.5, Copyright (c) 2000-2009 Fabrice Bellard, et al.
configuration: --prefix=/opt/local --disable-vhook --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --enable-avfilter-lavf --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libdirac --enable-libschroedinger --enable-libfaac --enable-libfaad --enable-libxvid --enable-libx264 --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/gcc-4.2 --arch=x86_64
libavutil 49.15. 0 / 49.15. 0
libavcodec 52.20. 0 / 52.20. 0
libavformat 52.31. 0 / 52.31. 0
libavdevice 52. 1. 0 / 52. 1. 0
libavfilter 1. 4. 0 / 1. 4. 0
libswscale 1. 7. 1 / 1. 7. 1
libpostproc 51. 2. 0 / 51. 2. 0
built on Jan 4 2010 21:51:51, gcc: 4.2.1 (Apple Inc. build 5646) (dot 1)
편집
버그인지 아닌지 확실하지 않지만, 현재이 비디오 버전 (MacPorts의 버전 0.6.1)에서는 현재 ffmpeg 버전에서 수정 된 것 같습니다.