与 ffmpeg 的音视频同步

Posted

技术标签:

【中文标题】与 ffmpeg 的音视频同步【英文标题】:Audio Video Sync With ffmpeg 【发布时间】:2012-12-16 14:59:52 【问题描述】:

我有一个非常奇怪的视频文件。 它有音频/视频同步问题。视频很快,音频很好。 视频有奇怪的帧速率:26.07 fps。

如何使用 ffmpeg 修复视频流。在视频开始时,同步正常,但在视频流结束时,还剩下大约 5 分钟的音频,并且正在黑屏播放。

这是 ffmpeg -i video.avi 的输出

ffmpeg version git-2011-10-15-1d0afec, Copyright (c) 2000-2011 the FFmpeg developers
  built on Oct 15 2011 14:27:57 with gcc 4.4.5
  configuration: --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab --enable-libxvid
  libavutil    51. 21. 0 / 51. 21. 0
  libavcodec   53. 20. 1 / 53. 20. 1
  libavformat  53. 16. 0 / 53. 16. 0
  libavdevice  53.  4. 0 / 53.  4. 0
  libavfilter   2. 43. 6 /  2. 43. 6
  libswscale    2.  1. 0 /  2.  1. 0
  libpostproc  51.  2. 0 / 51.  2. 0
[mpeg4 @ 0xa585420] Invalid and inefficient vfw-avi packed B frames detected
Input #0, matroska,webm, from 'video.avi':
  Duration: 02:03:46.01, start: 0.000000, bitrate: 103 kb/s
    Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 704x288 [SAR 1:1 DAR 22:9], 26.07 fps, 25 tbr, 1k tbn, 25 tbc (default)
    Stream #0:1(pol): Audio: ac3, 48000 Hz, 5.1(side), s16, 448 kb/s (default)

【问题讨论】:

【参考方案1】:

首先您可能需要分离音频:

 ffmpeg -i input.avi -vn -ac 2 -ar 48000 -ab 448k -f mp3 audio.mp3

然后您需要将视频文件的整个长度(以秒为单位)除以视频流的实际长度(视频停止并且您可以听到音频的时间)。你应该得到一个略高于 1 的数字(1.12 或类似的数字)。你取这个商,然后:

 ffmpeg -i input.avi -vf "setpts=quotient*PTS" -an output.avi

然后你将视频和音频结合起来。

【讨论】:

以上是关于与 ffmpeg 的音视频同步的主要内容,如果未能解决你的问题,请参考以下文章

音视频同步

FFMPEG 将 image2pipe 中的视频与 RTMP 中的音频同步

FFmpeg C API - 同步视频和音频

ffmpeg播放时刻与视频文件时间戳对齐(同步)

Qt音视频开发09-ffmpeg内核音视频同步

ffmpeg 如何音视频同步