2

Мне нужно пакетное извлечение миниатюрных картинок из сотен файлов .mpg, используя следующий код летучей мыши, который работает как чудо, но единственным недостатком является то, что выходной png с именем файла, как «filename.mp4.png». поэтому мой вопрос, как я могу переписать код, чтобы в выходном png-файле не было .mp4?

for %%A IN (*.mp4) DO ffmpeg -i "%%A" -vf "select=gte(n\,300)" -vframes 1 "%%A.png"

2 ответа2

2

То, что вы ищете, это расширение параметров, в частности, удаление подстроки. Попробуй это:

for file in *.mp4; do echo ffmpeg -i "$file" -vf "select=gte(n\,300)" -vframes 1 "${file%.mp4}.png"; done

Если у вас есть переменная $file , вы можете использовать ${file%.mp4} для вывода содержимого с последним .mp4 .

Вот статья с дополнительной информацией: http://wiki.bash-hackers.org/syntax/pe

РЕДАКТИРОВАТЬ: Очень жаль, но я думал, что тег сказал "BASH" вместо "партии". Я задавался вопросом о забавном синтаксисе. Однако я оставлю это здесь пока. Если никто не знает, как сделать это с Windows, это довольно тривиально с BASH, так что, возможно, вы могли бы где-нибудь подобрать оболочку BASH, если нет лучшей альтернативы.

1

Можно найти [ 1 ], что %%~n должен дать вам имя файла без расширения.

Попробуй если получится

for %%A IN (*.mp4) DO ffmpeg -i "%%A" -vf "select=gte(n\,300)" -vframes 1 "%%~nA.png"

Примечание: Вы можете прочитать больше во многих документах в Интернете о правилах расширения, начиная с этого ответа [ 1 ] и этого старого руководства nt [ 2 ].

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .