#string #parsing #batch-file
Вопрос:
Попытка совместить видео и аудио с помощью FFMPEG и петли FOR. У меня есть папка, полная файлов, которые выглядят так
movie1_audio.m4a
movie1_video.mp4
movie2_audio.m4a
movie2_video.mp4
Мне нужен способ ссылаться только на все до подчеркивания, а не на все имя файла. Приведенный ниже скрипт ищет совпадающие файлы .mp4 и .m4a с одинаковыми именами для сопоставления. Я пытаюсь изменить его, чтобы искать файлы с одинаковыми именами перед символом подчеркивания.
FOR %%A IN (*.mp4) DO (
ffmpeg -i "%%~nA.mp4" -i "%%~nA.m4a" -vcodec copy -acodec copy -movflags faststart "output%%~nA.mp4"
)
Я знаю, что могу пакетно переименовывать свои файлы, чтобы легко решить эту проблему, но если есть способ просматривать только первую часть имени файла в пакетном режиме, я думаю, что эти знания могут быть полезны в будущих проектах. Спасибо!
Комментарии:
1. Я бы использовал шаблон
movie*_*.*
, чтобы не совпадать с непреднамеренными файлами…
Ответ №1:
Вам просто нужна другая вложенная команда FOR, которая использует несколько ее опций. Я не знаю, как вам нужно вписаться в вашу команду FFMPEG, поэтому я оставляю это на ваше усмотрение.
@echo off
FOR %%A IN (*.mp4) DO (
FOR /F "tokens=1,* delims=_" %%G IN ("%%~A") DO (
REM %%G will be the file name before the underscore.
REM %%H will be everything after the underscore
ffmpeg ......
)
)
Комментарии:
1. Потрясающе, это сработало! Вот мой последний код
FOR %%A IN (*.mp4) DO ( echo Creating "%%~A.mp4" FOR /F "tokens=1,* delims=_" %%G IN ("%%~A") DO ( ffmpeg -i "%%G_video.m4a" -i "%%G_audio.m4a" -vcodec copy -acodec copy -movflags faststart "output%%G.mp4" )