Есть ли способ использовать ffmpeg для определения кодировки файла перед транскодированием?

Я планирую использовать ffmpeg для обеспечения того, чтобы все видеофайлы, загруженные на мой сайт, были закодированы как mp4 h264.

Вместо автоматической обработки каждого файла я хотел бы минимизировать накладные расходы на обработку, обрабатывая только те файлы, которые еще не являются mp4 h264. Есть ли простой способ сделать это либо с помощью ffmpeg, либо с помощью другой утилиты командной строки?

Ответ 1

Если вы передадите входной файл в ffmpeg, без других параметров, он предоставит вам информацию об источнике видео:

ffmpeg -i myfile.avi

Другим способом может быть опция -identify для mplayer, которая может быть немного легче проанализировать. Существует оболочка script midentify, которая дает вам еще лучший выход. См. этот пример.

Ответ 2

Используйте ffprobe.

Пример команды

$ ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 input.mp4

Результат

h264

Описание опций

  • -v error Опустить дополнительную информацию, кроме фатальных ошибок.

  • -select_streams v:0 Выберите только первый видеопоток. В противном случае будет отображаться codec_name для всех других потоков в файле, таких как аудио.

  • -show_entries stream=codec_name Выводите codec_name только для всей информации о потоке.

  • -of default=nokey=1:noprint_wrappers=1 Выберите стиль выходного формата по умолчанию и опустите ключ и информацию об обертке. В противном случае без этих параметров он выведет:

    [STREAM]
    codec_name=h264
    [/STREAM]
    

Также см.

Ответ 3

Альтернативой является использование ffprobe, который включен в ffmpeg. Ниже приведен самый точный вывод, который можно найти в инструментах ffmpeg:

ffprobe -hide_banner -stats -i myfile.avi