FFPLAY/FFMPEG (Устройство захвата)

Вопрос или проблема

Я копирую кассеты VHS с помощью компьютера на Windows 10, используя FFPLAY/FFMPEG (устройство захвата) в пакетном файле.

FFPLAY может просматривать кассету таким образом, и это прекрасно.

FFPLAY.EXE -hide_banner -f dshow -rtbufsize 1024M -i video="Roxio Video Capture USB":audio="Line (Roxio Video Capture USB)"

А это преобразует в MP4, и это тоже отлично. [У меня были некоторые проблемы с синхронизацией, но я добавил “-async 1 -vsync 1”, и теперь все в порядке]

ffmpeg -fflags +genpts -async 1 -vsync 1 -f dshow -rtbufsize 1024M -i video="Roxio Video Capture USB":audio="Line (Roxio Video Capture USB)" -filter:v fps=29.97 -aspect 4:3 -c:v libx264 -preset ultrafast -tune zerolatency -crf 20 -pix_fmt yuv420p -c:a aac -strict -2 -ac 2 -b:a 128k -t 03:00:00 -async 1 -vsync 1 "Good Movie.MP4"

НО, есть ли возможность запустить оба процесса одновременно, чтобы я мог просматривать кассету и останавливать преобразование?

Вот пакетный файл:

@ECHO OFF
cd /d C:\Movies

Cls
@Echo.
@Echo.
@Echo.
@Echo Преобразование
title Файл Good Movie.MP4
@Echo.

FFPLAY.EXE -hide_banner -f dshow -rtbufsize 1024M -i video="Roxio Video Capture USB":audio="Line (Roxio Video Capture USB)"

@Echo.
@ping 127.0.0.1 -n 2 -w 2000 > nul
@ping 127.0.0.1 -n %1% -w 2000> nul

ffmpeg -fflags +genpts -async 1 -vsync 1 -f dshow -rtbufsize 1024M -i video="Roxio Video Capture USB":audio="Line (Roxio Video Capture USB)" -filter:v fps=29.97 -aspect 4:3 -c:v libx264 -preset ultrafast -tune zerolatency -crf 20 -pix_fmt yuv420p -c:a aac -strict -2 -ac 2 -b:a 128k -t 03:00:00 -async 1 -vsync 1 "Good Movie.MP4"

@Echo.
@Echo.

pause


Примеры, приведенные здесь, были созданы с помощью ссылок в конце этого ответа и некоторых легких тестов с другим устройством DirectShow. Возможно, их все еще нужно изменить. (К сожалению, я не обладаю тем же устройством, что и у вас).

Обратите внимание, что ^ может использоваться в пакетных файлах для разбиения длинных строк без влияния на выполнение, именно поэтому он появляется в примерах ниже.


FFmpeg поддерживает несколько выходов. Их можно добавить, просто поместив еще один выход в конец данной команды ffmpeg.

Например, предположим, что команда:

ffmpeg -fflags +genpts -async 1 -vsync 1 -f dshow -rtbufsize 1024M ^
-i video="Roxio Video Capture USB":audio="Line (Roxio Video Capture USB)" ^
-filter:v fps=29.97 -aspect 4:3 -c:v libx264 -preset ultrafast ^
-tune zerolatency -crf 20 -pix_fmt yuv420p -c:a aac -strict -2 -ac 2 ^
-b:a 128k -t 03:00:00 -async 1 -vsync 1 "Good Movie.MP4"

Вы можете попробовать добавить, например:

-f matroska -

В качестве дополнительного выхода. Итак:

ffmpeg -fflags +genpts -async 1 -vsync 1 -f dshow -rtbufsize 1024M ^
-i video="Roxio Video Capture USB":audio="Line (Roxio Video Capture USB)" ^
-filter:v fps=29.97 -aspect 4:3 -c:v libx264 -preset ultrafast ^
-tune zerolatency -crf 20 -pix_fmt yuv420p -c:a aac -strict -2 -ac 2 ^
-b:a 128k -t 03:00:00 -async 1 -vsync 1 "Good Movie.MP4" -f matroska -

Специальный выход - затем можно перенаправить (|) в ffplay и просмотреть с помощью, например:

ffplay -i -

Таким образом, финальная команда для вашего скрипта может выглядеть так:

ffmpeg -hide_banner -fflags +genpts -async 1 -vsync 1 -f dshow ^
-rtbufsize 1024M -i video="Roxio Video Capture USB":audio="Line (Roxio Video Capture USB)" ^
-filter:v fps=29.97 -aspect 4:3 -c:v libx264 -preset ultrafast ^
-tune zerolatency -crf 20 -pix_fmt yuv420p -c:a aac -strict -2 -ac 2 ^
-b:a 128k -t 03:00:00 -async 1 -vsync 1 "Good Movie.MP4" -f matroska - ^
| ffplay -hide_banner -i -

Это заменит отдельные команды ffplay и ffmpeg в вашем скрипте выше.


Следует учитывать, что использование, например, -f matroska может замедлить процесс. Другим вариантом формата, который может потенциально дать лучшие результаты производительности, является rawvideo, например:

-r 30 -pix_fmt yuv420p -f rawvideo -

Итак, например:

ffmpeg -fflags +genpts -async 1 -vsync 1 -f dshow -rtbufsize 1024M ^
-i video="Roxio Video Capture USB":audio="Line (Roxio Video Capture USB)" ^
-filter:v fps=29.97 -aspect 4:3 -c:v libx264 -preset ultrafast ^
-tune zerolatency -crf 20 -pix_fmt yuv420p -c:a aac -strict -2 -ac 2 ^
-b:a 128k -t 03:00:00 -async 1 -vsync 1 "Good Movie.MP4" ^
-r 30 -pix_fmt yuv420p -f rawvideo -

Соответствующая команда ffplay затем может выглядеть, например, так:

ffplay -f rawvideo -pix_fmt yuv420p -video_size 1234x1234 -framerate 30 -i -

И в качестве финального примера перенаправления:

ffmpeg -hide_banner -fflags +genpts -async 1 -vsync 1 -f dshow ^
-rtbufsize 1024M -i video="Roxio Video Capture USB":audio="Line (Roxio Video Capture USB)" ^
-filter:v fps=29.97 -aspect 4:3 -c:v libx264 -preset ultrafast ^
-tune zerolatency -crf 20 -pix_fmt yuv420p -c:a aac -strict -2 -ac 2 ^
-b:a 128k -t 03:00:00 -async 1 -vsync 1 "Good Movie.MP4" -r 30 ^
-pix_fmt yuv420p -f rawvideo - | ffplay -hide_banner -f rawvideo ^
-pix_fmt yuv420p -video_size 1234x1234 -framerate 30 -i -

Имейте в виду, что, например, -video_size 1234x1234 в ffplay (выше) – это просто пример. rawvideo чувствительно к правильным значениям для правильного отображения изображения. Поэтому я бы предложил сначала попробовать разрешение видео, с которым вы работаете.

Аналогично, 30 в -r 30 и -framerate 30 – это просто примеры. Они могут работать, а могут и нет. Также параметр -r (частота кадров на выходе) в -r 30 -pix_fmt yuv420p -f rawvideo - не является обязательным, но, как показалось, полезен для производительности при тестировании. Возможно, вы также сможете опустить параметр -framerate в части ffplay, но это тоже не сработало у меня. Я бы рекомендовал оставить оба -r и -framerate и попытаться установить их на ту же частоту кадров, что и у вашего оригинального видео.


Я не уверен, повлияет ли -filter:v fps=29.97 на частоту кадров в данном случае, но вы можете попробовать 29.97 также.


Ссылки

Ваш код сработал отлично! он сработал быстрее, чем если бы вы просто говорили мне, что делать. Я понимаю, что это заняло много времени, чтобы показать мне – я вам очень, очень обязан, и вот вам “Никель” большой парень <<5¢>> за помощь… Я все еще экспериментирую с тестами, но хотел бы поблагодарить вас.

Я немного изменил код; один из них – это имя видеофайла, чтобы показать дату/время, и мне нравится видеть, что FFMPEG делает во время преобразования в MP4.

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

Я попробовал второй вариант [“Good Movie.MP4” -r 30 -pix_fmt yuv420p -f rawvideo -], но он имеет проблемы, я добавил PrintScreen JPG, чтобы увидеть, что он делает?

Я не знал о ^ в пакетных файлах и о том, что FFmpeg поддерживает несколько выходов.

ошибки:
реальный временной буфер [Roxio Video Capture USB] слишком полный или почти полный (75% от размера: 1024000000 [параметр rtbufsize])! кадр пропущен!
Прошедшая длительность 0.984367 слишком велика.

Пакетный файл на данный момент…


@echo off
setlocal ENABLEDELAYEDEXPANSION

set today=!date:/=-!
set now=!time::=-!
set millis=!now:*.=!
set now=!now:.%millis%=!

echo. set str VHS-!today!_!now!.mp4

