Пакет Windows — измените начало пути, но сохраните остальное

#windows #batch-file #ffmpeg

#Windows #пакетный файл #ffmpeg

Вопрос:

Я использую FFMPEG для кодирования видео.
У меня есть пакетный файл, который будет кодировать файлы, которые вы помещаете в него, сохраняя исходное имя файла и копируя закодированные файлы в определенный каталог.
Я бы хотел, чтобы этот скрипт «знал» путь к файлу оригинала и копировал закодированный файл в путь относительно него, что означает: исходный файл, удаляемый из пакетного файла, находится в C:somefoldershowseasonepisodefile.mov
закодированный файл должен быть закодирован в D:differentdirectoryshowseasonepisodefile.mp4
Часть пути до show исправлена.

Это то, что у меня есть до сих пор:

 @echo on

set count=0
for %%a in (%*) do (<br>
  if exist %%a (

        md \specificpath"%%~na"

        %MYFILES%ffmpeg.exe -i "%%~a" -vcodec libx264 -preset medium -vprofile baseline -level 3.0 -b 500k -vf scale=640:-1 -acodec aac -strict -2 -ac 2 -ab 64k -ar 48000 "%%~na_500.mp4"
        copy "%%~na_500.mp4" "\specificpath"%%~na"%%~na_500.mp4"
        copy "%%~na_500.mp4" "\specificpath"%%~na"%%~na_500.mp4"
        del "%%~na_500.mp4"
  

set /a count =1

) еще ( эхо пропускает несуществующий %%~a

Спасибо,
Орен

Комментарии:

1. Не связано, но обратите внимание, что -refs это не будет автоматически установлено, -level если вы не используете сборку, включающую фиксацию 0aac9b7 (новее, чем 13 мая 2014). В scale измените -1 -2 значение на, чтобы гарантировать, что выходная высота делится на 2 для этого кодера. Добавьте ,format=yuv420p сразу после вашего масштаба, чтобы убедиться, что в вашем выводе используется схема подвыборки цветности, совместимая с большинством проигрывателей. Возможно, вы захотите добавить -movflags faststart . Используйте два прохода , если вы нацелены на определенный размер выходного файла или средний битрейт, которого вы хотите достичь.

2. Прохладный. Спасибо @LordNeckbeard!

Ответ №1:

 @ECHO OFF
SETLOCAL
SET "MYFILES=MY_files"
SET "fixed_path=u:destdir"
FOR %%a IN ("%*") DO IF EXIST "%%a" (

 FOR /f "tokens=3*delims=" %%b IN ("%%~dpa") DO (
  ECHO(MD "%fixed_path%%%c"
  ECHO(%MYFILES%ffmpeg.exe -i "%%~a" -vcodec libx264 -preset medium -vprofile baseline -level 3.0 -b 500k -vf scale=640:-1 -acodec aac -strict -2 -ac 2 -ab 64k -ar 48000 "%%~na_500.mp4"
  ECHO(copy "%%~na_500.mp4" "%fixed_path%%%c%%~na_500.mp4"
  ECHO(del "%%~na_500.mp4"
 )
 ) ELSE (ECHO(%%~a does NOT EXIST
)


GOTO :EOF
  

Необходимые команды MD редактируются только ECHO для целей тестирования. После того, как вы убедились, что команды верны, измените ECHO(MD на MD , чтобы фактически создать каталоги. Добавить 2>nul для подавления сообщений об ошибках (например. когда каталог уже существует)

Аналогично, команды DEL and COPY просто повторяются.

Я установил myfiles константу — без сомнения, ваша будет отличаться, и я установил fixed _path константу для удобства редактирования.

Понятия ffmpeg не имею, верна ли команда — просто отредактировал вашу, и я озадачен тем, что вы используете две, по-видимому, идентичные copy команды подряд, но, возможно, мои глаза обманывают…

Комментарии:

1. Спасибо! Я изменил значение в токене, и оно работает безупречно. Есть ли способ удалить несколько файлов из этого пакета? Двойная копия действительно была опечаткой… Еще раз спасибо.