8

オンライン ライブ ストリーミング ビデオをダウンロードするスクリプトを開発しています。

私のスクリプト:

print "Recording video..."
response = urllib2.urlopen("streaming online video url")
filename = time.strftime("%Y%m%d%H%M%S",time.localtime())+".avi"
f = open(filename, 'wb')

video_file_size_start = 0  
video_file_size_end = 1048576 * 7  # end in 7 mb 
block_size = 1024

while True:
    try:
        buffer = response.read(block_size)
        if not buffer:
            break
        video_file_size_start += len(buffer)
        if video_file_size_start > video_file_size_end:
            break
        f.write(buffer)

    except Exception, e:
        logger.exception(e)
f.close()

上記のスクリプトは、ライブ ストリーミング コンテンツから 7Mb のビデオをダウンロードして *.avi ファイルに保存するのに問題なく動作します。

ただし、ファイルサイズに関係なく、10 秒のビデオだけをダウンロードして、avi ファイルに保存したいと考えています。

さまざまな可能性を試しましたが、成功しませんでした。

私の問題を解決するために、ここであなたの知識を共有してください。

前もって感謝します。

4

3 に答える 3

1

ビデオを絶えず分析せずにそれを行う方法はないと思います。これはコストがかかる方法です。したがって、必要なMB数を推測し、完了したら、十分な長さであることを確認できます。長すぎる場合は、カットしてください。推測する代わりに、取得する必要がある量の統計を作成することもできます。whileTrueを次のように置き換えることもできます。

start_time_in_seconds = time.time()
time_limit = 10
while time.time() - start_time_in_seconds < time_limit:
    ...

これにより、接続に時間がかかりすぎる場合(10秒未満)またはサーバーがバッファリングのためにさらに送信する場合を除いて、少なくとも10秒のビデオが得られます(ただし、ライブストリームの場合はそうはなりません)。

于 2012-04-20T07:16:47.123 に答える