3

Каждый ответ, который я нашел для получения продолжительности видео с помощью ffmpeg, содержит grep , которого у cmd изначально нет.

Я знаю, что есть "Grep для Windows", но я бы предпочел использовать функцию, которая поставляется с командной строкой.

Поэтому, когда я делаю ffmpeg -i input я получаю

Input #0, flv, from 'vid_test001.flv':
  Metadata:
    creationdate    : Fri Sep 19 15:58:17
  Duration: 00:00:12.44, start: 0.000000, bitrate: 806 kb/s
    Stream #0:0: Video: flv1, yuv420p, 320x240, 1k tbr, 1k tbn, 1k tbc
    Stream #0:1: Audio: nellymoser, 22050 Hz, mono, flt

Я бы хотел получить из этого значение Duration, которое в данном случае равно «00:00:12.44».

2 ответа2

4
ffmpeg -i "inputFile" 2>&1 | for /f "tokens=2 delims=, " %a in ('findstr /r /c:"^ *Duration:"') do echo %a

Выполните ffmpeg для входного файла, отправив вывод stderr (где ffmpeg записывает информацию по умолчанию) в стандартный вывод. Отфильтруйте список с помощью findstr чтобы получить строки, начинающиеся с пробелов, за которыми следует Duration: Для каждой найденной строки запрашиваются пробелы и запятые, которые рассматриваются как разделители полей и второй токен в строке, то есть время после метки Duration: . Это значение извлекаются в for заменяемого %a что отражаемый утешать.

Чтобы использовать из пакетного файла, экранируйте знаки процента, заменив % на %%

1

Если вы не против использования Powershell (входит в стандартную версию в последних версиях Windows), вы можете использовать команду Select-String .

Вот отличный пост от другого вопроса суперпользователя - ссылка

По сути, вы можете взять выходные данные команды и направить результаты в строку выбора.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .