Как изменить режим чтения / записи для файла с помощью Emacs?

Используйте

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 - там нечего смешивать! Просто сопоставьте это напрямую.

125
задан Ray Vega 8 October 2008 в 00:08
поделиться

6 ответов

M-x, только для чтения переключателем

или в более поздних версиях Emacs

Режим только для чтения M-x

На моем поле Windows, которое составляет Alt-x для перевода в рабочее состояние подсказки meta и ввода "только для чтения переключателем" для вызова корректной функции elisp.

Если Вы используете клавиатурные привязки по умолчанию,

C-x C-q

(который Вы читаете вслух как "Управление-Q Управления-X"), будет иметь тот же эффект. Помните, однако, учитывая, что emacs по существу бесконечно реконфигурируем, Ваш пробег может варьироваться.

Развитие из комментария: необходимо отметить, что записываемое состояние буфера не изменяет записываемое разрешение файла. При попытке выписать в файл только для чтения, то Вы будете видеть сообщение с подтверждением. Однако при владении файлом можно выписать изменения, не изменяя полномочия на файле.

Это очень удобно, если требуется внести изменение с переодеванием в файл, не имея необходимость проходить несколько шагов, добавляет разрешение записи, выписывает изменения, удаляет разрешение записи. Я склонен забывать, что в последний раз ступают, оставляя потенциально критические файлы открытыми для случайных изменений позже.

177
ответ дан 24 November 2019 в 01:00
поделиться

CTRL + X + CTRL + Q     

7
ответ дан 24 November 2019 в 01:00
поделиться

Убедитесь, что Вы не путаете 'файл' с 'буфером'. Можно установить буферы на только для чтения и назад снова с C-x C-q (toggle-read-only). Если у Вас есть разрешение читать, но не запись, файл, буфер, который Вы получаете при посещении файла (C-x C-f или find-file) будет помещен в режим только для чтения автоматически. Если Вы хотите изменить полномочия на файле в файловой системе, возможно, запустите с dired на каталоге, который содержит файл. Документация для сушеного может быть найдена в информации; C-h i (emacs)dired RET.

14
ответ дан 24 November 2019 в 01:00
поделиться

Если только буфер (а не файл) только для чтения, можно использовать 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.

6
ответ дан 24 November 2019 в 01:00
поделиться

Я испытал решение Vebjorn Ljosa, и оказалось, что, по крайней мере, в моем Emacs (22.3.1) нет такой функции как 'право для обрезки', которое используется для удаления бесполезной новой строки в конце вывода chmod.

Удаление вызова к 'праву для обрезки' помогло, но заставило строку состояния "возвратиться" из-за дополнительной новой строки.

0
ответ дан 24 November 2019 в 01:00
поделиться

Вот что я нашел: M-x set-file-modes filename mode

Это сработало на моем компьютере с Windows Vista. Например: M-x set-file-modes ReadOnlyFile.txt 0666

12
ответ дан 24 November 2019 в 01:00
поделиться
Другие вопросы по тегам:

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