FFmpegでビデオをWMVからMP4に変換しようとしていますが、数時間かかります。 AVIに変換しようとすると、約10〜15分しかかかりません。
ffmpeg version N-43206-gf857465
built on Aug 4 2012 16:10:39 with gcc 4.7.1 (GCC)
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)
copy
によるMP4への変換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)
copy
を使用したAVIへの変換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)
渡す必要のある追加のパラメーターはありますか?
-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コンテンツの場合はそうです。また、特に入力がすでに1時間を超える場合は、1時間以上かかる場合があります。また、CPUが最も高速でない場合もあります。これが主な理由ですMPEG-4 XviDのようなビジュアルエンコーダがまだ普及しており、非常に人気があります。H.264コーデックよりもエンコードに時間がかかりません。最高のパフォーマンスが得られない場合があります。品質とファイルサイズの関係はありますが、高速です。
つまり、プリセットを強制することでx264エンコーディングを高速化できます。プリセットは、エンコーダの最適化設定であり、超高速、超高速、超高速、高速、高速、中速、低速、低速、超低速の範囲です。コマンドは次のようになります。
ffmpeg -i input.wmv -c:v libx264 -preset fast out.mp4
プリセットがない場合よりも速く実行されます。唯一の欠点は、たとえば、-preset veryslow
と比較して、同じ圧縮率では品質が良くないことです。
それとは別に、高速なCPUに投資し、x264をサポートするFFmpegの最新ビルドを実行していることを確認する以外にできることは多くありません。
詳細は FFmpeg Wiki:H.264エンコーディングガイド を参照してください。
私は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
超早い!