我正在尝试使用 ffmpeg 将 PNG 图像转换为 JPEG 图像。据我所知,它工作正常,但在 Mac 预览中无法正常显示。
我正在运行以下命令:
$ ffmpeg -i foo.png foo.jpg
它会产生以下输出:
ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1.3_1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-11.0.2.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-11.0.2.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-videotoolbox --disable-libjack --disable-indev=jack --enable-libaom --enable-libsoxr
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Input #0, png_pipe, from 'foo.png':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: png, rgba(pc), 200x231, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (png (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 0x7ffeaf00ae00] deprecated pixel format used, make sure you did set range correctly
Output #0, image2, to 'foo.jpg':
Metadata:
encoder : Lavf58.20.100
Stream #0:0: Video: mjpeg, yuvj444p(pc), 200x231, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc58.35.100 mjpeg
Side data:
cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
frame= 1 fps=0.0 q=3.7 Lsize=N/A time=00:00:00.04 bitrate=N/A speed= 4.7x
video:12kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
当我打开foo.jpg
时在大多数应用程序中,例如 VLC 或 Google Chrome,我得到的正是我所期望的:看起来与 foo.png
完全相同的图像,输入。
但是,这是 Finder 预览中显示的内容,与我在“预览”中打开文件时显示的内容相同。
~~~我想知道这是否与deprecated pixel format used, make sure you did set range correctly
有关错误,但我不确定,尤其是图像很好,问题似乎在其他地方。~~~
看来deprecated pixel format
错误不是问题(这是内部问题),所以我想我只需要正确指定像素格式。
最佳答案
看起来 QT/AVFoundation 不喜欢 JPEG 中的完全采样色度。
第一次尝试
ffmpeg -i foo.png -pix_fmt yuvj422p foo.jpg
否则,
ffmpeg -i foo.png -pix_fmt yuvj420p foo.jpg
有关已弃用格式的警告与 ffmpeg 内部相关,而不是生成的输出。
关于image - FFmpeg 转换为 JPEG 在 VLC 中有效,但在 Mac 预览中无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57174340/