1

Тема: CMD/BAT: Автоматическое создание Proxy-файлов видео для Vegas

Автоматическое создание Proxy-файлов видео с камеры DJI Osmo Action 5 Pro для Vegas

Камера DJI Osmo Action 5 Pro кроме оригинального видео также создает файл с расширением .LRF, содержащий видео с меньшем разрешением (1280*720 30fps).

При работе с роликами в высоком разрешении в видеоредакторе Vegas может потребоваться создание прокси-файлов, то есть копий оригинального ролика с меньшем разрешением, чтобы не тормозил предпросмотр во время монтажа в самой программе. Vegas умеет создавать прокси, но это долго и муторно. Куда лучше использовать в качестве прокси уже имеющиеся файлы .LRF.

Пошаговая инструкция, как преобразовать .LRF в Proxy для Vegas:

  1. Скачать утилиту ffmpeg для конвертации форматов - https://ffmpeg.org/download.html

  2. Прописать путь к файлу ffmpeg.exe в переменные среды PATH: Откройте Параметры Windows (Win + I); Система → О программе → Дополнительные параметры системы; во вкладке "Дополнительно" нажмите "Переменные среды..."; в переменную Path добавить путь к папке с ffmpeg.

  3. При копировании видео с камеры, скопировать в том числе и файлы с расширением .LRF

  4. В папку, куда скопированы видео-файлы с камеры, скопировать файл Proxy.cmd (см. вложение, не забудьте достать его из zip-архива).

  5. Запустить Proxy.cmd, дождаться завершения процесса (должны исчезнуть все черные окна). По итогу у вас появятся файлы с расширением .MP4.sfvp0, это и есть прокси для Vegas.

  6. Дальше просто работаете в Vegas, она автоматически подтянет данные прокси. Чтобы в окне предпросмотра использовались прокси-файлы (а не оригинальные), выставите режим предпросмотра Preview (Full) или Half, если у вас все равно тормозит воспроизведение.

Шаги 1 и 2 проделываются один раз, в последующем они не требуются.

Важные замечания:

  1. Во время создания прокси-файлов появится куча черных окошек (на каждый файл по одному окошку) и комп прилично нагрузится (как ЦП, так и видеокарта). Скорость процесса зависит от мощности вашего железа и количества файлов. Например, у меня порядка 100 файлов обрабатывались около 1 минуты 20 секунд.

  2. Видеокарта NVidia! Для других карт надо поменять параметр GPU_ACCEL на amf для AMD и qsv для Intel. Но в этих режимах не тестировалось. Можно этому параметру присвоить пустое значение (тогда весь процесс пойдет через ЦП).

  3. Этот скрипт также делает прокси и для видео с дрона Fimi X8 Mini (приятный бонус).

  4. Тестировалось в VEGAS Pro 21.0.

  5. В некоторых случаях возможна небольшая рассинхронизация прокси с оригиналом, особенно это касается таких FPS, как 48, 50, 100.

  6. Прокси с гиперлапс-видео Vegas не принимает.

  7. С таймлапс-видео прокси вообще отсутствует (можно сделать средствами самого Vegas).

:: ==============================================
:: Батник создания Proxy-файлов для VEGAS Pro 21.0 (и других версий)
:: Проверено по данным с камеры DJI Osmo Action 5 Pro и дрона Fimi X8 Mini
:: Для работы нужно установить ютилиту FFmpeg - https://ffmpeg.org/download.html
:: (c) Arigato Software, 2025
:: ==============================================

@echo off
setlocal enabledelayedexpansion

:: ==============================================
:: Конфигурация
:: ==============================================
:: Расширение прокси-файлов
set PROXY_EXT=MP4.sfvp0
:: Битрейт прокси
set BITRATE=12M
:: Ширина прокси
set WIDTH=1280
:: Высота прокси
set HEIGHT=720
:: GPU-ускорение (NVIDIA=cuda, AMD=amf, INTEL=qsv, CPU=пусто)
set GPU_ACCEL=cuda
:: Включение аудио в прокси (1=вкл, 0=выкл, для Vegas выкл!)
set INCLUDE_AUDIO=0

