我正在使用ffmpeg-python(source)创建效果,在其中添加模糊的背景以填充高大的垂直视频的两侧,如下所示:
问题是输出没有附加音频。由于片段相同,因此我想将片段之一的音频保留在最终输出中。如何保存音频? (不过,我不想覆盖两者的音频并获得回声效果!)
这是我正在使用的功能:
import ffmpeg
def add_blurred_bg():
HEIGHT = 720
WIDTH = 1280
in_file = ffmpeg.input('input.mp4')
probe = ffmpeg.probe('input.mp4')
video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None)
iw=int(video_stream['width'])
ih=int(video_stream['height'])
nw = HEIGHT*iw/ih
(
ffmpeg
.overlay(
in_file.filter('scale', WIDTH, -2).crop(0,(WIDTH*HEIGHT/nw-HEIGHT)/2,WIDTH,HEIGHT).filter('gblur', sigma=40),
in_file.filter('scale', -2, HEIGHT),
x=(WIDTH-nw)/2
)
.output('output.mp4')
.run()
)
答案 0 :(得分:1)
您是否必须保持音频样式?可以混合音频和视频吗?如果是这样,这是一个混乱但有效的示例:
import ffmpeg
import os
def add_blurred_bg():
HEIGHT = 720
WIDTH = 1280
inp = 'input.mp4'
os.system("ffmpeg -i " + inp + " -f mp3 -ab 192000 -vn music.mp3")
print("extracting audio...")
in_file = ffmpeg.input(inp)
probe = ffmpeg.probe('input.mp4')
video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None)
iw=int(video_stream['width'])
ih=int(video_stream['height'])
nw = HEIGHT*iw/ih
(
ffmpeg
.overlay(
in_file.filter('scale', WIDTH, -2).crop(0,(WIDTH*HEIGHT/nw-HEIGHT)/2,WIDTH,HEIGHT).filter('gblur', sigma=40),
in_file.filter('scale', -2, HEIGHT),
x=(WIDTH-nw)/2
)
.output('outputPartial.mp4')
.run()
)
print("bluring...")
os.system("ffmpeg -i outputPartial.mp4 -i music.mp3 -shortest -c:v copy -c:a aac -b:a 256k output.mp4")
print("mixing...")
os.remove("outputPartial.mp4")
os.remove("music.mp3")
print("cleaning up...")
print("done!")
我不知道您为什么会遇到这个问题,但这是一种解决方法。
步骤1:提取音乐
步骤2:模糊视频
步骤3:混合音频和视频
步骤4:清理