Вопрос или проблема
Запуск
wget https://i.sstatic.net/LRGF7FDd.png
ffmpeg -i LRGF7FDd.png LRGF7FDd.mp4
вызывает ошибку:
user@server:~/test$ ffmpeg -i LRGF7FDd.png LRGF7FDd.mp4
ffmpeg version 4.2.7-0ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
configuration: --prefix=/usr --extra-version=0ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
[apng @ 0x55a2606e46c0] Could not find codec parameters for stream 0 (Video: apng, none(pc), 127x155): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, apng, from 'LRGF7FDd.png':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: apng, none(pc), 127x155, 100k tbr, 100k tbn, 100k tbc
Stream mapping:
Stream #0:0 -> #0:0 (apng (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[apng @ 0x55a2606e46c0] In-stream tag=ware (0x65726177) len=1399809652 is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[apng @ 0x55a2606e46c0] If you want to help, upload a sample of this file to ftp://upload.ffmpeg.org/incoming/ and contact the ffmpeg-devel mailing list. ([email protected])
LRGF7FDd.png: Not yet implemented in FFmpeg, patches welcome
Cannot determine format of input stream 0:0 after EOF
Error marking filters as finished
Conversion failed!
Это означает, что FFmpeg не может конвертировать видео APNG в MP4?
Ответ или решение
FFmpeg, пожалуй, один из самых известных и часто используемых инструментов для обработки медиа-файлов, включая аудио и видео. Несмотря на это, существуют некоторые ограничения и специфические случаи, где его функциональность может быть затруднена или даже невозможна.
Теория
APNG (Animated Portable Network Graphics) — это расширение формата PNG, поддерживающее анимацию. Хотя APNG сохраняет обратную совместимость со стандартным PNG, далеко не все программные средства и библиотеки его поддерживают. FFmpeg традиционно ориентирован на работу с видеоформатами, такими как AVI, MP4, MOV и другими, однако поддержка специфичных форматов, как APNG, может быть ограничена или не полной.
Ошибка, описанная в вопросе, указывает на несколько ключевых моментов. Во-первых, проблема с получением параметров кодека для потока видео APNG из-за «неопределённого формата пикселей». Это значит, что FFmpeg не смог определить формат пикселей, который играет решающую роль в обработке и конверсии файлов. Зачастую такая ситуация возникает, когда исходный файл имеет отличия в структуре, неучтённые библиотекой.
Во-вторых, FFmpeg сообщает об отсутствии реализации для обработки специфического тега в потоке APNG, что дополнительно подчеркивает ограничение в поддержке специфического содержимого этого формата.
Пример
Для иллюстрации проблемы можно использовать предполагаемую последовательность шагов с возникновением ошибок. Вы загружаете APNG-файл и пытаетесь его конвертировать в MP4. Например:
wget https://i.sstatic.net/LRGF7FDd.png
ffmpeg -i LRGF7FDd.png LRGF7FDd.mp4
В результате FFmpeg сообщает:
- Не удалось найти параметры codec для видео-потока.
- Неопределенный формат пикселей.
- Информация о необходимости обновления FFmpeg для поддержки определённых тегов APNG.
Применение
Что следует предпринять в таких случаях? Первое, что можно сделать, — это убедиться, что у вас установлена последняя версия FFmpeg, так как в новых версиях могут быть добавлены улучшения или исправления для поддержки новых фич форматов. Попробуйте обновить вашу версию до самой новой, доступной из официальных источников или сборок из Git.
Если после обновления проблема сохраняется, альтернативным вариантом может быть использование других инструментов для первичной конверсии или анализа APNG. Например, инструменты, специализирующиеся на работе с графическими и анимационными файлами, такие как ImageMagick, могут помочь выделить нужные кадры APNG в стандартные изображения для дальнейшей обработки в виде анимации.
Другой возможностью может быть использование специализированных библиотек в языках программирования, например, библиотек для обработки изображения в Python (PIL/Pillow) или других языках.
Если ваше основное требование — конвертация в MP4, то как промежуточный шаг можно конвертировать APNG в последовательность PNG-кадров, а затем объединить их с помощью FFmpeg, как, например:
ffmpeg -i frame_%03d.png -c:v libx264 LRGF7FDd.mp4
Такая процедура позволяет обойти ограничения и превратить анимацию APNG в видеофайл MP4 с использованием доступных возможностей FFmpeg без прямой поддержки APNG.
Заключение
Наиболее вероятно, что текущая версия FFmpeg имеет определённые ограничения в обработке APNG, что и вызывает описанную проблему. Конечная цель — это использовать доступные инструменты и методы, чтобы обойти эти ограничения, добившись необходимой конверсии с использованием комбинации других утилит или процедур. Это классический подход в ИТ — соединение разнородных инструментов для достижения цели при технических ограничениях.
Помните, развитие технологий идёт семимильными шагами, и проблема, актуальная сегодня, возможно, будет решена завтра. Поддержание актуальности используемого ПО и поиск новых решений — ключевые навыки в арсенале IT-специалиста.