Ответы пользователя по тегу FFmpeg
  • Как поменять разрешение видео mp4, через ffmpeg 600 на 600 Python?

    ae_ph
    @ae_ph
    I'm a owl )
    Вы можете использовать модуль os в Python для выполнения команды ffmpeg для изменения разрешения видеофайла mp4. Вот пример того, как вы можете использовать функцию os.system() для изменения разрешения видеофайла из командной строки:
    import os
    
    input_file = "input.mp4"
    output_file = "result.mp4"
    
    os.system(f"ffmpeg -i {input_file} -s 600x600 {output_file}")


    Этот код изменит разрешение видеофайла "input.mp4" на 600x600 и сохранит его как "result.mp4".
    Параметр -i используется для указания входного файла, а параметр -s используется для указания нового разрешения.
    f"ffmpeg -i {входной_файл} -s 600x600 {выходной_файл}" — это f-строка, которая заменит переменные внутри фигурных скобок значениями переменных входной_файл и выходной_файл.

    Важно отметить, что изменение разрешения видеофайла может повлиять на его качество, особенно если вы уменьшаете его разрешение. Также выполнение этой команды может занять некоторое время в зависимости от размера видео.

    Если вам нужен больший контроль над процессом и вы хотите получить информацию о видео, вы можете использовать библиотеку ffmpeg-python, которая является оболочкой инструмента командной строки FFmpeg. Эту библиотеку можно установить через pip:

    pip install ffmpeg-python

    Эта библиотека предоставляет простой и удобный интерфейс для выполнения команд FFmpeg в Python.
    Если вы хотите изменить разрешение видеофайла и сохранить то же соотношение сторон, вы можете использовать масштабный фильтр, вы можете использовать эту команду

    os.system(f"ffmpeg -i {input_file} -vf scale=600:-1 {output_file}")


    Здесь -1 в фильтре масштабирования заставит ffmpeg поддерживать соотношение сторон видео.
    Ответ написан
    5 комментариев
  • Как собрать .m3u8 из .mov?

    ae_ph
    @ae_ph
    I'm a owl )
    Я написал этот файл для вас.

    -c:v h264 – Кодировать будем в формат MP4 кодеком h264. Кодек h264, может отображать как QuickTime, так и Media Player.
    -hls_list_size – Установите максимальное количество записей в плейлисте. Если установлено значение 0, файл списка будет содержать все сегменты. Значение по умолчанию - 5.
    -hls_time – Задайте длину целевого сегмента. Значение по умолчанию 2.
    -start_number – Установите индекс файла, совпадающий с шаблоном файла изображения, с которого начинается чтение. Значение по умолчанию - 0.
    -g – Установите размещение ключевого кадра. Размер GOP устанавливает максимальное расстояние между ключевыми кадрами; если 0, выходной поток будет только внутренним.
    Минимальное расстояние игнорируется, если оно не совпадает с размером GOP, и в этом случае ключевые кадры всегда будут появляться с фиксированным интервалом.
    По умолчанию не установлен параметр, поэтому без этой опции библиотека может свободно выбирать, где разместить ключевые кадры.
    -crf – Установите компромисс: качество / размер, для режимов постоянного качества (без целевого битрейта) и ограниченного качества (с максимальным целевым битрейтом).
    Допустимый диапазон: от 0 до 63, более высокие числа указывают на более низкое качество и меньший размер вывода.
    Используется только если установлено; по умолчанию используется только целевой битрейт.
    -flags +cgop – Включить закрытый GOP.
    -flags -cgop – Включить открытый GOP.
    -f hls – Фильтр создаёт файлы hls.
    -hls_flags single_file – Если этот флаг установлен, мультиплексор сохранит все сегменты в одном файле MPEG-TS и будет использовать байтовые диапазоны в списке воспроизведения.
    Плейлисты HLS, созданные таким образом, будут иметь номер версии 4.

    -map 0 выбирает все потоки.
    -map 0:v только видеопотоки.
    -map 0:a только аудиопотоки.

    Структура папок для этого bat файла.
    Your folder
    |
    | ffmpeg.exe
    | MOV – m3u8.bat
    |
    +---Result
    |
    |
    \---Your_files
    your_video.mov

    @echo off
    color a
    set a="Your_files\*.mov"
    set b="Result\%%~na.m3u8"
    set c=ffmpeg.exe
    set f=-c:v h264 -flags +cgop -g 30 -map 0 -crf 23 -start_number 0 -hls_time 1 -hls_list_size 500000 -f hls
    for %%a in (%a%) do (%c% -y -i "%%a" %f% %b%)
    exit


    Надеюсь это именно то, что вам нужно.
    Дополнительные фалы вы можете также найти в моём репозитории.
    Внутри bat файлов вы находится более подробная информацию о настройках.
    Ответ написан
    Комментировать
  • Как наложить видео на картинку с помощью ffmpeg?

    ae_ph
    @ae_ph
    I'm a owl )
    Я подумал, что это не плохая идея и написал bat файл.

    : - Двоеточие используется для разделения значений.
    ; - График фильтров состоит из последовательности цепочек фильтров. Последовательность цепочек фильтров представлена ​​списком описаний цепочек фильтров, разделенных «;».
    , - Цепочка фильтров состоит из последовательности связанных фильтров, каждый из которых связан с предыдущим в последовательности.
    Цепочка фильтров представлена ​​списком описаний фильтров, разделенных символами ",".
    scale2ref – Масштабируйте (изменяйте размер) входного видео на основе эталонного видео (изображения в нашем случае).
    filter_complex – Объединяет фильтры в один.
    overlay – Наложить одно видео поверх другого видео или изображения.
    У него два входа и один выход. Первый вход - это «основное» видео, на которое накладывается второй вход.

    1.1 – Значение масштабирования изображения.
    Значение 1 приведёт к масштабированию изображения 1 к 1 с видео.
    Значение 2 приведёт к масштабированию изображения в 2 раза.

    Размер изображения не имеет значения. Изображение масштабируется относительно размера видео.
    Видео остаётся статичным и его размеры не изменяются.

    Структура папок для этого bat файла.
    Your folder
    |
    | ffmpeg.exe
    | JPG + MP4 = Watermark.bat
    |
    +---Result
    |
    |
    \---Your_files
    your_image.jpg
    your_video.mp4

    @echo off
    setlocal EnableDelayedExpansion
    color a
    set a=Your_files\*.mp4
    set aa=Your_files\*.jpg
    set b="Result\temp1.mp4"
    set c=ffmpeg
    set f=-filter_complex "[1][0] scale2ref=w=oh*mdar:h=ih*1.1 [foto][video];[foto][video] overlay=(main_w-w)/2:(main_h-h)/2 " -preset ultrafast
    for %%s in (%aa%) do !set aud="%%s"!
    for %%a in (%a%) do (%c% -y -i "%%a" -i %aud% %f% %b%)
    exit


    У меня есть проект посвящённый FFMPEG
    В этом репозитории есть много готовых решений.
    Так-же вы сможете найти внутри .bat файлов более подробные инструкции.
    Надеюсь это решение поможет вам
    Ответ написан
    Комментировать
  • Почему не воспроизводится видео mp4 через QuickLook на macOS?

    ae_ph
    @ae_ph
    I'm a owl )
    Я использую Windows os у меня нет возможности протестировать на Mac os
    Попробуй воспользоваться моим файлом MKV – MP4.bat
    Вот ссылка на мой репозиторий FFMPEG_BAT
    Если это не сработает тогда хз.. А если сработает тогда я гляжу у тебя там определённый фильтр, просто допиши его к себе в .bat файл тот и всё
    Ответ написан
  • Как убрать задержку при передачи видео mp4?

    ae_ph
    @ae_ph
    I'm a owl )
    Попробуйте сделать так..
    Рядом с app.js положите bat файл с этим кодом и стартоните его, у меня мгновенно взлетает.
    Я изменил кодек на mpeg4 это основное.
    @echo off
    color a
    start node app.js
    set c=ffmpeg
    set f=-f gdigrab -framerate 30 -rtbufsize 999999k -thread_queue_size 9999999 -indexmem 9999999 -i desktop -c:v mpeg4 -qscale:v 3 -movflags frag_keyframe+empty_moov -f mp4 tcp://127.0.0.1:4444
    %c% %f%
    exit


    -rtbufsize 1G – Размер буфера 1 гигабайт. По умолчанию FFmpeg захватывает кадры из ввода, а затем выполняет все, что вы ему сказали. Например перекодирует их и сохраняет в выходной файл. По умолчанию, если он получает видеокадр "слишком рано" (в то время как предыдущий кадр еще не закончен), он отбрасывает этот кадр, чтобы он мог поддерживать ввод в реальном времени. Вы можете отрегулировать это, установив параметр rtbufsize, хотя обратите внимание, что если ваш процесс кодирования не успевает, в конечном итоге вы все равно начнете терять кадры (и его использование вообще может вызвать небольшую задержку). Однако может быть полезно указать некоторый размер буфера, в противном случае кадры могут быть потеряны без необходимости.

    -thread_queue_size – Устанавливает максимальное количество пакетов в очереди при чтении из файла или устройства. Установка этого значения может заставить ffmpeg использовать отдельный входной поток и читать пакеты, как только они приходят. Может применяется для каждого входа, указанного после него.

    -indexmem – максимальная память, используемая для индекса отметки времени (на поток).

    Он хоть и староват но достаточно быстрый -c:v mpeg4 -qscale:v 3
    Ответ написан
  • Как я могу записать 2 выражения в bat файл?

    ae_ph
    @ae_ph Автор вопроса
    I'm a owl )
    Хочу заменить ещё одну ошибку. Теперь всё работает.
    Я переменную %f1% не туда воткнул, вот готовое решение.

    color a
    @echo off
    set a="Your_files\*.mp4"
    set b="Result\file-%%03d.jpg"
    set c=ffmpeg
    set f=-vf fps=10
    for %%a in (%a%) do (%c% -y -i "%%a" %f% %b%)
    set a="Result\file-%%03d.jpg"
    set b="Result\video.mp4"
    set c=ffmpeg
    set f=-f image2 -r 3
    for %%a in (%a%) do (%c% -y %f% -i "%%a" %b%)


    Спасибо wisgest за помощь.
    Ответ написан
    Комментировать
  • Как в ffmpeg из нескольких папкок с фотографиями создать видео файлы на каждую папку?

    ae_ph
    @ae_ph
    I'm a owl )
    Я использую Windows os
    1) Создайте в директории с ffmpeg.exe папку Your_files и папку Result
    2) В папку Your_files положите png файлы с подобным именованием out001.png out002.png out003.png ...
    for %%a in ("Your_files\out%%03d.png") do ffmpeg -y -f image2 -r 3 -i "%%a" "Result\video.mp4"
    Ответ написан
    Комментировать