Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Видео и аудио: обработка и кодирование (http://forum.oszone.net/forumdisplay.php?f=45)
-   -   Создание скрипта конвертации видео FFmpeg (http://forum.oszone.net/showthread.php?t=355478)

Bio_Hazard 11-07-2024 14:30 3028929

Создание скрипта конвертации видео FFmpeg
 
Здравствуйте!
Помогите написать скрипт для конвертации видео через утилиту 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 3028932

это на собеседование тестовая задача чтоль?)

DJ Mogarych 11-07-2024 17:57 3028934

Bio_Hazard, на каком этапе реализации у вас возникли затруднения?

Bio_Hazard 11-07-2024 18:07 3028935

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

DJ Mogarych 11-07-2024 22:08 3028939

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

Bio_Hazard 12-07-2024 10:04 3028948

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



Время: 10:15.

Время: 10:15.
© OSzone.net 2001-