
Ну, несколько дней я искал подходящий автоматический или полуавтоматический способ массового слияния файлов таким образом. По сути, я хочу добиться вставки одного и того же клипа перед кучей других клипов.
В этом случае я пробовал с файлами .flv, .mp4, .avi (всегда объединяя одни и те же кодеки), и после тестирования у меня ничего не получилось.все доступные программыи в Windows, и в OSx. Поверьте, я перепробовал их все. Единственные, которые, как предполагается, справляются с этой задачей достаточно хорошо, — это Videocharge:Мастер водяных знаковиСтудия Videocharge. Никто из них не смог правильно выполнить задание. Может быть, был какой-то способ, которым я мог бы этого добиться, написав скрипт сAfter EffectsилиСони Вегас, я просто ничего не нашел.
Теперь я пытаюсь найти способ добиться того же самого либо через оболочку, либо через скрипты unix... Мне все равно. Я просто не хочу монтировать Ubuntu только для этих задач. Я не программист, но я довольно упрям (что иногда приводит меня к бесконечным ночам), поэтому я был бы признателен за помощь или руководство от кого-то, кто достаточно хорош в пакетной обработке видео или скриптах.
Прямо сейчас, единственные полезные пути, которые я нашел, приводят меня к использованиюменкодилиffmpegчерез команды, но я не могу выполнить слияние в пакетном режиме. Мне все равно, как сортировать видео. Но, принимая во внимание, что операция будет выполняться над сотнями или тысячами видео, было бы нецелесообразно иметь их все в отдельных папках, каждое из которых сопровождалось бы «уникальным» вступительным клипом. Я полагаю, что наиболее логичным способом было бы хранить «кучу» видео в папке, а вступительный клип — в той же папке, что и кодировщик или рендерер.
Заранее спасибо за любую помощь или руководство.
решение1
Ну, я добавлял видео, но никогда не добавлял в начале. Вы можете использовать avidemux для добавления видео!
Я не силен в javascripting, поэтому, пожалуйста, извините, что не написал этот скрипт для вас. Есть руководство по написанию скриптов для Avidemux. Avidemux — это бесплатный видеоконвертер с открытым исходным кодом. Вы можете добавлять эффекты к своему аудио/видео в avidemux и сохранять их в нескольких форматах.
Этот скрипт является примером руководства на странице, ссылка на которую приведена здесь: [::: связь :::] и скрипт просто просканирует каталог orgDir и распакует все файлы AVI. Полученный файл помещается в каталог destDir (используя новый API directorySearch).
Функции Avidemux следующие: displayError, displayInfo, fileReadSelect, fileWriteSelect, allFilesFrom, nextFile
и другие функции: загрузка, добавление, сохранение, saveDVD, saveOGM, clearSegments, addSegment, goToTime, forceUnpack, setContainer
Больше функций скрипта здесь:http://www.avidemux.org/admWiki/doku.php?id=using:scripting#avidemux_functions
Скрипт Turotial, который конвертирует avi-файл, выглядит следующим образом:
//AD <-
/*
Simple script that scans the orgDir directory
and unpack all AVI files
The resulting file is put in destDir directory
Using new directorySearch API
*/
var app = new Avidemux();
var ds = new DirectorySearch();
var orgDir;
var destDir;
var reg =new RegExp(".$");
/*
This is for Unix
For Windows change to
sep="\\";
reg2=new RegExp("\\.*\\");
*/
var sep="\\";
var reg2 =new RegExp("\/.*\/");
var extension;
var target;
//
//
//
// select files from original & target directories
//
orgDir=fileReadSelect();
destDir=fileWriteSelect();
orgDir=pathOnly(orgDir);
destDir=pathOnly(destDir);
//
// strip last \\ or //
//
orgDir=orgDir.replace(reg,"");
destDir=destDir.replace(reg,"");
print("orgDir : <"+orgDir+">");
print("destDir : <"+destDir+">");
//
// Go
//
if(ds.Init(orgDir))
{
while(ds.NextFile())
{
// Only process file we want i.e. AVI
if(!ds.isNotFile && !ds.isDirectory && !ds.isHidden && !ds.isArchive && !ds.isSingleDot && !ds.isDoubleDot)
{
extension=ds.GetExtension();
if(extension == "avi")
{
target=ds.GetFileName();
target=destDir+sep+target;
print("***"+ds.GetFileName()+"-->"+target);
processFile(orgDir+sep+ds.GetFileName(),target);
}
//print("File: "+ds.GetFileName()+" is "+ds.GetFileSize()+" bytes, extension "+extension);
}
}
print("We just searched in directory \"" + ds.GetFileDirectory() + "\"");
ds.Close();
}
else
displayError("Error initializing the directory search");
displayInfo("Finished !");
function processFile(filename, targetfile)
{
// Load the file
app.forceUnpack();
app.load(filename);
app.rebuildIndex();
app.audio.delay=0;
app.audio.mixer("NONE");
app.audio.scanVBR();
app.setContainer("AVI_UNP");
app.save(targetfile);
return 1;
}
Надеюсь это поможет...
источники:
решение2
Большое спасибо за ваше предложение @user2377276. Я действительно ценю ваши усилия. Фактически, ваш обходной путь — это тот, который направляет меня в правильном направлении. Ну, я надеюсь на это, так как я пока не преуспел. До сих пор, самое близкое, что я смог сделать для слияния, было с помощью различных вариаций следующего кода, выполненного в том же каталоге, что и несколько разных видео. Уникальный файл для добавления был помещен в корень, и я создал C:/TEMP для вывода.
для %a в ("*.flv") выполните Mencoder -oac copy "c:\INTRO.flv" "%a" -o "c:\TEMP\%a"
Все видео в формате FLV1, но у них немного разное разрешение, так что, по сути, я получаю кучу всего.
Не знаю, стоит ли пробовать с ffmpeg. Предложения?
Я почти уверен, что этого можно добиться без необходимости перекодирования, так как я протестировал несколько программ, и ни одна из них не перекодирует, они просто принудительно устанавливают разрешение в некоторых случаях. На самом деле, программа, которая, как мне показалось, вела себя лучше всего, была приложением AIR Rich Flv, но оно не работает в пакетном режиме.