Я использую последние медиаинформации. mediainfo --version показывает MediaInfoLib — v17.12
При использовании специального символа в имени файла отображается правильный вывод.
>mediainfo 'mini & bar.mp4'
Complete name : mini & bar.mp4
Format : MPEG-4
Format profile : Base Media / Version 2
Codec ID : mp42 (mp41/mp42/isom)
File size : 380 KiB
Duration : 4 s 4 ms
Overall bit rate mode : Variable
Overall bit rate : 777 kb/s
Movie name : mini
Encoded date : UTC 2015-02-21 06:02:24
Tagged date : UTC 2015-02-21 06:02:26
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : [email protected]
Format settings : CABAC / 2 Ref Frames
Format settings, CABAC : Yes
Format settings, ReFrames : 2 frames
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 4 s 4 ms
Bit rate mode : Variable
Bit rate : 768 kb/s
Width : 854 pixels
Height : 480 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 29.970 (30000/1001) FPS
Original frame rate : 25.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.063
Stream size : 378 KiB (99%)
Title : Core Media Video
Encoded date : UTC 2015-02-21 06:02:24
Tagged date : UTC 2015-02-21 06:02:26
Color range : Limited
Color primaries : BT.601 NTSC
Transfer characteristics : BT.709
Matrix coefficients : BT.601
Хотя, если я использую имя файла (действительный ключ s3) со специальными символами из AWS S3, он не принимает его как действительный ввод. Я использовал приведенный ниже URL-адрес, где имя пользователя, секрет и имя ведра относятся к моей учетной записи aws. и «testing/mini & bar.mp4» является ключом.
https://username:[email protected]/bucketname/testing/mini & bar.mp4
<Error><Code>NoSuchKey</Code><Message>The specified key does not exist.</Message><Key>testing/mini</Key><RequestId>157877D3B661D9A6</RequestId></Error>
Если использовать его с одинарными или двойными кавычками, он показывает ошибку несоответствия подписи.
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
При просмотре кода MediaArea/MediaInfoLib кажется, что обрабатывается только пробел, а другие специальные символы не обрабатываются для ключа aws.
Из Reader_libcurl.cpp
// URL encoding
MediaInfo_Config::urlencode ShouldUrlEncode=Config.URLEncode_Get();
if (ShouldUrlEncode==MediaInfo_Config::URLEncode_Guess)
{
if (File_URL.Path.find(' '))
ShouldUrlEncode=MediaInfo_Config::URLEncode_Yes;
}
if (ShouldUrlEncode==MediaInfo_Config::URLEncode_Yes)
File_URL.Path=ZenLib::Format::Http::URL_Encoded_Encode(File_URL.Path);
При дальнейшем поиске таких проблем ниже проблема говорит о пробеле в ключе aws, который, похоже, теперь решен. https://sourceforge.net/p/mediainfo/bugs/960/
Итак, мои вопросы:
- почему mediainfo не обрабатывает специальные символы в ключах AWS?
- В зависимости от кода параметры --urlencode задают кодировку URL. Как использовать эту опцию, будет ли эта опция принудительно использовать кодировку URL и ключи aws со специальными символами?
- Есть ли обходной путь, чтобы получить результат mediainfo на URL-адресе s3 со специальными символами?
- как это исправить?