اصنع مقطع فيديو باستخدام Python+GST من مجموعة من الصور yyyy-mm-dd`
سؤال
لدي دليل مع مجموعة من YYYY-MM-DD
الملفات المقلدة في ذلك:
pictures/
2010-08-14.png
2010-08-17.png
2010-08-18.png
كيف يمكنني استخدام Python Gstreamer لتحويل هذه الملفات إلى مقطع فيديو؟ يجب أن تظل أسماء الملفات كما هي.
لديّ برنامج يمكن أن يحول PNGs المرقم بشكل تدريجي إلى مقطع فيديو ، وأحتاج فقط إلى تكييفه لاستخدام الملفات المؤرخة بدلاً من ذلك.
المحلول
الأسهل هو إنشاء رابط/إعادة تسمية هذا الملف إلى رقم تسلسل (يجب أن يكون قابلاً للتنفيذ بسهولة مع أ n=0 for f in $(ls * | sort); do ln -s $f $n && $n=$((n+1))
ثم يجب أن تكون قادرًا على القيام:
gst-launch multifilesrc location=%d ! pngdec ! theoraenc ! oggmux ! filesink location=movie.ogg
سيكون من المنطقي استخدام مشفر مختلف عن Theora ، ربما ، أن يكون لديك كل الصور كـ Keyframe ، ربما مع MJPEG؟
نصائح أخرى
من السهل بفرز أسماء الملفات حسب التاريخ:
import datetime, os
def key( filename ):
return datetime.datetime.strptime(
filename.rsplit( ".", 1 )[ 0 ],
"%Y-%m-%d"
)
foo = sorted( os.listdir( ... ), key = key )
ربما تريد إعادة تسميتهم؟
count = 0
def renamer( name ):
os.rename( name, "{0}.png".format( count ) )
count += 1
map( renamer, foo )
مرتكز على نشر رمز باش Elmarco, ، إليك بعض رمز Python الأساسي الذي ستعمل على ارتباط الملفات المؤرخة بالرقم المتسلسل في دليل مؤقت:
# Untested example code. #
import os tempfile shutil
# Make a temporary directory: `temp`:
temp = tempfile.mkdtemp()
# List photos:
files = os.listdir(os.path.expanduser('~/.photostory/photos/'))
# Sort photos (by date):
files.sort()
# Symlink photos to `temp`:
for i in range(len(files)):
os.symlink(files[i], os.path.join(temp, str(i)+'.png')
# Perform GStreamer operations on `temp`. #
# Remove `temp`:
shutil.rmtree(temp)