Eu tenho um conjunto de imagens .png que gostaria de animar em um filme usando ffmpeg no macOS, mas quando olho para o vídeo produzido, a qualidade é sempre compactada e o vídeo resultante tem artefatos quando a imagem original não tem. Aqui está uma imagem do vídeo , bem como a mesma seção da imagem original . Eu tentei codificar usando o codec h.264 com crf = 0, mas estou recebendo um erro estranho quando executo o ffmpeg:
O codec AVOption crf (selecione a qualidade para o modo de qualidade constante) especificado para o arquivo de saída nº 0 (test.mp4) não foi usado para nenhum fluxo. O motivo mais provável é o tipo errado (por exemplo, uma opção de vídeo sem fluxos de vídeo) ou uma opção privada de algum codificador que não foi realmente usado para nenhum fluxo.
Eu usei o seguinte comando ffmpeg para gerar isso:
ffmpeg -f image2 -r 10 -i image%05d.png -vcodec h264 -crf 0 -y test.mp4
Uma possibilidade é que esteja desativado (veja a saída completa do console abaixo), mas isso não faz sentido para mim porque aparece quando listo os codecs ffmpeg com ffmpeg -codecs
como
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (encoders: h264_videotoolbox )
Aqui está a entrada/saída completa do console:
ffmpeg -f image2 -r 10 -i image%05d.png -vcodec h264 -crf 0 -y test.mp4
ffmpeg version 4.0 Copyright (c) 2000-2018 the FFmpeg developers
built with clang version 4.0.1 (tags/RELEASE_401/final)
configuration: --prefix=/Users/user/anaconda3 --cc=x86_64-apple-darwin13.4.0-clang --disable-doc --enable-shared --enable-static --enable-zlib --enable-pic --enable-gpl --enable-version3 --disable-nonfree --enable-hardcoded-tables --enable-avresample --enable-libfreetype --disable-openssl --disable-gnutls --enable-libvpx --enable-pthreads --enable-libopus --enable-postproc --disable-libx264
libavutil 56. 14.100 / 56. 14.100
libavcodec 58. 18.100 / 58. 18.100
libavformat 58. 12.100 / 58. 12.100
libavdevice 58. 3.100 / 58. 3.100
libavfilter 7. 16.100 / 7. 16.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 1.100 / 5. 1.100
libswresample 3. 1.100 / 3. 1.100
libpostproc 55. 1.100 / 55. 1.100
Input #0, image2, from 'image%05d.png':
Duration: 00:00:25.00, start: 0.000000, bitrate: N/A
Stream #0:0: Video: png, rgba(pc), 1382x1036 [SAR 2834:2834 DAR 691:518], 10 fps, 10 tbr, 10 tbn, 10 tbc
Codec AVOption crf (Select the quality for constant quality mode) specified for output file #0 (test.mp4) 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) -> h264 (h264_videotoolbox))
Press [q] to stop, [?] for help
GVA info: Successfully connected to the Intel plugin, offline Gen95
[h264_videotoolbox @ 0x7fc150018600] Color range not set for yuv420p. Using MPEG range.
Output #0, mp4, to 'test.mp4':
Metadata:
encoder : Lavf58.12.100
Stream #0:0: Video: h264 (h264_videotoolbox) (avc1 / 0x31637661), yuv420p, 1382x1036 [SAR 1:1 DAR 691:518], q=2-31, 200 kb/s, 10 fps, 10240 tbn, 10 tbc
Metadata:
encoder : Lavc58.18.100 h264_videotoolbox
frame= 82 fps=0.0 q=-0.0 size= 0kB time=00:00:07.70 bitrate= 0.0kbits/frame= 196 fps=195 q=-0.0 size= 256kB time=00:00:19.10 bitrate= 109.8kbits/frame= 250 fps=198 q=-0.0 Lsize= 616kB time=00:00:24.90 bitrate= 202.5kbits/s speed=19.7x
video:614kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.305027%
Solução:
Aparentemente era de fato a --disable-libx264
tag que era o meu problema. Aparentemente, é necessário instalar o ffmpeg do conda-forge em vez do anaconda padrão para poder codificar o vídeo x264.