Есть ли способ использовать 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]