Python中用FFmpeg实现音频延迟:音视频流同步处理需求
解决方案
要实现前34秒无音频、音频从34秒开始播放且结束后视频随即终止的需求,你可以通过以下步骤修改代码:
- 获取音频时长:读取音频文件的时长,计算视频需要保留的总时长(34秒 + 音频时长),确保视频与音频同步结束。
- 截取视频片段:将原视频截断到计算出的总时长,避免视频过长。
- 延迟音频播放:用
itsoffset滤镜让音频从视频的34秒位置开始播放。 - 合并流并添加字幕:保留原有的字幕绘制逻辑,将处理后的视频和音频合并输出。
修改后的完整代码
import ffmpeg import textwrap readAloudText = "The medical center issued a statement saying that patient care was not compromised while their data was unavailable. Still, it's unsettling to hear that a hospital is shut out of parts of its own computer systems and unable to communicate electronically." # 简化字幕换行逻辑 wrapper = textwrap.TextWrapper(width=150) word_list = wrapper.wrap(text=readAloudText) caption_new = '\n'.join(word_list) # 获取音频时长,计算视频需保留的总时长 audio_probe = ffmpeg.probe('readaloudaudio.wav') audio_duration = float(audio_probe['format']['duration']) video_end_time = 34 + audio_duration # 处理视频:截取到指定时长,修正时间戳,禁用原视频音频避免冲突 in_video = ( ffmpeg.input('readaloud.mov') .trim(start=0, end=video_end_time) .setpts('PTS-STARTPTS') .audio.disable() ) # 处理音频:添加34秒偏移,让音频从视频34秒处开始播放 in_audio = ffmpeg.input('readaloudaudio.wav').filter('itsoffset', 34) # 添加字幕并合并输出 ( ffmpeg .drawtext(in_video, text=caption_new, fontcolor='black', fontsize=24, x=50, y=600) .output(in_audio, 'output.mp4', vcodec='libx264', acodec='aac') .run(overwrite_output=True) )
关键说明
ffmpeg.probe:读取音频元数据获取准确时长,保证视频截断时间精准。trim+setpts:trim截取视频后,setpts修正时间戳,避免播放跳帧或卡顿。itsoffset滤镜:实现音频时间偏移,让音频在视频播放到34秒时启动。audio.disable():禁用原视频音频轨道,确保最终输出仅包含处理后的目标音频流。
内容的提问来源于stack exchange,提问作者snailoftheyear
相关产品推荐
相关产品推荐

