WMV를 MP4로 변환하는 것이 왜 그렇게 느립니까?


12

FFmpeg를 사용하여 WMV에서 MP4로 비디오를 변환하려고하는데 몇 시간이 걸립니다. AVI로 변환하려고하면 약 10-15 분이 걸립니다.

ffmpeg 버전

ffmpeg version N-43206-gf857465
built on Aug  4 2012 16:10:39 with gcc 4.7.1 (GCC)

MP4로 변환

ffmpeg -i input.wmv -vcodec libx264 output.mp4

libavutil      51. 66.100 / 51. 66.100
  libavcodec     54. 49.100 / 54. 49.100
  libavformat    54. 22.100 / 54. 22.100
  libavdevice    54.  2.100 / 54.  2.100
  libavfilter     3.  5.102 /  3.  5.102
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, asf, from 'input.wmv':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
  Duration: 01:14:23.06, start: 0.000000, bitrate: 324 kb/s
    Stream #0:0: Video: msmpeg4 (MP43 / 0x3334504D), yuv420p, 1280x720, 15 tbr,
1k tbn, 1k tbc
[libx264 @ 03427620] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle Cac
he64
[libx264 @ 03427620] profile High, level 3.1
[libx264 @ 03427620] 264 - core 125 r2208 d9d2288 - H.264/MPEG-4 AVC codec - Cop
yleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deb
lock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 m
e_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chro
ma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 i
nterlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=15 scenec
ut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=
0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.mp4':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720, q=-1--
1, 15 tbn, 15 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (msmpeg4 -> libx264)

MP4로 변환 copy

ffmpeg -i input.wmv -c:v:1 copy output.mp4

  libavutil      51. 66.100 / 51. 66.100
  libavcodec     54. 49.100 / 54. 49.100
  libavformat    54. 22.100 / 54. 22.100
  libavdevice    54.  2.100 / 54.  2.100
  libavfilter     3.  5.102 /  3.  5.102
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, asf, from 'input.wmv':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
  Duration: 01:14:23.06, start: 0.000000, bitrate: 324 kb/s
    Stream #0:0: Video: msmpeg4 (MP43 / 0x3334504D), yuv420p, 1280x720, 15 tbr,
1k tbn, 1k tbc
[libx264 @ 03437620] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle Cac
he64
[libx264 @ 03437620] profile High, level 3.1
[libx264 @ 03437620] 264 - core 125 r2208 d9d2288 - H.264/MPEG-4 AVC codec - Cop
yleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deb
lock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 m
e_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chro
ma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 i
nterlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=15 scenec
ut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=
0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.mp4':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720, q=-1--
1, 15 tbn, 15 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (msmpeg4 -> libx264)

AVI로 변환 copy

ffmpeg -i input.wmv -c:v:1 copy output.avi

Input #0, asf, from 'input.wmv':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.22.100
  Duration: 01:14:23.06, start: 0.000000, bitrate: 324 kb/s
    Stream #0:0: Video: msmpeg4 (MP43 / 0x3334504D), yuv420p, 1280x720, 15 tbr,
1k tbn, 1k tbc
Output #0, avi, to 'output.avi':
  Metadata:
    WMFSDKVersion   : 12.0.7601.17514
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    ISFT            : Lavf54.22.100
    Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 1280x720, q=2-31, 20
0 kb/s, 15 tbn, 15 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (msmpeg4 -> mpeg4)

전달해야 할 추가 매개 변수가 있습니까?


물론 비트 스트림을 복사하는 것만으로는 더 빠릅니다.를 사용하면 copy아무 것도 다시 인코딩하지 않습니다. CPU와 같은 하드웨어는 무엇입니까? 당신의 OS는 무엇이며 어떤 버전의 FFmpeg입니까?
slhck

@ slhck : 컴퓨터 속도가 매우 빠르지 않습니다. E5400 2.7GHz 왜 avi 속도가 빠르며 mp4 속도가 느립니까?
Giorgi

귀하의 질문에 AVI 출력이 표시되지 않습니다. 전체 출력으로 업데이트 할 수 있습니까?
slhck

@ slhck : avi 출력 추가
Giorgi

답변:


17

스트림 복사

를 호출 -c:v:1 copy하면 FFmpeg는 기존 비디오 비트 스트림을 가져 와서 스트림 복사 합니다. 비디오 비트 스트림은 WMV, AVI 또는 MP4와 같은 외부 컨테이너에 캡슐화되어 있습니다. 실제 비디오 비트 스트림은 다음 msmpeg4과 같습니다.

