5

次のコードを書きました。

from moviepy.editor import *
from PIL import Image
clip= VideoFileClip("video.mp4")
video= CompositeVideoClip([clip])
video.write_videofile("video_new.mp4",fps=clip.fps)

次に、フレームが変更されたかどうかを確認し、変更された場合はどの関数がそれらを変更したかを確認するために、「clip」、「video」、および「video_new.mp4」の最初のフレームを取得して比較しました。

clip1= VideoFileClip("video_new.mp4")
img1= clip.get_frame(0)
img2= video.get_frame(0)
img3= clip1.get_frame(0)
a=img1[0,0,0]
b=img2[0,0,0]
c=img3[0,0,0]

a=24、b=24、しかし c=26 であることがわかりました....配列比較ループを実行すると、'img1' と 'img2' は同一であることがわかりましたが、'img3' は異なっていました。関数 video.write_videofile が配列の変更に関与していると思われます。しかし、私は理由を知りません...誰かが私にこれを説明し、フレームを変更せずにクリップを書く方法を提案できますか?

PS: 、のドキュメントを読みましたが'VideoFileClip'、有用なものが見つかりませんでした...作業中のコードを記述する前に、正確なフレームを読む必要があります。方法を教えてください。'FFMPEG_VideoWriter''FFMPEG_VideoReader'

4

2 に答える 2

1

JPEG と同様に、MPEG-4は非可逆圧縮を使用するため、「video_new.mp4」から読み取られたフレームが「video.mp4」のフレームと完全に同一ではないことは驚くに値しません。また、非可逆圧縮だけが原因で発生する変動だけでなく、MPEG データを書き込むプログラムで使用できるさまざまなエンコード オプションが原因で発生する変動もあります。

書き込んだものとまったく同じフレーム データを読み戻せるようにする必要がある場合は、別のファイル形式を使用する必要がありますが、ファイルが巨大になることに注意してください。


ビデオ形式の選択は、画像データがどのようなものであるか、およびそれを使用して何をしたいかによって部分的に異なります。データが 256 色以下を使用し、色を変更する変換を実行する予定がない場合は、単純な GIF アニメーションが適しています。ただし、整数でないスケーリングのようなものでも色が変更されることに注意してください。

画像データを分析してさまざまな方法で変換したい場合は、GIF よりも色をサポートする形式を使用するのが理にかなっています。たとえば、PNG 画像のストリームなどです。FWIW、MNGと呼ばれる PNG に関連するアニメーション形式がありますが、十分にサポートされておらず、広く知られていません。

もう 1 つのオプションは、PPM画像のストリーム、または場合によってはYUVデータのストリームを使用することです。これは、特定の種類の分析に役立ち、最終消費のために MPEG としてエンコードする場合に便利です。PPM 形式は非常にシンプルで使いやすいです。YUV は、ヘッダー データのない生の形式であるため、少し面倒です。そのため、画像のサイズと解像度のデータを自分で追跡する必要があります。

PPM または YUV ストリームのファイル サイズは、圧縮がまったく組み込まれていないため大きくなりますが、ディスクに保存するときに少しスペースを節約したい場合は、もちろん、標準の圧縮技術を使用して圧縮できます。OTOH、そのようなストリームを使用する典型的なビデオ処理ワークフローは、多くの場合、それらをディスクに書き込むことを気にしません:それらはパイプラインで送信されます (おそらく名前付きパイプを使用します)。そのため、ファイルサイズは (ほとんど) 無関係です。

このような形式は MPEG ベースのファイルに比べて多くの容量を必要としますが、画像データの分析と変換を実行する際の中間形式として使用するにははるかに優れています。 .

PIL/Pillow を使用して画像データの分析と変換を行うつもりだと思います。ただし、ffmpeg / avconv コマンド ライン プログラムを使用して、PPM および YUV ストリームを操作することもできます。また、ffmpeg ファミリーは、個別の画像ファイルと GIF アニメーションのセットも問題なく使用できます。

于 2014-12-13T12:33:09.273 に答える