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