Я использую ffmpeg
для преобразования видеофайла в формат H.264. Если я позвоню ffprobe
во время ffmpeg
работы, продолжительность видео неизвестна. Только когда ffmpeg
закончит, ffprobe
будет отображаться продолжительность.
Аналогично, если я запускаю mplayer
воспроизведение видео, пока оно все еще кодируется, продолжительность либо неизвестна, либо отображается неправильно.
Есть ли способ узнать продолжительность результирующего видео (h264 в контейнере .mkv), пока оно все еще кодируется ffmpeg
?
Изменить : я сделаю вопрос немного более ясным.
Мне интересно узнать, какова длина видео, которое было закодировано до сих пор . Допустим, входной файл имеет длину 1 минуту 45 секунд. Полученный файл должен сохранить длину. Но я хотел бы знать, сколько ffmpeg
кодировал до сих пор . Если мы можем определить длину видео после завершения преобразования, не должен ли быть способ определить длину видео, которое уже было обработано и готово к воспроизведению?
Краткий ответ: нет.
Более длинный ответ, это зависит.
Если вы кодируете файл, то, как правило, вывод представляет собой продолжительность ввода, если только не -ss, -to, -t
применяются фильтры или параметры изменения скорости или обрезки. Для живого ввода FFmpeg остановит кодирование, когда встретит EOF на входе, поэтому, если вы этого не знаете, вы не будете знать продолжительность вывода. Для нескольких входов разной продолжительности это будет зависеть от того, что представляет собой команда, например, есть ли там a -shortest
, есть ли amix
, который по умолчанию соответствует самому длинному из входов или amerge
который завершается при самом коротком вводе.
По умолчанию показания консоли ffmpeg будут отображать ход кодирования в реальном времени, т. е. длительность кодирования на данный момент.
Смотрите -report
вариант. Из справочных страниц:
-отчет
Скопируйте полный вывод командной строки и консоли в файл с именем « program-YYYYMMDD-HHMMSS.log » в текущем каталоге. Этот файл может быть полезен для отчетов об ошибках. Это также подразумевает "
-loglevel verbose
".Установка переменной среды
FFREPORT
на любое значение имеет тот же эффект. Если значение представляет собой последовательность значений ключей:
, разделенных ' ' , эти параметры повлияют на отчет; значения опций должны быть экранированы, если они содержат специальные символы или разделитель опций ' ' (см. раздел ``Цитаты и экранирование'' в руководстве по ffmpeg-utils).=
:
Распознаются следующие варианты:
файл
установить имя файла для использования в отчете;
%p
расширяется до имени программы,%t
расширяется до метки времени, "%%
" расширяется до простого "%
"уровень
установите уровень детализации журнала с помощью числового значения (см. "
-loglevel
").Например, чтобы вывести отчет в файл с именем ffreport.log , используя уровень журнала 32 (псевдоним для уровня журнала "
info
"):
FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output
Ошибки при синтаксическом анализе переменной окружения не являются фатальными и не будут отображаться в отчете.
Комбинируйте с -stats
и ваш | head -n 2 | tail -n 1
вариант:
-статистика (глобальная)
Печатать прогресс/статистику кодирования. Он включен по умолчанию, чтобы явно отключить его, вам нужно указать "
-nostats
".
Если у вас возникли проблемы с индикатором выполнения, который используется \r
для перезаписи одной и той же строки, вы можете ffmpeg -stats ... 2>&1 | tr \\r \\n
перейти в начало и конец.
ВЛ-80
Гьян
stderr
ВЛ-80
ВЛ-80
-progress
которая заставляет его выводить вышеупомянутую информацию о ходе выполнения в удобном для машин формате, который можно легко проанализировать.