Решение проблемы со звуком при кодировании видео в Xvid4PSP 5
Здравствуйте, уважаемые посетители. Давно пользуюсь программой Xvid4PSP для кодирования видео и на днях столкнулся с проблемой: при склеивании нескольких видеофайлов посредством Xvid4PSP, в конечном, прокодированном видео отсутствует звук. Вернее, он есть, но лишь в первом фрагменте, во всех остальных присоединённых звука нет. Данная проблема встречается лишь при работе с видеозаписями в определённом формате в пятой версии программы. Решение этой проблемы нашёл самостоятельно и хочу описать его здесь, вдруг поможет кому-нибудь ещё.
Вариантов решения проблемы собственно два. Первый: использовать альтернативный скрипт AviSynth. Второй: предварительно прокодировать каждый фрагмент видео, с которым имеются проблемы, в другой формат. Вариант с предварительным кодированием надо сказать очень затратен по времени и очень неудобен, так что мало кого устроит. Гораздо проще использовать альтернативный скрипт. Сейчас покажу, как это делается. К примеру, у вас есть два видеофайла, которые нужно склеить и прокодировать: video1.avi и video2.avi. Инструкция следующая:
1. Открыть первый видеофайл в программе Xvid4PSP
2. Открыть пункт меню AviSynth->Изменить скрипт фильтрации
3. В появившемся окне «Фильтрация» нужно заменить весь текст следующим скриптом, который кстати генерирует сам Xvid4PSP, но при работе с другими форматами видео. В этом скрипте вам нужно заменить лишь пути к фрагментам видеофайлов на свои:
Import("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\functions\AudioFunctions.avs")
Import("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\functions\VideoFunctions.avs")
LoadCPlugin("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\plugins\yadif.dll")
DirectShowSource("d:\newfolder\video1.avi", fps=30.000, convertfps=true)++DirectShowSource("d:\newfolder\video2.avi", fps=30.000, convertfps=true)
ConvertToYV12(interlaced = true)
Yadif(order=-1)
Соответствующим образом, если вам нужно склеить более двух видеофайлов, измените скрипт, дописав в пятой строке ++DirectShowSource(«d:\newfolder\video3.avi», fps=30.000, convertfps=true) нужное количество раз. Например, для склеивания четырёх видеофайлов скрипт будет выглядеть так:
Import("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\functions\AudioFunctions.avs")
Import("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\functions\VideoFunctions.avs")
LoadCPlugin("C:\Program Files (x86)\XviD4PSP 5\dlls\AviSynth\plugins\yadif.dll")
DirectShowSource("d:\newfolder\video1.avi", fps=30.000, convertfps=true)++DirectShowSource("d:\newfolder\video2.avi", fps=30.000, convertfps=true)++DirectShowSource("d:\newfolder\video3.avi", fps=30.000, convertfps=true)++DirectShowSource("d:\newfolder\video4.avi", fps=30.000, convertfps=true)
ConvertToYV12(interlaced = true)
Yadif(order=-1)
Обратите внимание, что в пятой строке не допускаются переносы строк!
Единственный минус этого метода с изменением скрипта заключается в том, что кодировщик после этого неправильно показывает процесс кодирования видео в процентах, что впрочем никак не влияет на конечный результат.
Ваш комментарий будет опубликован после автоматической проверки системой фильтрации спама и гадостей.