I've generally found that encoding lossy video with a lossless codec results in a larger file size. FFmpeg has to decompress your input before it can encode to ffv1, so it is working from the uncompressed version of your jpegs. The process is outlined here: https://ffmpeg.org/ffmpeg.html#Detailed-description
Видео без потерь с использованием FFmpeg ffv1 на изображениях в формате JPEG не сжимается, а расширяется
Возможно ли для FFmpeg / ffv1.3 / mkv создать видео без потерь не больше, чем сумма его частей (и если да, то как), и если нет, то что является хорошей альтернативой, чтобы приблизиться к размеру? Видео должно быть без потерь.
Я пытаюсь использовать FFmpeg для создания mkv с ffv1.3 на множестве похожих jpeg-изображений (изображений с веб-камеры). Я могу создать видео, но оно по крайней мере в 2 раза превышает размер коллекции изображений JPEG. Я бы ожидал примерно такой же уровень сжатия или лучше.
Я понимаю, что JPEG сам по себе оптимизирован для сжатия. Однако большой набор очень похожих изображений должен быть в состоянии быть дополнительно сжат, или в этом случае аналогичен сложению исходных изображений.
Команды, которые я использую для создания файла:
ffmpeg -pattern_type glob -i '* .jpg' -vcodec ffv1 -уровень 3 -an -pass 1 -passlogfile passlog -f matroska / dev / null
ffmpeg -pattern_type glob -i '* .jpg' -vcodec ffv1 -уровень 3 -an -pass 2 -passlogfile passlog -f matroska ~ / foo.mkv
Входные файлы в общей сложности 24M, но результирующий mkv составляет 96M (за du -h).
Результаты второго прохода:
ffmpeg version N-79053-g7eedad9 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 4.6 (Debian 4.6.3-14+rpi1) configuration: --enable-cross-compile --cross-prefix= --arch=armel --target-os=linux --prefix=/my/path/were/i/keep/built/arm/stuff libavutil 55. 19.100 / 55. 19.100 libavcodec 57. 28.103 / 57. 28.103 libavformat 57. 28.101 / 57. 28.101 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 39.102 / 6. 39.102 libswscale 4. 0.100 / 4. 0.100 libswresample 2. 0.101 / 2. 0.101 Input #0, image2, from '*.jpg': Duration: 00:00:21.32, start: 0.000000, bitrate: N/A Stream #0:0: Video: mjpeg, yuvj422p(pc, bt470bg/unknown/unknown), 640x480, 25 fps, 25 tbr, 25 tbn, 25 tbc File '/home/pi/foo.mkv' already exists. Overwrite ? [y/N] y [swscaler @ 0x3671f30] deprecated pixel format used, make sure you did set range correctly Output #0, matroska, to '/home/pi/foo.mkv': Metadata: encoder : Lavf57.28.101 Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv422p, 640x480, q=2-31, pass 2, 200 kb/s, 25 fps, 1k tbn, 25 tbc Metadata: encoder : Lavc57.28.103 ffv1 Stream mapping: Stream #0:0 -> #0:0 (mjpeg (native) -> ffv1 (native)) Press [q] to stop, [?] for help frame= 533 fps=4.2 q=-0.0 Lsize= 97815kB time=00:00:21.32 bitrate=37584.4kbits/s speed=0.168x video:97808kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.006607%
Каждый jpeg составляет приблизительно 43143 байта (на ls -al), но, выполнив следующую команду, инструмент заявляет, что каждое изображение составляет 614400 байтов (как в видео, так и в независимых изображениях jpeg). Я бы предположил, что это размер несжатого изображения (640x480x2).
ffmpeg -pattern_type glob -i '* .jpg' -f framemd5 -
ниже приведены результаты для изображений, такие же размеры приведены для MKV.
ffmpeg version N-79053-g7eedad9 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 4.6 (Debian 4.6.3-14+rpi1) configuration: --enable-cross-compile --cross-prefix= --arch=armel --target-os=linux --prefix=/my/path/were/i/keep/built/arm/stuff libavutil 55. 19.100 / 55. 19.100 libavcodec 57. 28.103 / 57. 28.103 libavformat 57. 28.101 / 57. 28.101 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 39.102 / 6. 39.102 libswscale 4. 0.100 / 4. 0.100 libswresample 2. 0.101 / 2. 0.101 Input #0, image2, from '*.jpg': Duration: 00:00:21.32, start: 0.000000, bitrate: N/A Stream #0:0: Video: mjpeg, yuvj422p(pc, bt470bg/unknown/unknown), 640x480, 25 fps, 25 tbr, 25 tbn, 25 tbc #format: frame checksums #version: 1 #hash: MD5 #software: Lavf57.28.101 #tb 0: 1/25 #stream#, dts, pts, duration, size, hash Output #0, framemd5, to 'pipe:': Metadata: encoder : Lavf57.28.101 Stream #0:0: Video: rawvideo (Y42B / 0x42323459), yuvj422p, 640x480, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc Metadata: encoder : Lavc57.28.103 rawvideo Stream mapping: Stream #0:0 -> #0:0 (mjpeg (native) -> rawvideo (native)) Press [q] to stop, [?] for help 0, 0, 0, 1, 614400, 2148ff8b95296f4bacc1099d13235063 0, 1, 1, 1, 614400, da330e2acd2f7d7a1e79fe79fccc90cf 0, 2, 2, 1, 614400, f55563c13a9f232ce32419fa26e37214 0, 3, 3, 1, 614400, c53d994fff0a9b26529fa8763deae520
РЕДАКТИРОВАТЬ: Лучшее сжатие (и хорошая скорость) было получено из контейнера изображений в формате JPEG:
ffmpeg -pattern_type glob -i '* .jpg' -vcodec copy -an -f matroska ~ / foo.mkv
Полученный файл был чуть более 24M (против 96M ffv1). Также распакованные JPEG-изображения были 312M, в обоих случаях они сжимались довольно хорошо. Если бы я начал с чего-то другого, кроме jpeg, ffv1 был бы идеальным, но в моем случае jpeg с потерями, где также есть исходные изображения без потерь.
1 ответ на вопрос
Похожие вопросы
-
10
Как сжать огромное количество PNG изображений?
-
21
Сжатие с RAR против ZIP
-
3
Как я могу сделать сохранение Windows Paint по умолчанию в формате JPEG?
-
-
9
Максимальное сжатие файлов (для веб-передачи)?
-
10
Лучшее программное обеспечение для сжатия PNG?
-
5
Есть ли способ заменить стандартные иконки 7-Zip?
-
2
Как я могу кодировать файл VRO в файл AVI
-
1
Как я могу исправить проблемы с чересстрочной дрожью видео при воспроизведении на DVD-плеерах? (Микш...
-
2
Мастер сжатых папок - другие форматы архивов
-
4
Хорошее и бесплатное программное обеспечение для разархивирования для Mac?