Моя миссия - создавать видеоролики из старых веб-слайд-шоу. Для начала у меня есть jpegs и аудиофайлы, которые работали как слайд-шоу Flash в старой системе, структурированной так:
Аудио структура
- my_audio_1.mp3 (этот файл представляет собой 3-х секундный mp3 тишины)
- my_audio_2.mp3
- my_audio_3.mp3
- my_audio_4 и т. д. примерно 30 mp3 за слайд-шоу
Структура изображения
- my_image_1.jpg (это действует как начальный слайд)
- my_image_2.jpg
- my_image_3.jpg
- my_image_4. и т.д ... примерно 30 изображений в слайд-шоу.
Поскольку существует почти 100 слайд-шоу, которые необходимо преобразовать в видео, я создал веб-интерфейс, использующий PHP для автоматизации процесса, который находится в локальной системе и пытается объединить файлы с помощью shell_exec(). Процесс использует следующий рабочий процесс:
- Прокрутите каждый слайд и сделайте AVI или MPEG. Так, например, my_mini_video_2.avi будет видео, которое состоит из my_image_2.jpg и имеет саундтрек my_audio_2.mp3. Этот слайд будет длиться длину my_audio_2.mp3.
- Соедините / прошейте / спрячьте все мини-видео, чтобы создать финальное видео (используя комбинацию cat и mencoder или ffmpeg (я также пробовал avimerge, но безрезультатно).
- Перекодируйте новое «главное» видео в различные форматы, такие как flv и т.д.
Я думал, что это было бы просто и было близко во многих случаях, но это все еще не будет работать. Я не могу пройти второй этап, так как не могу получить идеальное «мастерское» видео. Теперь я экспериментировал с Mencoder, FFMpeg и, кажется, прошел через каждую комбинацию, о которой я могу думать. Проблема в том, что аудио и видео никогда не синхронизируются, что бы я ни пытался.
Кроме того, я даже пытался создавать мини-видео без аудио, объединяя MP3 в один длинный MP3, используя cat и mp3wrap, а затем назначая новый длинный MP3 в качестве звуковой дорожки, но это всегда приводит к очень короткому файлу или сильно замедленному вниз файл и делает женский голос за кадром звучит как мужской боксер!
Похоже, что нет никаких проблем с оригинальными файлами.
Есть ли у кого-нибудь опыт успешного производства видео с той же точки отсчета? Или есть идеи о том, что я могу делать не так?
В качестве примера:
Если я создаю тихие мини-видео и соединяю их в «temp-master.mpg», а затем объединяю MP3 в один файл «temp-master-audio.mp3», продолжительность аудиофайла составляет 09:10, а Продолжительность видеофайла составляет 08:35. Они должны быть одинаковыми, и звук будет казаться неуклюжим.
Я не опубликовал код, так как написал много комбинаций.
ОБНОВЛЕНО 21 марта 2010
Благодаря рекомендации Майкла Стила относительно AviSynth и VirtualDub (и я добавил плагин GScript), мне удалось добиться некоторого прогресса, и этот скрипт почти работает. Единственная проблема сейчас заключается в том, что хотя в этом примере 4 мини-видео добавляются рядом друг с другом, как я хочу, мини-видео всегда одно и то же (например, видео-4, видео-4, видео-4, видео- 4 вместо видео-1, видео-2, видео-3, видео-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)
""")
}
Так что это почти там, но мне просто нужно выяснить, почему мини-видео не увеличиваются?