내가 말하는 것에 대해 더 알고 싶다면 여기를 참조하십시오 : 코덱 (예 : DivX)이란 무엇이며 파일 형식 (예 : MPG)과 어떻게 다른가요?

비트 스트림을 복사 할 때 FFmpeg는 실제 비디오를 실제로 디코딩하고 다시 인코딩 할 필요가 없습니다. 비디오 비트 스트림을 새로운 컨테이너 형식으로 병합하기 만하면됩니다. 이는 종종 다소 간단한 조작이므로 시간이 오래 걸리지 않습니다.

부호화

이와 반대로, 호출하면 -vcodec libx264(또는 -c:v libx264, 사용 vcodec되지 않기 때문에 사용해야하는 구문 이 더 이상 사용되지 않음) FFmpeg는 비디오 비트 스트림을 msmpeg4원시 형식 으로 디코딩 한 다음 x264H.264 인코더 로 파이프합니다 .

x264는 빠르지 만 여전히 비디오를 인코딩하는 데 시간이 걸립니다. 특히 720p 컨텐츠 인 경우. 입력 시간이 이미 1 시간을 초과하는 경우 특히 1 시간 이상 걸릴 수 있습니다. 또한 CPU가 가장 빠르지 않을 수 있습니다. 이것이 XviD와 같은 오래된 MPEG-4 Visual 인코더가 여전히 널리 사용되고있는 주된 이유입니다. H.264 코덱보다 인코딩 시간이 덜 걸립니다. 품질 대 파일 크기 측면에서 최상의 성능을 제공하지는 않지만 빠릅니다.

모두 말 : 사전 설정을 강제로 x264 인코딩 속도를 높일 수 있습니다. 사전 설정은 엔코더 최적화 설정이며 초고속, 초고속, 매우 빠름, 빠름, 빠름, 중간, 느림, 느림, 매우 느림입니다. 그런 다음 명령은 다음과 같습니다.

ffmpeg -i input.wmv -c:v libx264 -preset fast out.mp4

사전 설정이없는 것보다 빠르게 실행됩니다. 유일한 단점은 예를 들어와 비교할 때 동일한 압축률에서 좋은 품질을 얻지 못한다는 것 -preset veryslow입니다.

그 외에도, 빠른 CPU에 투자하고 x264를 지원하는 최신 FFmpeg 빌드를 실행하는 것 외에는 할 수있는 일이 많지 않습니다.

자세한 내용은 FFmpeg Wiki : H.264 인코딩 안내서를 참조하십시오 .


답변 해주셔서 감사합니다. 확실하지 않은지 확실하지 않지만 사본을 사용하면 여전히 느립니다. 나는 당신의 명령을 시도하고 5 분 후 4 초 만 처리했습니다. 내 비디오의 길이는 약 75 분이며 avi로 변환하는 데 15 분 밖에 걸리지 않지만 mp4는 몇 시간이 걸립니다.
Giorgi

libx264 또는 h264를 인코딩하는 데 가장 적합한 것은 무엇입니까?
Yohanes AI

@NPE libx264인코더로 'h264'를 지정하면 기본적으로 ffmpeg와 차이가 없습니다 .
slhck

1
@PeterCordes로 변경했습니다 fast. 몇 가지 흥미로운 통계 (VMAF를 신뢰할 수있는 경우) : streaminglearningcenter.com/blogs/…
slhck

1
@PeterCordes AQ와 같이 VMAF가 제대로 처리하지 못하는 RC 최적화가 있습니다 : github.com/Netflix/vmaf/issues/21 . 나는 고품질 1080p 대 crappy UHD 부분에 동의합니다. 블로그의 저자는 자신의 테스트를 개선하는 방법에 대한 제안에 매우 열려 있습니다. 나는 이미 x265에 대한 잘못된 구성에 대해 이미 언급했습니다.
slhck

3

WMV-> MP4 변환으로 (끝없는 시간)을 재생하면서 초고속 방법을 찾았습니다. 그러나 가격은 스토리지 가격입니다. WMV를 무손실로 변환 한 다음 무손실에서 MP4로 변환하면 곧바로 전체 변환을 수행합니다. 그러나 무손실 버전을 저장하려면 100 배의 HDD 공간이 필요합니다.

따라서 WMV-> MP4 변환의 매우 느리거나 HDD 집약적 버전 중에서 선택할 수 있으며 다른 선택은 없습니다.

WMV를 무손실 AVI로 변환 : ffmpeg.exe -i screen.wmv -vcodec ffv1 screen.avi 그런 다음 무손실 AVI를 MP4 (또는 WebM, 중요하지 않음)로 변환 ffmpeg.exe -i screen.avi screen.mp4

초고속!

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