Войти

Показать полную графическую версию : Создание скрипта конвертации видео FFmpeg


Bio_Hazard
11-07-2024, 14:30
Здравствуйте!
Помогите написать скрипт для конвертации видео через утилиту FFmpeg
Требования:
1. Скрипт написан в формате cmd/bat
2. Скрипт обрабатывает содержимое каталога и всех подкаталогов, где он лежит
3. Установка переменных через SET:
3.1. расположение исполняемого файла ffmpeg.exe
3.2. указание желаемого битрейда видео
3.3. указание желаемого пресета конвертации (к примеру, ultrafast)
3.4. указание желаемого разрешения при масштабировании (описано далее)
3.5. указание форматов файлов, которые нужно конвертировать

4. Видео:
Скрипт ищет файлы (п3.5) и конвертирует в формат MP4, кодек h264 с переменным битрейтом (п.3.2) в 2 прохода. Распознает разрешение видео и если по большей стороне оно больше чем указано в п3.4, масштабирует до указаного с сохранением пропорций. К примеру, указано 1280, а видео 1080х1920 (вертикальное), тогда видео будет сконвертировано в 720х1280.

5. Аудио:
Аудио будет сконвертировано в AC-3. Каналы - как у исходного, частота дискретизации - как у исходного, битрейд аудио: если превышает допустимый битрейд для AC-3 640kbit/s, конвертировать в этот битрейд, иначе, оставить как в оригинале.

Благодарю!

bredych
11-07-2024, 17:16
это на собеседование тестовая задача чтоль?)

DJ Mogarych
11-07-2024, 17:57
Bio_Hazard, на каком этапе реализации у вас возникли затруднения?

Bio_Hazard
11-07-2024, 18:07
bredych, та нет. Для личного использования.
DJ Mogarych, на этапе, когда я замучил чат GPT, но он рабочего варианта не скинул. Было пару версий скрипта, но там либо масштабирование не работало, либо не кодировалось вообще.

DJ Mogarych
11-07-2024, 22:08
Это задача не столько сложная, сколько требующая много времени на реализацию из-за большого количества требований.
Почитайте пару статей по ffmpeg, через несколько дней уже сможете реализовать большинство пунктов.

Bio_Hazard
12-07-2024, 10:04
UPD
Добил обработку видео, осталось добавить аудио
@echo off
color 0A
chcp 65001
setlocal enabledelayedexpansion

SET "FFMPEG_PATH=ffmpeg.exe"

SET "FORMATS=*.mp4 *.avi *.mkv *.mov *.flv *.wmv"

SET "VIDEO_BITRATE=8000k"

:: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo
SET "PRESET=ultrafast"

SET "MAX_SIZE=1920"

if not exist "%FFMPEG_PATH%" (
echo FFmpeg не найден!
pause
exit /b
)

for %%f in (%FORMATS%) do (
set "input=%%f"
set "output_temp=%%~nf_temp.mp4"
set "output_final=%%~nf_converted.mp4"

for /f "tokens=1,2 delims=x " %%a in ('%ffmpeg_path% -i "%%f" 2^>^&1') do (
set "width=%%a"
set "height=%%b"
)

if !width! gtr !height! (
set "scale_width=%MAX_SIZE%"
set "scale_height=-1"
) else (
set "scale_width=-1"
set "scale_height=%MAX_SIZE%"
)

"%FFMPEG_PATH%" -i "!input!" -vf "scale=!scale_width!:!scale_height!" -c:v libx264 -b:v !VIDEO_BITRATE! -c:a copy -preset !PRESET! -pass 1 -an -f mp4 NUL
"%FFMPEG_PATH%" -i "!input!" -vf "scale=!scale_width!:!scale_height!" -c:v libx264 -b:v !VIDEO_BITRATE! -c:a copy -preset !PRESET! -pass 2 "!output_temp!"

move /Y "!output_temp!" "!output_final!"
)

endlocal




© OSzone.net 2001-2012