Кто делает задание: ffmpeg или оболочка?

X-оконная система использует клиент-серверную архитектуру. X-сервер работает на машине, которая имеет дисплей (мониторы + устройства ввода данных), в то время как X-клиенты могут работать на любой другой машине и соединиться с X-сервером с помощью X-протокола (не непосредственно, а скорее при помощи библиотеки, как Xlib или более современный не блокирующийся событийно-ориентированный XCB). X-протокол разработан, чтобы быть расширяемым, и имеет много расширений (см. xdpyinfo(1)).

X-сервер делает только низкоуровневые операции, как создание и уничтожение окон, делая операции рисования (в наше время, большая часть рисунка сделана на клиенте и отправлена как изображение на сервер), отправляя события в окна... Вы видите, как мало X-сервер делает путем выполнения X :1 & (используйте любое число, не уже используемое другим X-сервером), или Xephyr :1 & (Xephyr выполняет X-сервер, встроенный в Ваш текущий X-сервер), и затем выполнение xterm -display :1 & и переключение на новый X-сервер (Вы, возможно, должны установить X использований авторизации xauth(1)).

Как Вы видите, X-сервер делает очень мало, он не тянет строки заголовка, не делает окна, minimization/iconification, не справляется с размещением окна... Конечно, можно управлять размещением окна, вручную выполняющим команду как xterm -geometry -0-0, но у Вас обычно будет специальный X-клиент, делающий вышеупомянутые вещи. Этот клиент называют менеджером окон. Может только быть один менеджер окон, активный за один раз. Если Вы все еще имеете открытый пустой X-сервер предыдущих команд, можно попытаться запустить менеджер окон на нем, как twm, metacity, kwin, compiz, larswm, pawm, ...

Как мы сказали, X только делает низкоуровневые операции и не обеспечивает высокоуровневые понятия как кнопки, меню, панели инструментов... Они обеспечиваются библиотеками, названными инструментариями, например: Xaw, GTK, QT, FLTK...

Настольные среды являются наборами программ, разработанных для обеспечения объединенного пользовательского опыта. Так настольные среды обычно обеспечивает панели, средства запуска приложения, системные лотки, панели управления, инфраструктура конфигурации (где сохранить настройки). Некоторые известные настольные среды являются KDE (созданное использование спокойного инструментария), Gnome (использующий GTK), Просвещение (пользующийся его собственными библиотеками инструментария)...

Некоторые современные настольные эффекты лучше всего сделаны с помощью 3-х аппаратных средств. Таким образом, новый компонент появляется, составной менеджер. X расширений, расширение XComposite, отправляют содержание окна составному менеджеру. Составной менеджер преобразовывает то содержание в структуры и использует 3-и аппаратные средства через OpenGL для создания их во многих отношениях (альфа-смешивание, 3-и проекции...).

Не так давно, X-сервер говорил непосредственно с устройствами. Значительная часть этой обработки устройства перемещалась в ядро ОС: DRI (разрешающий доступ к 3-м аппаратным средствам X и прямые клиенты рендеринга), evdev (объединенный интерфейс для обработки устройства ввода данных), KMS (движущаяся установка графического режима на ядро), GEM/TTM (текстурируют управление памятью).

Так, со сложностью устройства, обрабатывающего теперь главным образом за пределами X, стало легче экспериментировать с упрощенными оконными системами. Уэйленд является оконной системой на основе составного понятия менеджера, т.е. оконная система является составным менеджером. Уэйленд использует устройство, обрабатывающее, который переместился из X и рендеринг с помощью OpenGL.

Что касается Единицы, это - настольная среда, разработанная, чтобы иметь пользовательский интерфейс, подходящий для нетбуков.

8
06.10.2011, 01:01
3 ответа

Часть 1: % не специальный символ, таким образом, img%d.jpg аргумент передается, как к ffmpeg который “делает задание” само.

Часть 2: взгляд на ffmpeg документация, я не думаю, что существует другой способ обеспечить входные файлы, таким образом, Вам, вероятно, придется использовать символьные ссылки или ожидать “фиксации”:

Если шаблон содержит "%d" или "%0Nd", первое имя файла списка файлов, указанного шаблоном, должно содержать число, включительно содержавшее между 0 и 4, все следующие номера должны быть порядковыми. Это ограничение может быть, надо надеяться, зафиксировано.

8
27.01.2020, 20:10

Это может быть сделано с помощью каналов только, т.е. не переименовывая и без символьных ссылок.

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

например: images-to-vid '$HOME/images" '\./img_[0-9]{4}[^/0-9]*' 1024 768

# Make a video from images whose sizes and aspect-ratios may vary.
# 
# Each image is resized to fit maximized within the video frame.  
# The images are positioned centrally and padded (when required) 
#     
# Images are sourced using 'find'.  
# They are selected according to a regular expression.   
# Symbolic links are ignored.  
#
# Output from 'find' is sorted by path, ie. not by name alone,
#  but with a -maxlevel 1, this is typically the same...
#  You will need to customize the sort if this is not suitable.       
#
# Note about 'find':  
#    This script uses 'find -regex' instead of 'find -name'. 
#    The pattern must match the whole returned path, 
#       from ^ to $ inclusive  
#    The -regextype option is: posix-extended 
#
srceD="${1}"        # Source Directory
srceR="${2}"        # Source imaage extended Regex pattern
targW="${3:-800}"   # Target pixel Width
targH="${4:-600}"   # Target pixel Height
targB="${5:-black}" # Target Background colour (X11 colours)
targM="${6:-4}"     # Target screen geometry Modulo (as required by Target codec)
TARGw=$((targW-(targW%targM))); ((TARGw==targW)) || { echo "Target Width  must be divisible by $targM. Rounding down to $TARGw" 1>&2 ; targW=$TARGw; }
TARGh=$((targH-(targH%targM))); ((TARGh==targH)) || { echo "Target Height must be divisible by $targM. Rounding down to $TARGh" 1>&2 ; targH=$TARGh; }
# TODO: test for W/H == 0

cd "$srceD" || exit 2
find . -maxdepth 1 \
    \( -type f \) -and -not \
    \( -type l \) \
       -regextype posix-extended \
       -regex "$srceR" \
       -print0 | 
  sort -z | 
{ 
  while IFS= read -d $'\0' -r file ;do
      # make Composite image on coloured Background
      pnmcomp -align=center -valign=middle \
              <(anytopnm "$file" 2>/dev/null |
                pnmscale -xysize $targW $targH) \
              <(ppmmake "$targB" $targW $targH) 
  done |
  ffmpeg -r 1 \
         -f image2pipe \
         -vcodec ppm \
         -i - \
         -y -s ${targW}x${targH} \
         -vcodec mjpeg \
          images.avi
}
5
27.01.2020, 20:10
  • 1
    Спасибо @fered, это очень полезно. Ваш сценарий делает еще больше, чем, что я хотел, который является большим. Я теперь пытаюсь адаптировать сценарий к своим потребностям. Если я заменяю цикл с условием продолжения простым циклом, который не предварительно масштабирует, ни добавляет цвет фона: while IFS= read -d $'\0' -r file ;do pnmcomp -align=center -valign=middle <(anytopnm "$file" 2>/devnull) done, сценарий прекращает работать (т.е. Я добираюсь pipe: could not find codec parameters). Вы знаете почему? Сделайте мне обязательно нужно pnmscale или ppmmake питаться ffmpeg с pnm изображения? –  Amelio Vazquez-Reina 10.10.2011, 00:43
  • 2
    @intrpc. Структурирование различных рисунков размера было просто моим персональным наклоном к проблеме. Я желал сделать это с тех пор, как я потерял способность использовать avisynth (мощная среда сценариев видео - avisynth является Windows только :( Главная причина я использовал a netpbm формат - то, что я продолжал видеть регистрации о проблемах, питающихся jpegs к каналу, таким образом, я просто выбрал путь наименьшего сопротивления. Видео кодирование будет шагом, который вызывает потерю качества, но увеличивание формата кадра помогает... Я предполагаю, что у Вас есть свои определенные причины использования видео, но простой показ слайдов может работать на Вас. –  Peter.O 10.10.2011, 12:06

Для первой части только: это - ffmpeg выполнение задания. Оболочка не понимает %d представьте в виде строки как специальный шаблон в именах файлов.

3
27.01.2020, 20:10

Теги

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