webm to mp4转换使用ffmpeg [英] webm to mp4 conversion using ffmpeg

查看:410
本文介绍了webm to mp4转换使用ffmpeg的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试将一个webm文件转换为mp4时,输出非常的非常波动,看起来好像有很多帧被ffmpeg



我使用了以下命令转换

  ffmpeg -i movie.webm movie.mp4 
ffmpeg -i movie.webm -vcodec libx264电影.mp4
ffmpeg -i movie.webm -vcodec libx264 -qscale 0 movie.mp4

他们都有同样的问题。当我使用ffprobe时,似乎正确地显示帧。



更新:

  6月14日14:31:50与gcc 4.7(Ubuntu / Linaro 4.7.2-2ubuntu1)
配置:--prefix = / home / user2 / ffmpeg_build --extra-cflags = -I / home / user2 / / favs- -libfdk-aac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
libavutil 52. 35.101 / 52。 35.101
libavcodec 55. 16.100 / 55. 16.100
libavformat 55. 8.102 / 55. 8.102
libavdevice 55. 2.100 / 55. 2.100
libavfilter 3. 77.101 / 3. 77.101
libswscale 2. 3.100 / 2. 3.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 3.100 / 52. 3.100
超快速音频和视频编码器
用法:ffmpeg [options] [[infile options] -i infile] ... {[outfile opt离子] outfile} ...

使用-h来获得全面的帮助,甚至更好的运行'man ffmpeg'

输入#0,matroska,webm,从' 1.webm':
持续时间:00:00:10.64,开始:0.000000,比特率:5024 kb / s
流#0:0(eng):视频:vp8,yuv420p,1280x720, :1 DAR 16:9,1k fps,1k tbr,1k tbn,1k tbc(默认值)
[libx264 @ 0x1d966a0]使用SAR = 1/1
[libx264 @ 0x1d966a0] MB速率(3600000) >级别限制(2073600)
[libx264 @ 0x1d966a0]使用cpu功能:MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0x1d966a0]配置文件高,级别5.2
[libx264 @ 0x1d966a0] 264 - 核心133 r2 a3ac64b - H.264 / MPEG-4 AVC编解码器 - Copyleft 2003-2013 - http://www.videolan.org/x264.html - 选项:cabac = 1 ref = 3 deblock = 1:0:0 analyze = 0x3:0x113 me = hex subme = 7 psy = 1 psy_rd = 1.00:0.00 mixed_ref = 1 me_range = 16 chroma_me = 1 trellis = 1 8x8dct = 1 cqm = 0 deadzone = 21,11 fast_pskip = 1 chroma_qp_offset = -2 threads = 12 lookahead_threads = 2 sliceed_threads = 0 nr = 0 decimate = 1 interlaced = 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 = 25 scenecut = 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
输出#0,mp4, '1_conv4.mp4':
元数据:
编码器:Lavf55.8.102
流#0:0(eng):视频:h264(libx264)([33] [0] [0] [ 0] / 0x0021),yuv420p,1280x720 [SAR 1:1 DAR 16:9],q = -1--1,16k tbn,1k tbc(默认)
流映射:
流#0 :0 - > #0:0(vp8 - > libx264)
按[q]停止,[?]寻求帮助
frame = 168 fps = 0.0 q = 33.0 size = 62kB time = 00:00:00.11比特率= 4606.0kbits /帧= 293 fps = 230 q = 33.0大小= 138kB时间= 00:00:00.23比特率= 4809.7kbits /

