当前位置: 首页 > 知识库问答 >
问题:

FFmpeg concat视频和音频不同步

万俟穆冉
2023-03-14

使用ffmpeg concat连接多个文件似乎会导致音频的时间戳或偏移不匹配。我试过几个视频,发现H.264/MP4也有同样的问题。

使用concat并对视频进行编码似乎可以很好地工作。当ffmpeg执行全部转换计算时,音频保持同步,似乎可以得到所有正确的结果。

然而,简单地将视频级联而不进行任何转换或编码会导致同步问题缓慢增加。显然,对视频进行编码而不是简单地加入它们将导致信息/质量的损失,所以我宁愿找到一种方法来解决这个问题。

我尝试了几个标志来解决这个似乎基于时间戳的问题。但这些似乎都无法解决问题。

ffmpeg -f concat -fflags +genpts -async 1 -i segments.txt test.mov
ffmpeg -auto_convert 1 -f concat -fflags +genpts -async 1 -i segments.txt -c copy test2.mov
ffmpeg -f concat -i segments.txt -c copy -fflags +genpts test3.mp4
ffmpeg -f concat -fflags +genpts -async 1 -i segments.txt -copyts test4.mov
ffmpeg -f concat -i segments.txt -copyts test5.mov
ffmpeg -f concat -i segments.txt -copyts -c copy test6.mov
ffmpeg -f concat -fflags +genpts -i segments.txt -copyts -c copy test7.mov

注意:所有其他问题,我可以找到的,似乎“修复”问题,只要重新编码视频。不是个好办法。

我意识到这不是问题所在。原始剪辑集的时间戳不匹配。不知怎么的concat+编码修复了这个问题,但我不想每次都重新编码视频和松散的质量。

ffmpeg -y -ss 00:00:02.750 -i input.MOV -c copy -t 00:00:05.880 output.MOV

这导致了以下数据

ffprobe -v quiet -show_entries stream=start_time,duration output.MOV

start_time=-0.247500
duration=6.131125
start_time=-0.257333
duration=6.155333

从那以后,我尝试在不同的地方使用-tom和-t,以及-af apad-c:v copy,但我仍然未能使持续时间保持相同。

我录制了一个示例视频,添加了截图命令,然后将其连接起来。http://davidpennington.me/share/audio_sync_test_video.zip

共有1个答案

澹台星光
2023-03-14

这两个步骤的过程应该起作用

1.填充每个段中的音频

ffmpeg -i segment1.mov -af apad -c:v copy <audio encoding params> -shortest -avoid_negative_ts make_zero -fflags +genpts padded1.mov

使用同步流生成段

ffmpeg -y -ss 00:00:02.750 -i input.MOV -c copy -t 00:00:05.880 -avoid_negative_ts make_zero -fflags +genpts segment.MOV

2.连接

ffmpeg -f concat -i segments.txt -c copy test.mov

其中segments.txt由填充文件的名称组成。

 类似资料:
  • 在页面上添加视频、声音、动画等,可以增强用户体验。在HTML5之前,为网页添加多媒体的唯一办法,就是使用第三方的插件(如,Adobe Flash等)。 HTML5中,提供了对多媒体的原生支持,只需通过 video元素,就可以向网页嵌入视频、电影或音频资源,通过 audio元素向网页嵌入音频资源,省时省力。 视频 早就听说HTML提供了对视频的原生支持,你可能已经迫不及待想体验一下了。 在HTML5

  • HTML5功能包括本机音频和视频支持,无需使用Flash。 HTML5 和 标签使得向网站添加媒体变得简单。您需要设置src属性以标识媒体源并包含控件属性,以便用户可以播放和暂停媒体。 嵌入视频 以下是在您的网页中嵌入视频文件的最简单形式 - <video src = "foo.mp4" width = "300" height = "200" controls> Your browser

  • 我有一个长音频部分和一个短视频部分,我想在一起mux。 我正在尝试使用以下命令进行MUX: video_0-0002.h264-整个文件(2秒长) Audio.wav-从4秒到6秒 但音频被搞砸了...我怎样才能正确地做呢? 也试过了,听起来好像最后还是有寂静。

  • 主要内容:HTML 音频/视频 DOM 参考手册,HTML 音频/视频 方法,HTML 音频/视频属性,HTML 音频/视频事件HTML 音频/视频 DOM 参考手册 HTML5 DOM 为 <audio> 和 <video> 元素提供了方法、属性和事件。 这些方法、属性和事件允许您使用 JavaScript 来操作 <audio> 和 <video> 元素。 HTML 音频/视频 方法 方法 描述 addTextTrack() 向音频/视频添加新的文本轨道。 canPlayType() 检测浏

  • 如果一些文件是带音频的视频,而一些文件只是音频,是否可以连接多个文件。最终结果应该如下所示: 我认为这一定是可能的,因为我也可以结合一个大的音频文件和一个小的视频与FFMPEG。结果将是一个视频文件,其中最后一帧只是冻结,但音频仍然播放。我想实现相同的结果,要么冻结最后一帧或简单的黑色帧。这可能吗?

  • 当试图将source.mp4编码为多个比特率和大小以便自适应HLSv3回放时,所产生的音频和视频逐渐不同步。当擦洗到稍后的点,它似乎重置,并保持同步。 我正在使用最新的FFMPEG4.2.1通过自制-ffmpeg,使用libfdk-aac编解码器。注意,这也发生在FFMPEG4.1中。 音频和视频流很少,这会导致这个问题吗? 以下是源文件中的一些元数据: 和编码命令: