5

Моя миссия - создавать видеоролики из старых веб-слайд-шоу. Для начала у меня есть 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(). Процесс использует следующий рабочий процесс:

  1. Прокрутите каждый слайд и сделайте AVI или MPEG. Так, например, my_mini_video_2.avi будет видео, которое состоит из my_image_2.jpg и имеет саундтрек my_audio_2.mp3. Этот слайд будет длиться длину my_audio_2.mp3.
  2. Соедините / прошейте / спрячьте все мини-видео, чтобы создать финальное видео (используя комбинацию cat и mencoder или ffmpeg (я также пробовал avimerge, но безрезультатно).
  3. Перекодируйте новое «главное» видео в различные форматы, такие как 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)
    """)
}

Так что это почти там, но мне просто нужно выяснить, почему мини-видео не увеличиваются?

1 ответ1

1

Ваша проблема может быть вызвана из-за разной частоты кадров в исходном контенте. Используйте приложение, такое как MediaInfo, чтобы определить, является ли это проблемой.

Предложение № 1

Я успешно использовал AviSynth и VirtualDub для подобных задач. Avisynth создает видеопоток на основе написанного вами сценария. Он идеально подходит для объединения нескольких небольших файлов, потому что вы можете установить точное время. Возможно, вам придется использовать один из множества сторонних плагинов для отображения последовательных изображений .jpg в течение заданных периодов времени.

Когда вы довольны тем, что производит AviSynth, используйте VirtualDub для кодирования его в любой формат, который вы хотите.

Предложение № 2

Сделайте ваши аудио и видео соединения отдельно, а затем объедините два потока в качестве последнего шага.

  1. Используйте аудио редактор, такой как Audacity, чтобы создать один мастер .mp3 или несжатый .wav.
  2. Создайте видео слайд-шоу, как вы делаете.
  3. Объедините два потока. VirtualDub может сделать это, но это немного громоздко для чего-то такого простого. Я использовал ripbot264. Популярный инструмент Handbrake также может это сделать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .