ffmpeg正在生成不同步的音频/视频文件
我试图使用a264
将flv
视频转换为mp4
,但结果视频的音频/视频不同步。音频看起来不错,但视频看起来很慢,因此与音频不同步。ffmpeg正在生成不同步的音频/视频文件
这里是命令我运行:
/opt/local/bin/ffmpeg -i complaint.flv -f mp4 -vcodec libx264 -acodec aac -copyts -strict experimental -fpre /opt/local/share/ffmpeg/libx264-lossless_slow.ffpreset -ab 44k -threads 0 -crf 23 complaint.mp4
和输出:
Desktop /opt/local/bin/ffmpeg -i complaint.flv -f mp4 -vcodec libx264 -acodec aac -copyts -strict experimental -fpre /opt/local/share/ffmpeg/libx264-lossless_slow.ffpreset -ab 44k -threads 0 -crf 23 complaint.mp4
ffmpeg version 0.7.8, Copyright (c) 2000-2011 the FFmpeg developers
built on Jan 12 2012 21:12:26 with gcc 4.2.1 (Apple Inc. build 5666) (dot 3)
configuration: --prefix=/opt/local --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libdirac --enable-libschroedinger --enable-libopenjpeg --enable-libxvid --enable-libx264 --enable-libvpx --enable-libspeex --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/gcc-4.2 --arch=x86_64 --enable-yasm
libavutil 50. 43. 0/50. 43. 0
libavcodec 52.123. 0/52.123. 0
libavformat 52.111. 0/52.111. 0
libavdevice 52. 5. 0/52. 5. 0
libavfilter 1. 80. 0/1. 80. 0
libswscale 0. 14. 1/0. 14. 1
libpostproc 51. 2. 0/51. 2. 0
[flv @ 0x7fe57a04ac00] Estimating duration from bitrate, this may be inaccurate
Input #0, flv, from 'complaint.flv':
Metadata:
duration : 7
creationdate : Thu Jan 12 23:47:24
description : Recorded using VideoRecording example.
Duration: 00:00:06.61, start: 0.000000, bitrate: N/A
Stream #0.0: Video: flv, yuv420p, 288x288, 1k tbr, 1k tbn, 1k tbc
Stream #0.1: Audio: nellymoser, 11025 Hz, mono, s16
File 'complaint.mp4' already exists. Overwrite ? [y/N] y
[buffer @ 0x7fe579c32cc0] w:288 h:288 pixfmt:yuv420p tb:1/1000000 sar:0/1 sws_param:
[libx264 @ 0x7fe57a044600] using cpu capabilities: none!
[libx264 @ 0x7fe57a044600] profile High, level 4.2
[libx264 @ 0x7fe57a044600] 264 - core 118 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=2 deblock=1:0:0 analyse=0x3:0x33 me=umh subme=6 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=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.41 aq=1:1.00
Output #0, mp4, to 'complaint.mp4':
Metadata:
duration : 7
creationdate : Thu Jan 12 23:47:24
description : Recorded using VideoRecording example.
encoder : Lavf52.111.0
Stream #0.0: Video: libx264, yuv420p, 288x288, q=0-69, 200 kb/s, 1k tbn, 1k tbc
Stream #0.1: Audio: aac, 11025 Hz, mono, s16, 44 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop, [?] for help
frame= 6557 fps=106 q=-1.0 Lsize= 685kB time=00:00:03.62 bitrate=1549.1kbits/s dup=6367 drop=0
video:615kB audio:17kB global headers:0kB muxing overhead 8.361360%
frame I:27 Avg QP:19.98 size: 8242
[libx264 @ 0x7fe57a044600] frame P:6530 Avg QP:30.71 size: 62
[libx264 @ 0x7fe57a044600] mb I I16..4: 11.1% 79.3% 9.6%
[libx264 @ 0x7fe57a044600] mb P I16..4: 0.1% 0.2% 0.0% P16..4: 1.2% 0.2% 0.3% 0.0% 0.0% skip:98.0%
[libx264 @ 0x7fe57a044600] 8x8 transform intra:77.8% inter:64.9%
[libx264 @ 0x7fe57a044600] coded y,uvDC,uvAC intra: 75.3% 81.3% 33.3% inter: 0.5% 0.7% 0.1%
[libx264 @ 0x7fe57a044600] i16 v,h,dc,p: 78% 9% 10% 3%
[libx264 @ 0x7fe57a044600] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 35% 11% 32% 3% 4% 5% 2% 5% 4%
[libx264 @ 0x7fe57a044600] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 56% 7% 9% 3% 4% 7% 3% 7% 3%
[libx264 @ 0x7fe57a044600] i8c dc,h,v,p: 45% 15% 34% 6%
[libx264 @ 0x7fe57a044600] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fe57a044600] ref P L0: 80.5% 9.5% 10.0%
[libx264 @ 0x7fe57a044600] kb/s:767.20
有我丢失的东西,以确保视频和音频排队完美?
对于那些可能正在尝试这样做的人,我最好马上在h264中录制闪存,而不是使用yuv420p作为音频编解码器。这就像一个魅力。添加国旗-async 1
也有帮助。
更新:请了解一下FFmpeg的文档(http://ffmpeg.org/ffmpeg.html)此位:
-async:音频同步方法。 “拉伸/挤压”音频流以匹配时间戳,参数是音频改变的每秒最大采样数。 -async 1是一种特殊情况,其中只有音频流的开始被校正而没有任何稍后的校正。 此选项已被弃用。改用aresample音频过滤器。
您可以阅读有关aresample过滤器在这里:http://ffmpeg.org/trac/ffmpeg/wiki/FilteringGuide
“在h264中,而不是使用yuv420p作为音频编解码器。” ???不明白。 yuv420p是图片格式,而不是像h264这样的视频编解码器,既不是音频cedec。那么你做了什么来获得同步? – user1914692 2013-05-20 21:37:31
这是否等同? 'aresample =异步= 1' – chovy 2017-06-05 08:51:45
如果你尝试 '的ffmpeg -i complaint.flv complaint.mp4',确实是它仍然不同步?在VLC中播放时,原始文件是否不同步? – sashoalm 2012-01-13 08:38:25
这对我不起作用,主要是因为flv创建时使用的编解码器(与h264不同) – marcelorocks 2012-01-13 19:29:41
从您的答案我不明白'ffmpeg -i complaint.flv complaint.mp4'是否生成了输出结果不同步或不同步。这是您调试问题的方式,您尝试将其隔离。原稿是否不同步?如果VLC以这种方式播放,那么你就无能为力。或者它是ffmpeg的一个普遍问题,还是特别与h264编解码器? – sashoalm 2012-01-14 13:42:05