ffmpeg.exe -fflags +genpts -async 1 -vsync 1 -f dshow ^
-rtbufsize 1024M -i video=”Roxio Video Capture USB”:audio=”Line (Roxio Video Capture USB)” ^
-filter:v fps=29.97 -aspect 4:3 -c:v libx264 -preset ultrafast ^
-tune zerolatency -crf 20 -pix_fmt yuv420p -c:a aac -strict -2 -ac 2 ^
-b:a 128k -t 03:00:00 -async 1 -vsync 1 “VHS-!today!_!now!.mp4” -f matroska – | FFPLAY.EXE -hide_banner -i –

pause


Ответ или решение

Захват и Конвертация Видеопотока с Помощью FFPLAY и FFMPEG

В современных условиях оцифровка старых видеоматериалов, таких как кассеты VHS, становится все более актуальной. Для этого многие пользователи обращаются к полезным инструментам, таким как FFPLAY и FFMPEG. Данная статья подробно рассмотрит, как осуществлять захват видео и аудио с устройства, а также одновременно выводить поток в реальном времени, предоставляя при этом готовый файл для дальнейшего использования.

Инструменты: FFPLAY и FFMPEG

FFPLAY — это простой медиаплеер, основанный на FFmpeg, который позволяет воспроизводить различные форматы медиафайлов и потоков.

FFMPEG — мощный инструмент для обработки видео и аудио, который может выполнять множество операций, включая захват, конвертацию, извлечение потоков и многое другое.

Ваша Задача

Вы хотите одновременно просматривать потоковое видео с вашего устройства захвата (в данном случае — Roxio Video Capture USB) и конвертировать это видео в формат MP4.

Решение проблемы

Вам необходимо объединить команды FFPLAY и FFMPEG таким образом, чтобы один и тот же поток использовался для визуализации и записи.

Команды для заведомо успешного выполнения

Вот пример команд, которые вам необходимо внести в ваш пакетный файл:

@echo off
setlocal ENABLEDELAYEDEXPANSION

set today=!date:/=-!
set now=!time::=-!
set millis=!now:*.=!
set now=!now:.%millis%=!
set str=VHS-!today!_!now!.mp4

ffmpeg -hide_banner -fflags +genpts -async 1 -vsync 1 -f dshow ^
-rtbufsize 1024M -i video="Roxio Video Capture USB":audio="Line (Roxio Video Capture USB)" ^
-filter:v fps=29.97 -aspect 4:3 -c:v libx264 -preset ultrafast ^
-tune zerolatency -crf 20 -pix_fmt yuv420p -c:a aac -strict -2 -ac 2 ^
-b:a 128k -t 03:00:00 -async 1 -vsync 1 "!str!" -f matroska - | ffplay -hide_banner -i -

Объяснение Команд

  1. Значения даты и времени: Вы устанавливаете переменные today и now, чтобы автоматически задавать имя выходного файла с текущей датой и временем.

  2. Основная команда FFMPEG:

    • -hide_banner: отключает вывод информации об FFmpeg при запуске.
    • -fflags +genpts: генерирует временные метки для выходного потока.
    • -f dshow: указывает формат входного потока (DirectShow).
    • -i video="Roxio Video Capture USB":audio="Line (Roxio Video Capture USB)": выбирает видеопоток и аудиопоток.
    • -filter:v fps=29.97: устанавливает частоту кадров.
    • -c:v libx264: задает кодек для видео.
    • -preset ultrafast -tune zerolatency: настройки кодирования для минимизации задержки.
    • -b:a 128k: задает битрейт звука.
    • -f matroska - | ffplay -hide_banner -i -: производит захват видео в формате Matroska и передает его напрямую на вывод через FFPLAY.

Важные Замечания

  • Задержка и синхронизация: Используйте параметры -async и -vsync для минимизации расхождений между видео и аудио.
  • Потоковое видео: Масса закладок, включая rtbufsize, могут быть отрегулированы в зависимости от вашей системы и соединения.

Заключение

Комбинирование FFPLAY и FFMPEG открывает множество возможностей для цифровой обработки, позволяя одновременно захватывать и просматривать контент, что делает процесс оцифровки более удобным и плодотворным. Убедитесь, что вы адаптируете команду под свои нужды и настраиваете параметры для достижения оптимальных результатов. Если у вас возникнут новые сообщения или ситуации, связанные с производительностью, продолжайте экспериментировать с настройками до тех пор, пока не найдете идеальное сочетание для вашего устройства и программного обеспечения.

Оцените материал
Добавить комментарий

Капча загружается...