视频:5620kB音频:0kB字幕:0全局头文件:0kB复制开销2.212461%
[libx264 @ 0x1d966a0] frame I:46 Avg QP:18.50 size:39849
[libx264 @ 0x1d966a0] frame P:2940 Avg QP:18.27 size:1222
[libx264 @ 0x1d966a0]帧B:7651平均QP:17.68大小:43
[libx264 @ 0x1d966a0]连续B帧:4.0%0.2%0.3%95.5%
[libx264 @ 0x1d966a0] mb I I16 .. 4:19.9%63.2%16.9%
[libx264 @ 0x1d966a0] mb P I16..4:0.2%0.5%0.1%P16..4:3.9%1.1%0.6%0.0%0.0%跳过:93.6% b $ b [libx264 @ 0x1d966a0] mb B I16..4:0.0%0.0%0.0%B16..8:0.2%0.0%0.0%直接:0.0%跳过:99.8%L0:25.1%L1:74.9%BI: 0.0%
[libx264 @ 0x1d966a0] 8x8 transform intra:63.6%inter:75.9%
[libx264 @ 0x1d966a0] y,uvDC,uvAC intra:61.5%53.4%24.4%inter:0.5%0.5%0.0%
[libx264 @ 0x1d966a0] i16 v,h,dc,p:52%19%19%11%
[libx264 @ 0x1d966a0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:32%17%13%4%6%9%5%8%6%
[libx264 @ 0x1d966a0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu:30%18%14%5%8%10%6%6%3%
[libx264 @ 0x1d966a0] i8c dc ,h,v,p:55%17%24%4%
[libx264 @ 0x1d966a0]加权P帧:Y:0.0%UV:0.0%
[libx264 @ 0x1d966a0] ref P L0: 82.5%13.2%4.0%0.3%
[libx264 @ 0x1d966a0]参考B L0:60.2%39.2%0.6%
[libx264 @ 0x1d966a0]参考B L1:98.5%1.5%
[libx264 @ 0x1d966a0] kb / s:4327.77


解决方案

文件报告来自tbs和tbr值的奇怪帧速率值 1k fps (查看这里定义



编码器生成不同的结果, 16K tbn,1k tbc(默认)



所以通过调用:

  ffmpeg -fflags + genpts -i 1.webm -r 24 1.mp4 

您配置ffmpeg为每个帧生成新的pts(a / ka Presentation TimeStamp),并将目标帧速率设置为24。



所以你的输出mp4文件信息(ffmpeg -i ....)从

 流#0:0(eng):视频:h264(高)(avc1 / 0x31637661),yuv420p,1280x720 [SAR 1:1 DAR 16:9],4327 kb / s,1000.09 fps,1k tbr,16k tbn,2k tbc 
pre>

to

  Stream#0:0(eng)视频:h264(高)(avc1 / 0x31637661),yuv420p,1280x720 [SAR 1:1 DAR 16:9],1670 kb / s,24 fps,24 tbr,12288 tbn,48 tbc 


When I try to convert a webm file to mp4 the output is very very choppy and it appears as if many frames have been dropped by ffmpeg

I used the following commands to convert

ffmpeg -i movie.webm movie.mp4
ffmpeg -i movie.webm -vcodec libx264 movie.mp4
ffmpeg -i movie.webm -vcodec libx264 -qscale 0 movie.mp4

All of them have the same problem. When I use ffprobe it seems to show the frames more or less properly.

UPDATE:

 built on Jun 14 2013 14:31:50 with gcc 4.7 (Ubuntu/Linaro 4.7.2-2ubuntu1)
  configuration: --prefix=/home/user2/ffmpeg_build --extra-cflags=-I/home/user2/ffmpeg_build/include --extra-ldflags=-L/home/pavan4/ffmpeg_build/lib --bindir=/home/pavan4/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
  libavutil      52. 35.101 / 52. 35.101
  libavcodec     55. 16.100 / 55. 16.100
  libavformat    55.  8.102 / 55.  8.102
  libavdevice    55.  2.100 / 55.  2.100
  libavfilter     3. 77.101 /  3. 77.101
  libswscale      2.  3.100 /  2.  3.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  3.100 / 52.  3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

Input #0, matroska,webm, from '1.webm':
  Duration: 00:00:10.64, start: 0.000000, bitrate: 5024 kb/s
    Stream #0:0(eng): Video: vp8, yuv420p, 1280x720, SAR 1:1 DAR 16:9, 1k fps, 1k tbr, 1k tbn, 1k tbc (default)
[libx264 @ 0x1d966a0] using SAR=1/1
[libx264 @ 0x1d966a0] MB rate (3600000) > level limit (2073600)
[libx264 @ 0x1d966a0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0x1d966a0] profile High, level 5.2
[libx264 @ 0x1d966a0] 264 - core 133 r2 a3ac64b - H.264/MPEG-4 AVC codec - Copyleft 2003-2013 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=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=25 scenecut=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 '1_conv4.mp4':
  Metadata:
    encoder         : Lavf55.8.102
    Stream #0:0(eng): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 16k tbn, 1k tbc (default)
Stream mapping:
Stream #0:0 -> #0:0 (vp8 -> libx264)
Press [q] to stop, [?] for help
frame=  168 fps=0.0 q=33.0 size=      62kB time=00:00:00.11 bitrate=4606.0kbits/frame=  293 fps=230 q=33.0 size=     138kB time=00:00:00.23 bitrate=4809.7kbits/

video:5620kB audio:0kB subtitle:0 global headers:0kB muxing overhead 2.212461%
[libx264 @ 0x1d966a0] frame I:46    Avg QP:18.50  size: 39849
[libx264 @ 0x1d966a0] frame P:2940  Avg QP:18.27  size:  1222
[libx264 @ 0x1d966a0] frame B:7651  Avg QP:17.68  size:    43
[libx264 @ 0x1d966a0] consecutive B-frames:  4.0%  0.2%  0.3% 95.5%
[libx264 @ 0x1d966a0] mb I  I16..4: 19.9% 63.2% 16.9%
[libx264 @ 0x1d966a0] mb P  I16..4:  0.2%  0.5%  0.1%  P16..4:  3.9%  1.1%  0.6%  0.0%  0.0%    skip:93.6%
[libx264 @ 0x1d966a0] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  0.2%  0.0%  0.0%  direct: 0.0%  skip:99.8%  L0:25.1% L1:74.9% BI: 0.0%
[libx264 @ 0x1d966a0] 8x8 transform intra:63.6% inter:75.9%
[libx264 @ 0x1d966a0] coded y,uvDC,uvAC intra: 61.5% 53.4% 24.4% inter: 0.5% 0.5% 0.0%
[libx264 @ 0x1d966a0] i16 v,h,dc,p: 52% 19% 19% 11%
[libx264 @ 0x1d966a0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 32% 17% 13%  4%  6%  9%  5%  8%  6%
[libx264 @ 0x1d966a0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 30% 18% 14%  5%  8% 10%  6%  6%  3%
[libx264 @ 0x1d966a0] i8c dc,h,v,p: 55% 17% 24%  4%
[libx264 @ 0x1d966a0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x1d966a0] ref P L0: 82.5% 13.2%  4.0%  0.3%
[libx264 @ 0x1d966a0] ref B L0: 60.2% 39.2%  0.6%
[libx264 @ 0x1d966a0] ref B L1: 98.5%  1.5%
[libx264 @ 0x1d966a0] kb/s:4327.77

解决方案

As your input file report a strange frame rate value 1k fps coming from the tbs and tbr value (look here for their definition)

the encoder generate a different result, 16k tbn, 1k tbc (default)

So by calling :

ffmpeg -fflags +genpts -i 1.webm -r 24 1.mp4

You configure ffmpeg to generate new pts (a/k.a Presentation TimeStamp) for each frame and you set the target frame-rate to 24.

So your output mp4 file info (ffmpeg -i ....) change from

Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 4327 kb/s, 1000.09 fps, 1k tbr, 16k tbn, 2k tbc

to

Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1670 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc

这篇关于webm to mp4转换使用ffmpeg的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