Можем ли мы объявить переменную в ffmpeg ffprobe - PullRequest
0 голосов
/ 14 апреля 2020

Я новичок в ffmpeg.

Я хочу получить продолжительность видео через ffmpeg и объявить ее переменной. где я могу использовать значение для другой функции. Я использую Power Shell.

Это мой код:

ffmpeg -i 1aef53e6-92ac-4d28-89f8-4cce28fa0f58.mp4 2>&1 | sed -n 's/Duration: \(.*\), start/\1/gp'

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Не используйте ffmpeg для получения продолжительности: его вывод не предназначен для машинного анализа и он грязный.

Использование ffprobe:

$duration = ffprobe -v error -show_entries format=duration -of csv=p=0 input.mp4
  • Это даст продолжительность в секундах. Если вы хотите формат ЧЧ: ММ: СС, добавьте параметр -sexagesimal.

  • Нет необходимости в какой-либо дополнительной обработке с sed, regex, et c, как ffprobe непосредственно предоставит вам продолжительность и только продолжительность.

  • Подробнее на FFmpeg Wiki: Советы FFprobe и ffprobe документация .

0 голосов
/ 14 апреля 2020

Если вы указали путь для ffmpeg в переменной Windows PATH, как объяснено здесь , это должно дать вам значение продолжительности для файла:

$filename = '1aef53e6-92ac-4d28-89f8-4cce28fa0f58.mp4'
$duration = if ((ffmpeg -i $filename 2>&1 | Out-String) -match 'Duration:\s+([\d:.]+)') { $matches[1] }

Имейте в виду, после этого $duration является строкой.
Если вам нужно создать TimeSpan объект этого, используйте:

$t = [TimeSpan]::Parse($duration)
...