OGV格式可在我的计算机上正常播放,但转码掉落(重复?)帧


11

我使用ubuntu 12.10上的recordmydesktop进行了一系列截屏。输出是一个ogv文件。当我使用默认的电影播放器​​(图腾)观看ogv文件时,它看起来不错-音频和视频是同步的。当它被我或youtube转码时,音频和视频不同步。好像我在叙述时跳过了一两张幻灯片。

更新资料

我怀疑问题更恰当地描述为在转码期间丢弃重复的帧。在鼠标移动的地方转换视频似乎正常。但是,当我在幻灯片中聊天时,那些重复的帧会丢失。

我看到了,但这不是我的情况(试图从ogv->任何东西开始)/superuser/436187/ffmpeg-convert-video-w-dropped-frames-out-of-sync

AVI文件似乎可以正确翻译!我认为这对某人将是一个很大的暗示。我仍然想找出潜在的问题。我正在测试以前的视频到AVI的转换,但这需要一段时间,因为我必须检查每个转换。

例子

这是来自gtk-recordmydesktop的原始OGV文件:http ://dl.dropbox.com/u/64693533/sync_test/sync_test1.ogv

视频以幻灯片的形式播放10秒钟,然后再播放5秒钟的3张幻灯片。每次滑动幻灯片时,我也会同时点击麦克风(10s,15s,20s,25s)。

以下是完成的一些转换(每个显示都是它自己的视频计时问题):

http://dl.dropbox.com/u/64693533/sync_test/sync_test1.mp4

  • 该幻灯片显示了第一帧中的第一张幻灯片,但很快就越过了它
  • 这是使用股票ffmpeg完成的

http://dl.dropbox.com/u/64693533/sync_test/sync_test1.ffmpeg-static.mp4

  • 这个非常接近-由于某种原因,它在13岁时决定前进
  • 这是使用几天前使用ffmpeg的静态构建完成的

这是在youtube上-您可以看到它在13秒钟左右提前(从幻灯片1->幻灯片2):

这证明OGV文件可以正常工作:

ffmpeg翻译

使用ffmpeg或avconv,我似乎得到了与youtube类似的效果(转换似乎发生得很早,但不一定同时发生)。

这是我使用的命令(带有ffmpeg的最新静态版本)和输出:

$〜/ ffmpeg / ffmpeg -i JSP.ogv JSP.mp4
ffmpeg版本N-50025-gb8bb661版权所有(c)2000-2013 FFmpeg开发人员
  建于2013年2月17日05:23:03与gcc 4.6(Debian 4.6.3-1)
  配置:--prefix = / root / ffmpeg-static / 64bit --extra-cflags ='-I / root / ffmpeg-static / 64bit / include -static'--extra-ldflags ='-L / root / ffmpeg- static / 64bit / lib -static'--extra-libs ='-lxml2 -lexpat -lfreetype'--enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable -zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass- -enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx
  libavutil 52. 17.101 / 52. 17.101
  libavcodec 54. 91.103 / 54. 91.103
  libavformat 54. 63.100 / 54. 63.100
  libavdevice 54. 3.103 / 54. 3.103
  libavfilter 3. 38.100 / 3. 38.100
  libswscale 2. 2.100 / 2. 2.100
  libswresample 0. 17.102 / 0. 17.102
  libpostproc 52. 2.100 / 52. 2.100
[ogg @ 0x34d4640]未实现同一流的多个fisbone。将FFmpeg版本更新为Git的最新版本。如果问题仍然存在,则表明您的文件具有尚未实现的功能。
[ogg @ 0x34d4640]流0的标头解析失败
[ogg @ 0x34d4640]损坏的文件,关键帧未正确标记。
从“ JSP.ogv”输入#0,ogg:
  持续时间:00:12:49.67,开始:0.000000,比特率:224 kb / s
    流#0:0:数据:无
    数据流#0:1:视频:theora,yuv420p,1600x880 [SAR 1:1 DAR 20:11],15 fps,15 tbr,15 tbn,15 tbc
    元数据:
      RECORDMYDESKTOP:0.3.8.1
    流#0:2:音频:涡流,22050 Hz,单声道,fltp,89 kb / s
