audio - FFmpeg concat 视频和音频不同步

标签 audio video ffmpeg concatenation

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

使用 concat 和编码 视频似乎工作正常。音频保持同步,因为 ffmpeg 进行了完整的转换计算并且似乎一切正常。

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

我已经 tried several flags解决这个似乎基于时间戳的问题。不过,这些似乎都无法解决问题。

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

注意:我可以在 SO 上找到的所有其他问题似乎都可以通过简单地重新编码视频来“解决”问题。这不是一个好的解决方案。

更新

我意识到 concat 不是问题所在。原始剪辑集的时间戳不匹配。 concat + encoding 以某种方式解决了这个问题,但我不想每次都重新编码视频和松散的质量。

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 而且我仍然无法让持续时间保持不变。

Here is the full ffprobe output

Here is the original (red) vs the segment (green)

详细示例文件

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

最佳答案

这两个步骤应该有效

第 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 包含填充文件的名称。

关于audio - FFmpeg concat 视频和音频不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35416110/

相关文章:

html - 音频标签在 Safari 中不起作用

xcode - 每当出现错误消息时,Xcode都会发出弹出声音

swift - GPUImage 输入 movieURL 输出 filteredMovieURL

video - 阅读嵌入 Youtube 视频时间轴上的当前位置

node.js - fluent-ffmpeg 使用流媒体提取音频

javascript - HTML5 音频 - IOS 浏览器不工作

java - 如何在 Android 中使用 Sound with Toast

Android 应用程序演示记录器应用程序?

linux - 高度不能被 2 整除 ffmpeg 我该如何解决这个问题?

android - ffmpeg 如何才能像 Android 内置的视频查看器一样高效?