bash ffmpeg использует имя входного файла для имени выходного видео - PullRequest
0 голосов
/ 29 июня 2018

Я работаю на Mac Terminal. У меня есть 250 видео файлов в каталоге. Для каждого я хочу подклип на 20 секунд между секундами 10 и 20, а также 179 и 207. Мне бы хотелось, чтобы выходной файл имел имя, совпадающее с входным файлом, плюс суффикс "_1", чтобы я мог их различать. На данный момент у меня есть следующий код:

#!/bin/bash

for %%f in (*.mp4) do ffmpeg -i "%%f" -vf "select='between(t, 10, 20) +
between(t, 197, 207)', setpts=N/FRAME_RATE/TB" -qscale 0 -af "aselect='between(t, 10, 20) + 
between(t, 197, 207)', asetpts=N/SR/TB" "%%~nf_1.mp4"

При выполнении выдается следующая ошибка: синтаксическая ошибка рядом с неожиданным токеном `('

Если я удаляю цикл и просто пытаюсь указать конкретные «inputfilename.mp4» и «inputfilename_1.mp4» (то есть мое желаемое имя выходного файла), это работает. Что касается имени выходного файла в приведенном выше коде, этот пост предполагает, что "~ nf" удаляет расширение (то есть ".mp4") из входного файла, поэтому я добавил _1.mp4 впоследствии.

Есть предложения? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Наконец, тот, который работает, выглядит так:

for file in *.mp4; do ffmpeg -i "$file" -vf "select='between(t, 10, 20) + between(t, 197, 207) + between(t, 10, 20) + between(t, 197, 207)', setpts=N/FRAME_RATE/TB" -qscale 0 -af "aselect='between(t, 10, 20) + between(t, 197, 207) + between(t, 10, 20) + between(t, 197, 207)', asetpts=N/SR/TB" "${file%.mp4}_1.mp4"; done
0 голосов
/ 29 июня 2018

Ваш цикл должен быть

for %%f in *.mp4 do

другими словами, потеряйте круглые скобки. Часть «in» цикла ожидает список параметров. * .Mp4 будет расширен, чтобы включить все имена файлов, которые совпадают.

Если у вас есть два файла a.mp4 и b.mp4, то * .mp4 будет расширен до выполнения цикла:

for %%f in a.mp4 b.mp4 do
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...