【发布时间】:2021-11-20 17:35:58
【问题描述】:
我有一个视频文件和一个音频文件要合并在一起。音频持续时间比视频短。我想将它们对齐在尾部并切断视频的头部。
图表说明:
[xxxx------] video
[------] audio
[======] merged
视频的“x”部分被删除。
视频/音频的时长未知,但音频时长保证比视频短。未知的原因是因为我正在动态生成视频并通过管道传输到 FFmpeg,因此无法事先知道持续时间。
【问题讨论】:
我有一个视频文件和一个音频文件要合并在一起。音频持续时间比视频短。我想将它们对齐在尾部并切断视频的头部。
图表说明:
[xxxx------] video
[------] audio
[======] merged
视频的“x”部分被删除。
视频/音频的时长未知,但音频时长保证比视频短。未知的原因是因为我正在动态生成视频并通过管道传输到 FFmpeg,因此无法事先知道持续时间。
【问题讨论】:
回答我自己的问题,因为还没有人回答,经过一些研究我找到了解决方案。
我的解决方案是先修剪视频,然后合并修剪后的视频和音频。
# get audio length
AUDIO_LENGTH=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $AUDIO)
AUDIO_LENGTH_INVERSE=$(echo "-$AUDIO_LENGTH" | bc)
# trim video file so it matches audio file in length
# -sseof $AUDIO_LENGTH_INVERSE: starts at audio length relative to EOF (end of file)
# -i $VIDEO: input video path
# -t $AUDIO_LENGTH: duration of the video that it should process
ffmpeg -sseof $AUDIO_LENGTH_INVERSE -i $VIDEO -t $AUDIO_LENGTH $TEMP
# merge video and audio
ffmpeg -i $TEMP -i $AUDIO -c:v copy $OUTPUT
【讨论】: