0

我有一个目录,其中包含一组YYYY-MM-DD-dated 文件:

pictures/
    2010-08-14.png
    2010-08-17.png
    2010-08-18.png

如何使用 Python GStreamer 将这些文件转换为视频?文件名必须保持不变。

我有一个可以将递增编号的 PNG 转换为视频的程序,我只需要将其调整为使用过时的文件即可。

4

3 回答 3

0

最简单的方法是将这些文件创建链接/重命名为序列号(这应该很容易通过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 不同的编码器可能更有意义,将所有图片作为关键帧,也许使用 MJPEG?

于 2010-08-19T13:33:31.227 回答
0

按日期对文件名进行排序很容易:

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 )
于 2010-08-19T14:22:22.093 回答
0

根据elmarco 发布的 Bash 代码,这里有一些基本的 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)
于 2010-08-29T10:30:26.147 回答