6 slideshow concatenation video-editing
我的任务是用旧的网络幻灯片制作视频。首先,我有 jpeg 和音频文件,它们在旧系统中用作 Flash 幻灯片,结构如下:
音频结构
图像结构
由于几乎有 100 个幻灯片必须转换为视频,因此我使用 PHP 创建了一个基于 Web 的界面来自动化该过程,该界面位于本地系统上并尝试使用shell_exec()组合文件。该过程使用以下工作流程:
我认为这很简单,并且在很多情况下都接近过,但它仍然不起作用。我无法通过第 2 阶段,因为我无法获得完美的“主”视频。我现在已经对 Mencoder、FFMpeg 进行了试验,并且似乎已经完成了我能想到的每一种组合。该问题是,音频和视觉效果从来没有同步,无论我怎么努力。
此外,我什至尝试创建无音频迷你视频,使用cat和mp3wrap将 MP3 连接成一个长 MP3 ,然后将新的长 MP3 指定为音轨,但这总是会产生一个非常短的文件或严重减慢down 文件并使女性画外音听起来像一个男性拳击手!!!
原始文件似乎完全没有问题。
有没有人有从同类起点成功制作视频的经验?或者关于我可能做错了什么的任何想法?
如果我创建无声迷你视频,然后将它们拼接成“temp-master.mpg”,然后将 MP3 拼接成名为“temp-master-audio.mp3”的单个 MP3,则音频文件的持续时间为 09:10,并且视频文件的持续时间为 08:35。它们应该是相同的,音频看起来会很慢。
我没有发布代码,因为我已经写了很多很多组合。
感谢 Michael Steele 关于 AviSynth 和 VirtualDub 的推荐(并且我已经添加了 GScript 插件),我已经取得了一些进展,这个脚本几乎可以工作了。现在唯一的问题是,虽然在这个例子中 4 个迷你视频根据我的需要被添加到彼此旁边,但迷你视频总是相同的(例如video-4、video-4、video-4、video- 4而不是video-1, video-2, video-3, video-4):
# A nearly functional AVS file
# Set out some basic variables
base_audio = "C:\..."
base_image = "C:\..."
total_slides = 4
LoopThroughFiles(total_slides, base_audio, base_image)
#This is the function for outputting each combination
function AudioNImage(string mp3, string image, float fps)
{
audio = DirectShowSource(mp3)
length = audiolengthF(audio)
rate = Audiorate(audio)
frames = Int((length/rate)*fps)
video = ImageSource(image, end=Int(frames), fps=fps)
return audiodub(video, audio)
}
#Loop through the files to create the full command string
# My audio and image files are in the format of VID0002.jpg and VID0002.mp3
function LoopThroughFiles(int total, string audiopath, string imagepath)
{
GScript("""
cmd = ""
for (i=1, total) {
audio = audiopath + "000" + String(i) + ".mp3"
picture = imagepath + "000" + String(i) + ".jpg"
cmd = cmd + "AudioNImage(audio, picture, 25)"
if (i < total) {
cmd = cmd + "+"
}
}
GEval(cmd)
""")
}
Run Code Online (Sandbox Code Playgroud)
所以这几乎就在那里,但我只需要找出为什么迷你视频不增加?
您的问题可能是由于源内容中的帧速率不同造成的。使用 MediaInfo 等应用程序来确定这是否是问题所在。
我已经成功地使用 AviSynth 和 VirtualDub 来完成此类任务。Avisynth 根据您编写的脚本创建视频流。它非常适合组合多个小文件,因为您可以设置精确的时间。您可能必须使用众多第 3 方插件之一才能在设定的时间段内显示连续的 .jpg 图像。
一旦您对 AviSynth 生成的内容感到满意,请使用 VirtualDub 将其编码为您想要的任何格式。
分别进行音频和视频拼接,然后作为最后一步合并两个流。