:: ==============================================
:: Обработка файлов *.LRV и *.LRF
:: ==============================================
echo [INFO] Create proxy files

:: Применяем параметры
if not "!GPU_ACCEL!"=="" set "GPU_ACCEL=-hwaccel !GPU_ACCEL!"
if !INCLUDE_AUDIO! equ 1 (
	set "INCLUDE_AUDIO=-c:a aac -b:a 128k"
) else (
	set "INCLUDE_AUDIO=-an"
)

:: Перебор всех .LRV и .LRF-файлов
for %%i in (*.LRV *.LRF) do (
	set "source_filename=%%~ni.MP4"
	set "proxy_filename=%%~ni.%PROXY_EXT%"
	echo !source_filename!
	
	:: Определяем FPS оригинала
	call :get_fps "!source_filename!" source_fps
	echo FPS: !source_fps!
	
	:: Получаем количество кадров
	call :frames "!source_filename!" frames
	echo Frames: !frames!
	
	:: Определяем поворот
	call :rotation "%%i" rotation_degrees
	if !rotation_degrees! neq 0 (
		echo Rotation: !rotation_degrees!
	)
	
	:: Выбираем фильтр поворота
	set "vf_rotate="
	if !rotation_degrees! equ 90 set "vf_rotate=transpose=1,"
	if !rotation_degrees! equ 180 set "vf_rotate=transpose=1,transpose=1,"
	if !rotation_degrees! equ 270 set "vf_rotate=transpose=2,"
	
	:: Запускаем кодирование
	start "!source_filename!" ffmpeg !GPU_ACCEL! -i "%%i" -y -c:v mpeg2video ^
		-b:v %BITRATE% ^
		!INCLUDE_AUDIO! ^
		-vf "!vf_rotate!scale=%WIDTH%:%HEIGHT%:force_original_aspect_ratio=decrease,setsar=1,fps=!source_fps!" ^
		-f mp4 -r !source_fps! ^
		-movflags faststart -timecode "00:00:00:00" ^
		-fps_mode cfr -frames:v !frames! ^
		"!proxy_filename!"
)

:: ==============================================
:: Завершение работы
:: ==============================================
echo [SUCCESS] OK
rem pause
exit /b 0

:: ==============================================
:: Функция определения количества кадров
:: %1 - файл, %2 - выходная переменная
:: ==============================================
:frames
setlocal
set "frames=0"
for /f %%f in (
	'ffprobe -v error -select_streams v:0 -show_entries stream^=nb_frames -of default^=nokey^=1:noprint_wrappers^=1 "%~1" 2^>^&1'
) do set "frames=%%f"
endlocal & set "%~2=%frames%"
exit /b 0

:: ==============================================
:: Функция определения поворота видео
:: %1 - файл, %2 - выходная переменная
:: ==============================================
:rotation
setlocal
set "rot=0"
for /f "tokens=2 delims==" %%r in (
	'ffprobe -v error -select_streams v:0 -show_entries stream_side_data^=rotation -of default^=nw^=1 "%~1"'
) do set "rot=%%r"

:: Нормализация отрицательных значений
if "!rot!"=="-90" set "rot=270"
if "!rot!"=="-180" set "rot=180"
if "!rot!"=="-270" set "rot=90"
endlocal & set "%~2=%rot%"
exit /b 0

:: ==============================================
:: Функция определения частоты кадров видео
:: %1 - файл, %2 - выходная переменная
:: Возвращает fps в формате "60000/1001" (59.94) или "30/1" (30.0)
:: ==============================================
:get_fps
setlocal
set "fps_value=0/0"
for /f "tokens=2 delims==" %%f in (
    'ffprobe -v error -select_streams v:0 -show_entries stream^=r_frame_rate -of default^=nw^=1 "%~1"'
) do (
    set "fps_value=%%f"
    :: Удаляем возможные кавычки
    set "fps_value=!fps_value:"=!"
)
endlocal & set "%~2=%fps_value%"
exit /b 0

P.S. Можно модифицировать скрипт для других видеоредакторов.