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

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

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

4 ответа

Решение

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

ffmpeg -i myfile.avi

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

Использование 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]
    

Также см

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

ffprobe -hide_banner -stats -i myfile.avi

Как сказал Илоган выше, позвольте мне упростить это для других новичков, видео265.mp4 — это ваш видеофайл:

      ffprobe -v error -show_entries stream=codec_name video265.mp4

Результат:

      [STREAM]
codec_name=hevc
[/STREAM]
Другие вопросы по тегам