Программа знает, указаны ли файлы на ее командной строке. Это не может знать, существует ли какой-либо вход, доступный на stdin (кроме путем попытки считать его), и если там вводится, нет никакого пути к программе, чтобы знать, был ли тот вход предназначен для него. Таким образом, единственная разумная опция состоит в том, чтобы иметь четкое правило, на основе того, как программа была вызвана (параметры командной строки, переменные среды, конфигурационные файлы, …), чтобы решить, будет ли это читать из stdin или нет.
Например, типичные текстовые утилиты (cat
, sort
, grep
, awk
, perl -p
, …) чтение от stdin, если никакой файл не обеспечивается и читается из указанного файла (файлов), если существует кто-либо. Интерпретаторы повинуются подобной конвенции, например sh
без аргументов читает команды из стандартного входа в то время как sh script_file_name
чтения управляют из указанного файла (и листы stdin, чтобы быть считанным сценарием, если он хочет). Существует также общая конвенция это если -
появляется в положении, где название входного файла ожидается, программа будет читать из stdin.
Рассмотрите отрывок оболочки как
somecommand | while read line; do
process "$line"
done
Необходимо знать ли process
чтения от stdin или нет. Нет такой вещи как “тестирование, обеспечивается ли stdin”: это там, но пользователь, который вызывает программу, знает, хочет ли он, чтобы stdin был считан или нет.
Это изрыгнет много информации. Для получения, например, длины, разрешения, кодека и размеров используйте:
Вывод, сохраненный в файле, должен быть примерно так:
Это можно сделать с помощью проекта FFmpeg :
ffprobe 'Breaking The Girl-EVmfXA3vjuE.mp4'
Результат:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Breaking The Girl-EVmfXA3vjuE.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2016-10-05T03:35:07.000000Z Duration: 00:04:55.38, start: 0.000000, bitrate: 330 kb/s Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 200 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default) Metadata: creation_time : 2016-10-05T03:35:07.000000Z handler_name : ISO Media file produced by Google Inc. Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default) Metadata: creation_time : 2016-10-05T03:35:07.000000Z handler_name : ISO Media file produced by Google Inc.