Мне нужно уметь читать видео с помощью ffmpeg и извлекать его кадры в изображения JPG. Я использую эту команду:

./ffmpeg -y -r 25 -probesize 100M -analyzeduration 100M -i http://webserver/video.mp4 -q:v 5 /destination/image_%03d.jpg

Он отлично работает, если видео хранится на устройстве или на сервере Amazon AWS, но не работает, если он хранится на сервере Windows Azure. Если видео закодировано в webm, оно работает везде, но мне нужно, чтобы оно было в mp4 по некоторым причинам.

Вот вывод ffmpeg:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0xf70d7000] stream 0, offset 0x30: partial file
[mov,mp4,m4a,3gp,3g2,mj2 @ 0xf70d7000] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none, 960x540, 1236 kb/s): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
http://server/video.mp4: could not find codec parameters
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'http://server/video.mp4':
Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
encoder         : Lavf56.40.101
Duration: 00:00:01.44, bitrate: 1241 kb/s
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), none, 960x540, 1236 kb/s, 25 fps, 25 tbr, 12800 tbn, 25600 tbc (default)
Metadata:
handler_name    : VideoHandler
[buffer @ 0xf703a000] Unable to parse option value "-1" as pixel format
Last message repeated 1 times
[buffer @ 0xf703a000] Error setting option pix_fmt to value -1.
[graph 0 input from stream 0:0 @ 0xf70dd190] Error applying options to the filter.
Error opening filters!

Есть идеи, что случилось? Может ли сервер Azure что-то сломать? Файл не поврежден, если я скачаю его и воспроизведу локально, он будет работать.

1 ответ1

0

Вы абсолютно уверены, что файлы в Azure и AWS абсолютно одинаковы? Как в "совпадении контрольных сумм" то же самое? Потому что тот факт, что версии webm работают нормально, заставляет меня думать, что файл, хранящийся в Azure, имеет индекс, хранящийся в конце файла, а для потоковой передачи и выполнения других операций с файлом перед завершением загрузки вам нужно, чтобы он находился в начало.

Возможно, что-то не так с входным файлом Azure, возможно, он поврежден? Также есть ответ Stackoverflow, который рекомендует установить -probesize на 100 и -analyzeduration на 10M (последний из которых у вас, похоже, есть).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .