web-dev-qa-db-ja.com

ffmpegを使用して.png画像のセットからロスレスビデオを生成する

MacOSでffmpegを使用して動画にアニメーション化したい.png画像のセットがありますが、生成されたビデオを見ると、品質は常に圧縮されており、元の画像が圧縮されていない場合でも、結果のビデオにはアーティファクトがあります。 ビデオからの画像元の画像 の同じセクションがあります。 crf = 0でh.264コーデックを使用してエンコードを試みましたが、ffmpegを実行すると奇妙なエラーが発生します。

出力ファイル#0(test.mp4)に指定されたコーデックAVOption crf(一定品質モードの品質を選択)は、どのストリームにも使用されていません。最も可能性の高い理由は、タイプが間違っている(ビデオストリームのないビデオオプションなど)か、実際にはどのストリームにも使用されなかった一部のエンコーダーのプライベートオプションであるかのいずれかです。

これを生成するには、次のffmpegコマンドを使用しました。

_ffmpeg -f image2 -r 10 -i image%05d.png -vcodec h264 -crf 0 -y test.mp4_

1つの可能性は無効になっていることです(以下の完全なコンソール出力を参照)。ただし、_ffmpeg -codecs_を使用してffmpegコーデックをリストすると

DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (encoders: h264_videotoolbox )

これが完全なコンソール入出力です:

_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%
_

解決策:どうやら実際に問題だったのは_--disable-libx264_タグでした。どうやら、x264ビデオをエンコードできるようにするために、標準のアナコンダではなくconda-forgeからffmpegをインストールする必要があるようです。

4
algol

-vcodecの一般的な値を使用しています。この場合、h264_videotoolboxという名前のエンコーダーが選択されます。このエンコーダーは-crfを使用しません。代わりに、エンコーダーを選択するときに具体的に指定し、代わりにlibx264(またはlibx265)を使用します。

ffmpeg -framerate 10 -i image%05d.png -c:v libx264 -crf 0 output.mp4

RGBからYUVへの色空間変換を避けたい場合は、libx264rgbを使用します。

ffmpeg -framerate 10 -i image%05d.png -c:v libx264rgb -crf 0 output.mp4

PNGのロスレスビデオを作成したいだけの場合は、画像をそのまま保持できます。

ffmpeg -framerate 10 -i image%05d.png -c:v copy output.mkv
4
llogan