[libx264 @ 0x369c5e0]使用SAR = 1/1
[libx264 @ 0x369c5e0]使用cpu功能:MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x369c5e0]配置文件高,级别4.0
[libx264 @ 0x369c5e0] 264-核心129 r2230 1cffe9f-H.264 / MPEG-4 AVC编解码器-Copyleft 2003-2012-http://www.videolan.org/x264.html-选项:cabac = 1 ref = 3解块= 1:0:0分析= 0x3:0x113 me =十六进制subme = 7 psy = 1 psy_rd = 1.00:0.00 mixed_ref = 1 me_range = 16 chroma_me = 1格= 1 = 1 8x8dct = 1 cqm = 0死区= 21,11 fast_pskip = 1 chroma_qp_offset = -2线程= 6 lookahead_threads = 1 sliced_threads = 0 nr = 0抽取= 1隔行扫描= 0 bluray_compat = 0 constrained_intra = 0 bframes = 3 b_pyramid = 2 b_adapt = 1 b_bias = 0直接= 1 weightb = 1 open_gop = 0 weightp = 2 keyint = 250 keyint_min = 15 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,到'JSP.mp4':
  元数据:
    编码器:Lavf54.63.100
    流#0:0:视频:h264([33] [0] [0] [0] / 0x0021),yuv420p,1600x880 [SAR 1:1 DAR 20:11],q = -1--1,15360 tbn ,15吨
    元数据:
      RECORDMYDESKTOP:0.3.8.1
    流#0:1:音频:aac([64] [0] [0] [0] / 0x0040),22050 Hz,单声道,s16,128 kb / s
流映射:
  流#0:1->#0:0(theora-> libx264)
  流#0:2->#0:1(vorbis-> libvo_aacenc)
按[q]停止,按[?]寻求帮助
[ogg @ 0x34d4640]损坏的文件,未正确标记非关键帧。
    最后一条消息重复了2次
损坏的文件,未正确标记的非关键帧= 00:00:08.37比特率= 28.7kbits / s dup = 66 drop = 0    
文件损坏,关键帧未正确标记。时间= 00:00:51.01比特率= 125.3kbits / s dup = 675 drop = 0    
文件损坏,关键帧未正确标记。时间= 00:00:55.05比特率= 140.2kbits / s dup = 782丢弃= 0    
文件损坏,关键帧未正确标记。时间= 00:00:59.60比特率= 140.5kbits / s dup = 836 drop = 0    
[ogg @ 0x34d4640]损坏的文件,关键帧未正确标记。
文件损坏,关键帧未正确标记。时间= 00:01:08.00比特率= 143.0kbits / s dup = 900 drop = 0    
文件损坏,关键帧未正确标记。时间= 00:01:11.86比特率= 141.6kbits / s dup = 910 drop = 0    

...重复多次...

文件损坏,关键帧未正确标记。时间= 00:12:47.62比特率= 153.0kbits / s dup = 9087丢弃= 0    
帧= 11521 fps = 87 q = -1.0 Lsize = 14849kB时间= 00:12:49.48比特率= 158.1kbits / s dup = 9087 drop = 0    
视频:2401kB音频:12024kB字幕:0全局标头:0kB混合开销2.938094%
[libx264 @ 0x369c5e0]帧I:49平均QP:16.05大小:29658
[libx264 @ 0x369c5e0]帧P:2912平均QP:9.88大小:114
[libx264 @ 0x369c5e0]帧B:8560平均QP:12.76大小:78
[libx264 @ 0x369c5e0]连续B帧:0.9%0.1%0.2%98.9%
[libx264 @ 0x369c5e0] MB I I16..4:90.8%0.4%8.8%
[libx264 @ 0x369c5e0] MB P I16..4:0.0%0.0%0.0%P16..4:0.0%0.0%0.0%0.0%0.0%0.0%跳过:99.9%
[libx264 @ 0x369c5e0] MB B I16..4:0.0%0.0%0.0%B16..8:0.3%0.0%0.0%直接:0.0%跳过:99.7%L0:65.3%L1:34.6%BI:0.1%
[libx264 @ 0x369c5e0] 8x8转换内部:0.5%内部:15.8%
[libx264 @ 0x369c5e0]编码为y,uvDC,uvAC内部:6.4%0.1%0.1%内部:0.0%0.0%0.0%
[libx264 @ 0x369c5e0] i16 v,h,dc,p:94%4%2%0%
[libx264 @ 0x369c5e0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:19%22%44%1%2%2%3%1%6%
[libx264 @ 0x369c5e0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu:35%17%19%4%5%5%5%5%5%5%
[libx264 @ 0x369c5e0] i8c dc,h,v,p:100%0%0%0%
[libx264 @ 0x369c5e0]加权P帧:Y:0.0%UV:0.0%
[libx264 @ 0x369c5e0] ref P L0:82.5%1.4%11.9%4.3%
[libx264 @ 0x369c5e0] ref B L0:47.2%52.4%0.4%
[libx264 @ 0x369c5e0] ref B L1:99.2%0.8%
[libx264 @ 0x369c5e0] kb / s:25.60

该视频仍会提前播放,但时间有所不同。听起来gtk-recordmydesktop正在生成“损坏的文件”。令人讨厌的是,OGV确实可以正常工作,因此我似乎应该可以通过一些选项来使它工作。

我发现我可以在kdenlive中渲染视频,并且似乎可以在其中工作。我仍然想知道发生了什么。 kdenlive的工作要好得多,但有时仍会提前。


2
请显示您的ffmpeg命令以及生成的完整控制台输出。
llogan

好主意@LordNeckbeard我添加了命令和输出。我注意到一个错误/警告:已达到max_analyze_duration。
阿米尔T

如果您使用的是ffmpeg的最新静态版本,是否还会出现此问题?这将排除使用较新版本的ffmpeg可能已修复的任何潜在错误。无需安装或任何东西。只需下载,解压缩存档,然后执行随附的ffmpeg二进制文件即可。
llogan

您可以提供一个示例输入文件来重现该问题吗?
llogan

好主意,我会鞭打一小把,今晚晚些时候发布。
阿米尔T

Answers:


4

为什么在最终上传到youtube时为什么要转换为OGV,我可能是错的,但是您可以考虑使用AAC Audio将其转换为x264视频编解码器,甚至在Linux上,也可以将其上传到youtube,这是因为无论如何他们都希望上传。您是否尝试过制作h264并上传到youtube而不是OGV文件,然后查看是否是问题所在。因为我敢打赌,如果这样可以解决问题,那么您就会知道这是OGV上载到youtube的问题,如果不能解决,则可能是youtube的解释或类似问题带来的帧率问题。

过去,OGV文件上传到youtube时存在很多问题。我无法想象即使在这一点上它也是100%固定的。

http://support.google.com/youtube/bin/answer.py?hl=zh_CN&answer=1722171

编辑:还只是注意到您的原始素材为15fps ...这很可能是问题的根源

编辑2:我似乎有点误解了这个问题...是因为您是从OGV的视频文件开始的,而且我看到您将要使用MP4 ...这会改变一些情况。 。但是我猜想这与15fps和22050 Hz音频有关...我知道采样率与同步音频无关,但是从使用非标准帧速率和音频采样率的经验来看,我倾向于看到漂移...要使它们同步可能相当困难,而在用廉价的视频编辑器进行初始录制后却无法对其进行编辑...

虽然软件在漂移音频方面已经变得更好,但是在使用不常见的帧率和采样率时仍然是一个普遍的问题,因为关键帧同步点不是标准的,并且可能会舍入关键帧等。

您会在其中看到“损坏的文件,关键帧未正确标记”的位置。这就是它所指的...

我对您的建议是将其尽可能靠近,将其放入视频编辑器中,然后滑动并剪切音频以使其与所需的方式匹配。不幸的是有时这是固定的方式...

基于软件的转码器并不总是应有的运作...说明为什么Protools设置和/或avid设置会随硬件一起提供以进一步确保同步功能和恒定帧速率等...

您可以尝试的另一件事是将素材转换为标准帧率,然后尝试重新减弱音频...因为我很确定这是视频漂移的原因……可能会稍微放慢速度,然后加速最后,反之亦然。

编辑:我能够使用此ffmpeg命令将视频同步到原始视频...它可能需要rate子句,这是我所怀疑的

ffmpeg -i sync_test1.ogv -strict experimental -pix_fmt yuv420p -r 15 -vcodec h264 -acodec aac sync_test1.mp4


原始文件是ogv容器中的Theora视频和Vorbis音频。据我所知,Amir T并未将这种格式重新编码,但是当他尝试使用ffmpeg或YouTube重新编码原始格式时,就会出现同步问题。
llogan

输入格式为og​​v,这是gtk-recordmydesktop输出的格式。我正在尝试除ogv(FLV等)以外的任何东西。
阿米尔T

阅读我最新的答案...我认为这是FPS的问题
Chris James Champeau

1
添加-r 15与删除相同,因为ffmpeg默认情况下将继承输入帧速率,并且生成的输出文件(带有或不-r 15带有)与git head(版本N-50285-gad89952)中的ffmpeg完全相同。如果使用较旧的ffmpeg版本对您有用,则可能是回归,应报告给FFmpeg错误跟踪器
llogan

1
我与@LordNeckbeard你应该到FFmpeg的一个bug报告此
克里斯詹姆斯Champeau

3

我在Ubuntu 12.04.3 LTS上遇到了类似的问题。我使用http://johnvansickle.com/ffmpeg/上的静态ffmpeg版本解决了该问题


1
我还尝试了静态构建,但效果更好。也许该错误已得到修复,在这种情况下,将静态版本中的版本号添加到您的答案中可能会很有用?
阿米尔T

0

尝试仅将容器更改为avi而不是转码,这似乎对youtube更好:

ffmpeg -i JSP.ogv -vcodec copy -acodec copy JSP.avi

我尝试了此操作,并且上载从未完成,就像我上载OGV一样。由于此答案早于youtube接受OGV的时间,因此一定是这种变化。四年后,令人烦恼的ffmpeg仍然存在此转换问题。
mcr

我的ffpmeg是:3.2.14-1〜deb9u1(易于安装)
mcr

我已经尝试了上述所有版本,并使用静态版本(git-20191029),虽然效果有所改善,但音频和视频不同步。如果尝试,则需要较大的--max_muxing_queue_size值。我用了40960。–
mcr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.