Applescript для пакетного конвертирования видео с помощью ffmpeg

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

on open argv
    set paths to ""
    repeat with f in argv
        set paths to paths & quoted form of POSIX path of f & " "
    end repeat
    tell application "Terminal"
        do script "for f in " & paths & "; do ffmpeg -i \"$f\"  -vf pad=\"9/8*iw:ih:(ow-iw)/2:0:color=black\" \"$f\"; done"
        activate
    end tell
end open

Обратите внимание, что я хочу сохранить имя файла, тип файла и поместить новый файл рядом со старым, но просто добавить подчеркивание в конце нового файла перед расширением; например: файл.ext. > файл_.ext

«Он хочет перезаписать исходный файл» — это не может быть сделано ни одной универсальной низкоуровневой программой для обработки видео. FFmpeg активно считывает данные из исходного файла по мере записи выходных данных. Ваш сценарий должен позволять FFmpeg записывать во временный выходной файл, удалять исходный файл, а затем переименовывать/перемещать выходной файл, чтобы он имел то же имя, что и оригинал.

kesh 11.05.2022 17:41

@kesh Я просто хочу, чтобы он автоматически переименовывал файл (с «file.ext» на «file_.ext»), я не хочу, чтобы он перезаписывал его. Я просто констатировал то, что появилось при запуске команды.

Thad_Supersperm 13.05.2022 14:57

Ага, понятно. К сожалению, я не знаю AppleScript, чтобы помочь вам. У вас больше шансов получить ответ на Apple SO плата

kesh 13.05.2022 16:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Фактическая команда ffmpeg, которую вы запускаете через do script:

ffmpeg -i "$f" -vf pad = "9/8*iw:ih:(ow-iw)/2:0:color=black" "$f";

Это действительно говорит ffmpeg, что input_url и output_url одинаковы: $f. Из вашего комментария попробуйте указать другой output_url аналогично этому изменению.

do script "for f in " & paths & "; do outfile=\"${f%.*}_.${f##*.}\"; ffmpeg -i \"$f\" -vf pad=\"9/8*iw:ih:(ow-iw)/2:0:color=black\" \"$outfile\"; done"

Конкретный параметр и синтаксис подстановки могут различаться в разных оболочках. В zsh (и, возможно, в bash) приведенное выше создает новую переменную outfile, которую затем можно использовать в команде ffmpeg. Он устанавливается равным значению f текущего цикла, но разбивается на три части:

  • все до финала . (итак, исходный путь и имя файла)
  • новое подчеркивание _ и .
  • все после финала . (оригинальное расширение)

Если вы хотите заглянуть в сам терминал и поэкспериментировать с этими заменами, рассмотрите такой пример без операций:

f = "/example/path/filename with spaces.and.periods.mp4"; echo "   $f\n" "becomes\n" "  ${f%.*}_.${f##*.}";

Другие вопросы по теме