7

Я конвертирую видео с помощью следующей команды:

ffmpeg -i "input.avi" -vcodec mpeg4 -r 15 -sameq "output.avi"

Однако меня интересует только размер файла output.avi. Есть ли команда, которую я могу дать ffmpeg, чтобы она не записывала файл, а говорила мне, насколько он велик?

1 ответ1

9

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

Однако есть несколько решений.


1. Дешевый:

Пусть кодирует, проверяет размер файла и снова удаляет файл

2. "Обходной путь":

Рассчитайте размер файла самостоятельно, используя простой калькулятор. Это работает только при использовании постоянной скорости передачи данных. Укажите его, например, -b 500k для 500 кбит / с. Вы должны убедиться, что вы указываете битрейт, который может использовать кодек. например, в 200k нет способа сжать видео 1080p с mpeg4 битной скоростью, потому что для этого потребуется гораздо больше.

3. "Реальное" решение:

Последний вариант, который я имел в виду, - это вывод результатов в /dev/null и измерение размера файла. Это, однако, не будет работать для всех форматов, потому что FFmpeg нужен файл для поиска для получения правильного вывода.

Тем не менее, для AVI это работает довольно хорошо. Следующая команда передаст в /dev/null , таким образом, не оставляя следов самого файла, и, наконец, выведет размер закодированного файла.

ffmpeg -i input.avi -vcodec mpeg4 -b 3M -f avi pipe:1 | pv > /dev/null

... например, вот так:

5.42MB 0:00:10 [ 521kB/s]

Что оно делает?

  • Вы должны указать формат, используя -f avi . В противном случае FFmpeg не будет знать, какой формат использовать.
  • pipe:1 говорит FFmpeg записать вывод в канал .
  • Мы передадим этот вывод в pipe viewer, короткий pv .
  • Программа просмотра каналов измеряет переданный размер и выводит ваше видео в /dev/null .

Единственный незначительный недостаток - вывод выглядит немного странно, пока видео не закончено. Я еще не нашел способ полностью отключить вывод FFmpeg и заставить pv работать с этим.

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