Используйте
ffmpeg -f lavfi -i color=#000000:1920x1080:r=30:d=10 \
-f lavfi -t 10 -i anullsrc \
-i "image-1.png" \
-i "image-2.png" \
-filter_complex \
"[2:v]scale=4455:2506:force_original_aspect_ratio=decrease,zoompan=z='min(zoom+0.0015,2.5)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=150:fps=30:s='1920x1080'[v2];\
[bg][v2]overlay=0:0:enable='between(t,0,5)'[bg];\
[3:v]scale=3840:2160:force_original_aspect_ratio=decrease,zoompan=z='min(zoom+0.0015,2.5)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=150:fps=30:s='1920x1080',setpts=PTS+5/TB[v3];\
[bg][v3]overlay=0:0:enable='between(t,5,10)'[bg];\
-map "[bg]" -map 1:a -vcodec libx264 -preset veryfast -crf 15 -y "output.mp4"
Для источников lavfi лучше всего установить частоту кадров и длительность, где это применимо, внутри фильтра.
Так как вы не зацикливаете изображения, -t
не будет иметь никакого эффекта. Поскольку zoompan будет устанавливать fps на своем выходе, вы можете пропустить настройку скорости ввода. А поскольку это одно изображение, setpts перед zoompan не имеет значения. Его следует устанавливать только на зум-масштаб, временные метки которого необходимо сместить.
Так как у вас есть только один звук, нет смысла отправлять его в amix - там нечего смешивать! Просто сопоставьте это напрямую.
M-x, только для чтения переключателем
или в более поздних версиях Emacs
Режим только для чтения M-x
На моем поле Windows, которое составляет Alt-x для перевода в рабочее состояние подсказки meta и ввода "только для чтения переключателем" для вызова корректной функции elisp.
Если Вы используете клавиатурные привязки по умолчанию,
C-x C-q
(который Вы читаете вслух как "Управление-Q Управления-X"), будет иметь тот же эффект. Помните, однако, учитывая, что emacs по существу бесконечно реконфигурируем, Ваш пробег может варьироваться.
Развитие из комментария: необходимо отметить, что записываемое состояние буфера не изменяет записываемое разрешение файла. При попытке выписать в файл только для чтения, то Вы будете видеть сообщение с подтверждением. Однако при владении файлом можно выписать изменения, не изменяя полномочия на файле.
Это очень удобно, если требуется внести изменение с переодеванием в файл, не имея необходимость проходить несколько шагов, добавляет разрешение записи, выписывает изменения, удаляет разрешение записи. Я склонен забывать, что в последний раз ступают, оставляя потенциально критические файлы открытыми для случайных изменений позже.
Убедитесь, что Вы не путаете 'файл' с 'буфером'. Можно установить буферы на только для чтения и назад снова с C-x C-q
(toggle-read-only
). Если у Вас есть разрешение читать, но не запись, файл, буфер, который Вы получаете при посещении файла (C-x C-f
или find-file
) будет помещен в режим только для чтения автоматически. Если Вы хотите изменить полномочия на файле в файловой системе, возможно, запустите с dired
на каталоге, который содержит файл. Документация для сушеного может быть найдена в информации; C-h i (emacs)dired RET
.
Если только буфер (а не файл) только для чтения, можно использовать toggle-read-only
, который обычно связывается с C-x C-q
.
Если сам файл только для чтения, однако, можно найти следующую функцию полезной:
(defun set-buffer-file-writable ()
"Make the file shown in the current buffer writable.
Make the buffer writable as well."
(interactive)
(unix-output "chmod" "+w" (buffer-file-name))
(toggle-read-only nil)
(message (trim-right '(?\n) (unix-output "ls" "-l" (buffer-file-name)))))
Функция зависит от unix-output
и trim-right
:
(defun unix-output (command &rest args)
"Run a unix command and, if it returns 0, return the output as a string.
Otherwise, signal an error. The error message is the first line of the output."
(let ((output-buffer (generate-new-buffer "*stdout*")))
(unwind-protect
(let ((return-value (apply 'call-process command nil
output-buffer nil args)))
(set-buffer output-buffer)
(save-excursion
(unless (= return-value 0)
(goto-char (point-min))
(end-of-line)
(if (= (point-min) (point))
(error "Command failed: %s%s" command
(with-output-to-string
(dolist (arg args)
(princ " ")
(princ arg))))
(error "%s" (buffer-substring-no-properties (point-min)
(point)))))
(buffer-substring-no-properties (point-min) (point-max))))
(kill-buffer output-buffer))))
(defun trim-right (bag string &optional start end)
(setq bag (if (eq bag t) '(?\ ?\n ?\t ?\v ?\r ?\f) bag)
start (or start 0)
end (or end (length string)))
(while (and (> end 0)
(member (aref string (1- end)) bag))
(decf end))
(substring string start end))
Поместите функции в Ваш ~/.emacs.el
, оцените их (или перезапустите emacs). Можно затем сделать файл в текущем буфере перезаписываемым с M-x set-buffer-file-writable
.
Я испытал решение Vebjorn Ljosa, и оказалось, что, по крайней мере, в моем Emacs (22.3.1) нет такой функции как 'право для обрезки', которое используется для удаления бесполезной новой строки в конце вывода chmod.
Удаление вызова к 'праву для обрезки' помогло, но заставило строку состояния "возвратиться" из-за дополнительной новой строки.
Вот что я нашел: M-x set-file-modes filename mode
Это сработало на моем компьютере с Windows Vista.
Например: M-x set-file-modes