Здесь улучшен ответ @lucasjones. Я включил улучшения, упомянутые в разделе комментариев после его ответа. Я надеюсь, что кто-то найдет это полезным.
public static string[] GetTypePropertyNames(object classObject, BindingFlags bindingFlags)
{
if (classObject == null)
{
throw new ArgumentNullException(nameof(classObject));
}
var type = classObject.GetType();
var propertyInfos = type.GetProperties(bindingFlags);
return propertyInfos.Select(propertyInfo => propertyInfo.Name).ToArray();
}
См. этот ответ на этот вопрос для более нового способа сделать это.
Старая версия: вы должны сделать это, используя панель , movie и overlay в FFmpeg. Команда будет выглядеть примерно так:
ffmpeg -i top.mov -vf 'pad=iw:2*ih [top]; movie=bottom.mov [bottom]; \
[top][bottom] overlay=0:main_h/2' stacked.mov
Сначала фильм, который должен быть сверху, заполняется в два раза выше его высоты. Затем загружается нижний фильм. Затем нижний фильм накладывается на заполненный верхний фильм со смещением половины высоты проложенного фильма.
Используйте фильтры vstack (вертикальный) или hstack (горизонтальный). Это легче и быстрее, чем другие методы.
Оригиналы из Один в пустыне :
С vstack:
ffmpeg -i input0 -i input1 -filter_complex vstack output
Добавьте фильтр amerge для объединения аудиоканалов с обоих входов:
ffmpeg -i input0 -i input1 -filter_complex "[0:v][1:v]vstack[v];[0:a][1:a]amerge=inputs=2[a]" -map "[v]" -map "[a]" -ac 2 output
-ac 2
включается в понижающее микширование в стерео, если оба входа содержат многоканальный звук. Например, если оба входа являются стереофоническими, вы получите 4-канальный выходной аудиопоток вместо стерео, если вы опустите -ac 2
. ffmpeg -i input0 -i input1 -filter_complex "[0:v][1:v]vstack[v]" -map "[v]" -map 1:a output
Если вы смешиваете входы с аудио и входами, у которых нет звука, то amerge будет терпеть неудачу, потому что каждый вход требует звука. Вы можете добавить звук без звука anullsrc filter , чтобы предотвратить это:
ffmpeg -i input0 -i input1 -filter_complex "[0:v][1:v]vstack[v];anullsrc[silent];[0:a][silent]amerge=inputs=2[a]" -map "[v]" -map "[a]" -ac 2 output.mp4
ffmpeg -i input0 -i input1 -i input2 -filter_complex "[0:v][1:v][2:v]vstack=inputs=3[v]" -map "[v]" output
ffmpeg -i input0 -i input1 -i input2 -i input3 -filter_complex "[0:v][1:v]hstack[top];[2:v][3:v]hstack[bottom];[top][bottom]vstack[v]" -map "[v]" output
Поскольку оба видео должны иметь одинаковые для vstack и одинаковые высоты для hstack, вам может понадобиться масштабировать одно из других видео в соответствии с другим:
Простая шкала / g10], чтобы установить ширину входного сигнала от 0 до 640 и автоматически установить высоту при сохранении пропорции:
ffmpeg -i input0 -i input2 -filter_complex "[0:v]scale=640:-1[v0];[v0][1:v]vstack" output
ffmpeg
сообщает No such filter: 'vstack'
. Должен ли я сначала установить его?
– frans
12 December 2015 в 14:39
ffmpeg
слишком стар. Пользователям рекомендуется использовать сборку ffmpeg
, созданную из текущей ветви git master.
– LordNeckbeard
14 December 2015 в 02:36
Stream specifier ':a' in filtergraph description [0:v][1:v]vstack[v];[0:a][1:a]amerge=inputs=2[a] matches no streams.
Почему я это получаю?
– RaduM
29 June 2017 в 09:02