10

Я пытаюсь конвертировать видео из WMV в MP4 с помощью FFmpeg, но это занимает пару часов. Если я пытаюсь преобразовать его в 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)

Есть ли дополнительные параметры, которые мне нужно передать?

2 ответа2

16

Потоковое копирование

Когда вы вызываете -c:v:1 copy , FFmpeg возьмет существующий битовый поток видео и скопирует его в поток . Битовый поток видео просто инкапсулируется во внешний контейнер, например, WMV, AVI или MP4 - ваш реальный битовый поток видео - msmpeg4 и останется таким.

Если вы хотите узнать больше о том, о чем я говорю, смотрите здесь: Что такое кодек (например, DivX?) И чем он отличается от формата файла (например, MPG)?

При копировании потока битов FFmpeg не нужно фактически декодировать и перекодировать реальное видео. Просто нужно объединить видеопоток в новый формат контейнера, что часто является довольно простой операцией и поэтому не занимает много времени.

кодирование

В отличие от этого, если вы -vcodec libx264 (или -c:v libx264 , синтаксис, который вы должны использовать, потому что vcodec устарел), FFmpeg будет вынужден декодировать битовый поток видео из msmpeg4 в сырой формат, а затем передать его в x264 , кодер H.264.

x264 работает быстро, но кодирование видео все равно занимает много времени, особенно когда его содержимое 720p. И это может занять более одного часа, особенно если ваш ввод уже более одного часа. Кроме того, ваш процессор может быть не самым быстрым. Это основная причина, по которой старые кодеры MPEG-4 Visual, такие как XviD, все еще популярны: им требуется меньше времени для кодирования, чем кодекам H.264. Они могут не дать вам лучшую производительность с точки зрения качества и размера файла, но они быстры.

Это все, как говорится: вы можете ускорить кодирование x264, форсируя пресет. Пресеты представляют собой настройки оптимизации кодировщика и варьируются от: сверхбыстрый, сверхбыстрый, очень быстрый, быстрый, быстрый, средний, медленный, медленный, очень низкий. Ваша команда может выглядеть так:

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

Он должен работать быстрее, чем без предустановки. Единственным недостатком является то, что он не достигает такого же качества при тех же скоростях сжатия по сравнению, например, с -preset veryslow .

Кроме того, вы ничего не можете сделать, кроме как инвестировать в быстрый ЦП и убедиться, что вы используете последнюю сборку FFmpeg с поддержкой x264.

Для получения дополнительной информации см. FFmpeg Wiki: Руководство по кодированию H.264.

2

Поскольку я играл (бесконечные часы) с конвертацией WMV-> MP4, я нашел сверхбыстрый способ сделать это. Но у него есть цена: цена хранения. Если вы конвертируете WMV в без потерь, то из без потерь в MP4, он делает полное преобразование в кратчайшие сроки. Но вам нужно в 100 раз больше места на жестком диске для хранения версии без потерь, что очень болезненно.

Таким образом, оказывается, что вы можете выбрать из очень медленных или очень интенсивных HDD версий конвертации WMV-> MP4, и у вас нет другого выбора.

Преобразование WMV в AVI без потерь: ffmpeg.exe -i screen.wmv -vcodec ffv1 screen.avi Затем преобразование AVI без потерь в MP4 (или WebM, это не имеет значения) ffmpeg.exe -i screen.avi screen.mp4

Сверх быстрый!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .