我有一个噩梦,将使用最新OS X版本录制的GoToMeeting输出转码为可播放的网页。无论我使用什么设置,我最终会遇到时间同步问题,至少在这个特定的录音中。
.mov
文件如下所示。请注意它的可变帧速率,并且因为它主要只是PowerPoint演示文稿的屏幕录像,偶尔会有鼠标移动,输出也应该是VFR,以生成一个小文件,但仍然保留偶尔的运动。
$ ffmpeg -i original.mov
ffmpeg version N-58273-g18df75f Copyright (c) 2000-2013 the FFmpeg developers
built on Nov 19 2013 10:34:42 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libass --enable-libcelt --enable-libfaac --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-openssl --enable-libopus --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvo-aacenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --prefix=/usr/local
libavutil 52. 53.100 / 52. 53.100
libavcodec 55. 43.101 / 55. 43.101
libavformat 55. 21.100 / 55. 21.100
libavdevice 55. 5.100 / 55. 5.100
libavfilter 3. 91.100 / 3. 91.100
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f822980a000] decoding for stream 0 failed
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'original.mov':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
creation_time : 2014-03-20 02:09:22
Duration: 03:08:26.72, start: 0.000000, bitrate: 75 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv), 1368x728 [SAR 1:1 DAR 171:91], 20 kb/s, 0.60 fps, 600 tbr, 600 tbn, 1200 tbc (default)
Metadata:
creation_time : 2014-03-20 02:09:22
handler_name : Apple Alias Data Handler
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 16000 Hz, mono, fltp, 47 kb/s (default)
Metadata:
creation_time : 2014-03-20 02:09:22
handler_name : Apple Alias Data Handler
Stream #0:2(eng): Data: none (rtp / 0x20707472), 6 kb/s
Metadata:
creation_time : 2014-03-20 02:09:22
handler_name : Apple Alias Data Handler
Stream #0:3(und): Data: none (rtp / 0x20707472), 0 kb/s
Metadata:
creation_time : 2014-03-20 02:09:22
handler_name : Apple Alias Data Handler
.mov
文件(我遗憾地无法公开发布)在我使用的任何应用程序中正常播放:VLC,Media Player Classic和QuickTime。但是,播放转码后的输出始终会出现以下症状:
我可以使用.mp4
编码的参数,可以在支持H.264的所有浏览器中播放。请注意,这是在Windows上,但Linux表现出同样的问题。
ffmpeg.exe -y -i original.mov -i watermark.png -filter_complex "[0:v] crop=1184:720:178:6,scale=1184:720,setsar=1/1; [0:v][1:v] overlay=1242:648 [0:v]" -vcodec libx264 -acodec libvo_aacenc -q:a 80 -crf 30 -ac 1 -ar 16000 -strict -2 -profile:v baseline -level 3 outout.mkv
除了那些不言自明或微不足道的论点之外的论点:
-filter_complex
:从视频裁剪多余的letterboxing /邮箱,并将宽高比设置为1:1(方形像素)(Safari需要的东西),然后覆盖PNG的水印并将输出调整为720p -crf 30
:以恒定质量,可变比特率编码视频-ac 1 -ar 16000
:使用16 KHz的单声道音频进行编码-strict -2 -profile:v baseline -level 3
:使用FFmpeg"实验"编码使用Baseline level 3配置文件实现Web兼容性的H.264编码器请注意,是的,这最初会转到MKV容器,因为由于某种原因,直接编码到.mp4
容器会挂起FFmpeg。然后,我使用-acodec copy -vcodec copy
将音频和视频流直接复制到.mp4
容器中。最后,我将输出通过MP4Box进行交错,以便逐步下载。
转码时,FFmpeg确实会丢帧,我怀疑这与问题有关,输出如下:
FFmpeg: frame= 232 fps= 26 q=24.0 size= 5983kB time=00:32:44.57 bitrate= 24.9kbits/s dup=0 drop=1487
当我稍后尝试将其从此临时.mp4
容器中复制到.mkv
容器中时,我收到大量警告:
[mp4 @ 0297cd00] Non-monotonous DTS in output stream 0:0; previous: 6341306, current: 6007024; changing to 6341307. This may result in incorrect timestamps in the output file.
如果源文件确实存在问题,我现在不会感到惊讶。但是,如果是这样,我需要明确证明 它是如何被破坏的。
有什么想法吗?
答案 0 :(得分:1)
我也一直在努力解决这个问题。帮助我的是:
http://forum.doom9.org/showthread.php?t=163290
用户发布了:
ffmpeg -fflags + genpts + igndts -i -r:v 30 -vsync 2 -async 1 -map 0:v,0:a -map 0:a
所以我用过:
nice -n 7 ffmpeg -fflags + genpts + igndts -i inFile.mov -c:v libx264 -preset slow -level 30 -qmin 38 -qmax 55 -movflags faststart -r:v 10 -vsync 2 -async 1 -map 0:v,0:a -map 0:outFile.mp4