目的
Pythonのsubprocess.Popenを使いFFMPEGでネット上のmp4又はストリーミング動画等を録画しようとています。
そこで、以下のようなソースを書きました。
import FFMPEGではありません。
ストリーミング録画中に停止出来るようにCTRL+Cで KeyboardInterruptが発生したときには録画が停止するようにしました。
import threading,time from subprocess import Popen class MyClass(threading.Thread): end = False url = None def __init__(self,url): super(MyClass, self).__init__() self.url = url def run(self): ffmpegCommand = ["ffmpeg","-i",self.url,"./test.mp4","-y"] encode = Popen(ffmpegCommand) while True: if self.end: encode.terminate() break time.sleep(0.1) x = MyClass("MP4のURL") x.start() while x.is_alive(): try: x.join() except KeyboardInterrupt: x.end = True print("STOP\n\n\n\n")
対話モードであれば上記で思ったように動きますが、 プログラムとして実行した時にCTRL+Cで停止しようとしたら次のエラーが発生します。
発生している問題・エラーメッセージ
av_interleaved_write_frame(): Immediate exit requested Error writing trailer of ./test.mp4: Immediate exit requested
途中で、CTRL+Cで処理を中断しなければ正常に保存されますが、これはどういった現象でしょうか?
よろしくお願いします。
・対話モードであれば思ったように動き正常に動画が保存される。(中断時含む)
・プログラムとして実行した時でなおかつ中断時のみ上記エラーが発生し、保存された動画は再生できない。
・プログラムとして実行した時でも最後まで保存した場合はエラーは発生しない。
バージョン情報
OS:Ubuntu18
python3.6.9
ffmpeg version 3.4.11-0ubuntu0.1
0 コメント