Успешно конкатенация нескольких видео

Моя миссия состоит в том, чтобы создать видео из старых веб-слайд-шоу. Для запуска с, у меня есть jpegs и звуковые файлы, которые работали слайд-шоу Flash в старой системе, структурированной, такие как это:

Аудио структура

  • my_audio_1.mp3 (этот файл является 3-секундным mp3 тишины),
  • my_audio_2.mp3
  • my_audio_3.mp3
  • my_audio_4 и т.д.... примерно 30 mp3s на слайд-шоу

Структура изображения

  • 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. Соединение / сшивает / concat все мини-видео для создания заключительного видео (Используя комбинацию кошки и или mencoder или ffmpeg (я также попробовал avimerge, но напрасно).
  3. Транскодируйте новое 'основное' видео к различным форматам, таким как flv и т.д.

Я думал, что это будет просто и было близко во многих случаях, но это все еще не будет работать. Я не могу закончить этап 2, поскольку я не могу получить идеальное 'основное' видео. Я теперь экспериментировал с Mencoder, FFMpeg и, кажется, был через каждую комбинацию, о которой я могу думать. Проблема состоит в том, что аудио и зрительный ряд никогда не синхронизируют, независимо от того, что я пробую.

Кроме того, я даже попробовал созданные аудио меньше мини-видео, присоединяясь к MP3s в один длинный MP3 с помощью и кошки и mp3wrap и затем присваивая новый длинный MP3, поскольку аудиотрек, но это всегда производит или очень короткий файл или плохо, замедлил файл и заставляет розеточный голос за кадром походить на штекерного боксера!!!

Кажется, нет никаких проблем вообще с исходными файлами.

У кого-либо есть опыт в создании видео успешно от того же вида начальной точки? Или какие-либо идеи о том, что я могу делать неправильно?

Как пример:

Если я создаю тихие мини-видео, и сшиваю их вместе во 'временный-файл-master.mpg' и затем присоединяюсь к MP3s вместе в единственный MP3 под названием 'temp-master-audio.mp3', продолжительность звукового файла является 9:10, и продолжительность видеофайла является 8:35. Они должны быть тем же, и аудио будет казаться sloooow.

Я не отправил код, поскольку я записал партии и много комбинаций.

ОБНОВЛЕННЫЙ 21 марта 2010

Благодаря рекомендации Michael Steele о 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)
    """)
}

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

6
задан 14.11.2012, 20:44

1 ответ

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

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

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

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

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

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

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

Теги

Похожие вопросы