Я пытаюсь преобразовать последовательность изображений PNG в видео без потерь с масштабированием (с сохранением соотношения сторон). Я приложил одно изображение PNG
Однако каждый вариант без потерь, который я использую, явно не без потерь или приводит к повреждению видео.
Я попытался ffmpeg -framerate 60 -i %d.png -vf scale=-1:2160 -c:v libx264 -crf 0 -preset veryslow -c:a libmp3lame -b:a 320k output.mp4
Я попытался добавить Вывод строки cmd, но этот веб-сайт жалуется, что мой вопрос - спам, если я это сделаю, и не позволит мне опубликовать его.
Что, я думаю, должно быть без потерь из-за -crf 0, однако при этом получается поврежденное видео в соответствии с vlc, Windows Media Player и Firefox. Тем не менее, Chrome удается играть в нее, но результаты в этом случае, очевидно, с потерями. Показанный здесь, вы можете видеть очень четко толстые концентрические полосы цвета, которых нет в реальном .png, который вместо этого плавно падает. Сжатие с потерями
Я проверил это как с полным набором изображений, которые я хочу сделать в видео, так и всего с 3 кадрами, чтобы быть уверенным, что с входными данными .png нет ничего плохого, в обоих случаях получаются одинаковые результаты.
После поиска в Интернете я обнаружил, что добавление -pix_fmt yuv420p может помочь, поэтому попробовал это
ffmpeg -framerate 60 -i %d.png -vf scale=-1:2160 -c:v libx264 -crf 0 -preset veryslow -c:a libmp3lame -b:a 320k -pix_fmt yuv420p output.mp4
Это позволяет VLC теперь открывать его (однако Firefox и Windows Media Player по-прежнему говорят, что он поврежден). Тем не менее, он по-прежнему явно сжимается с потерями как в Chrome, так и в VLC.
Затем я попытался ffmpeg -framerate 60 -i %d.png -vf scale=-1:2160 -c:v libvpx-vp9 -lossless 1 output.webm
То, что я собираю, должно быть без потерь из-за -lossless 1, однако выполнение этого приводит к очень странному выводу. В VLC и Firefox вывод просто черный. Тем не менее, в Chrome выводится в основном зеленый фон, который меняется от темно-зеленого в нижней части экрана до светло-зеленого в верхней части, с более темным зеленым кружком в середине, а текст в левом верхнем углу становится розовым. В Windows Media Player вывод аналогичен, однако в центре нет темно-зеленого круга, а текст в левом верхнем углу изменился на очень яркий светло-зеленый, а также был продублирован ниже самого себя в более низком разрешении, но увеличен шрифт и изменен до темно-розового с черным контуром.Я не понимаю, как это могло произойти
Затем я попытался добавить -pix_fmt yuv420p к этому, как и раньше, ffmpeg -framerate 60 -i %d.png -vf scale=-1:2160 -c:v libvpx-vp9 -lossless 1 -pix_fmt yuv420p output.webm
При этом выходные данные в VLC и Firefox по-прежнему пустые, однако chrome и Windows Media Player теперь показывают нормальные выходные данные, однако в результате снова очевидно сжатие с потерями.
Затем я попытался ffmpeg -framerate 60 -i% d.png -vf scale = -1:2160 -c:v ffv1 -c:libmp3lame -b:вывод 320 КБ. Avi
Тем не менее, вывод - это просто черный экран VLC, недавно установленный как на компьютере с Windows 10, так и на компьютере с Ubuntu. Вывод cmd для этого
ffmpeg -framerate 60 -i %d.png -vf scale=-1:2160 -c:v ffv1 -c:a libmp3lame -b:a 320k output.avi
ffmpeg version N-91999-g148a21611d Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20180813
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
libavutil 56. 19.101 / 56. 19.101
libavcodec 58. 30.100 / 58. 30.100
libavformat 58. 18.102 / 58. 18.102
libavdevice 58. 4.103 / 58. 4.103
libavfilter 7. 32.100 / 7. 32.100
libswscale 5. 2.100 / 5. 2.100
libswresample 3. 2.100 / 3. 2.100
libpostproc 55. 2.100 / 55. 2.100
Input #0, image2, from '%d.png':
Duration: 00:00:10.00, start: 0.000000, bitrate: N/A
Stream #0:0: Video: png, rgb24(pc), 3840x1408, 60 fps, 60 tbr, 60 tbn, 60 tbc
Codec AVOption b (set bitrate (in bits/s)) specified for output file #0 (output.avi) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream.
Stream mapping:
Stream #0:0 -> #0:0 (png (native) -> ffv1 (native))
Press [q] to stop, [?] for help
Output #0, avi, to 'output.avi':
Metadata:
ISFT : Lavf58.18.102
Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), bgr0, 5891x2160, q=2-31, 200 kb/s, 60 fps, 60 tbn, 60 tbc
Metadata:
encoder : Lavc58.30.100 ffv1
frame= 600 fps=4.0 q=-0.0 Lsize= 100850kB time=00:00:10.00 bitrate=82616.4kbits/s speed=0.067x
video:100830kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.019776%
Прилагается ссылка на файл вывода https://cernbox.cern.ch/index.php/s/ggEtDZmwxqzap3Y
Как превратить последовательность изображений PNG в сжатое видео без потерь?
Спасибо за любую помощь