Я пытаюсь добавить дополнение к большому количеству видео в своих папках. Я создал приложение с 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
@kesh Я просто хочу, чтобы он автоматически переименовывал файл (с «file.ext» на «file_.ext»), я не хочу, чтобы он перезаписывал его. Я просто констатировал то, что появилось при запуске команды.
Ага, понятно. К сожалению, я не знаю AppleScript, чтобы помочь вам. У вас больше шансов получить ответ на Apple SO плата





Фактическая команда 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##*.}";
«Он хочет перезаписать исходный файл» — это не может быть сделано ни одной универсальной низкоуровневой программой для обработки видео. FFmpeg активно считывает данные из исходного файла по мере записи выходных данных. Ваш сценарий должен позволять FFmpeg записывать во временный выходной файл, удалять исходный файл, а затем переименовывать/перемещать выходной файл, чтобы он имел то же имя, что и оригинал.