質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1104閲覧

TecoGANを自分の動画で実装したい。

huji312

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/12/29 16:09

前提

下記URLにあるTecoGANでのgoogle colabでのデモを実行しています。
https://colab.research.google.com/github/sony/nnabla-examples/blob/master/interactive-demos/tecogan.ipynb#scrollTo=N9Vr4CIDxL6f

実現したいこと

Do it with your own video!以下のコードを参考に
自分の動画でもTecoGANを実装したい。

発生している問題・エラーメッセージ

from google.colab import files video = files.upload() #ローカルドライブからdemo_mov1.mp4という2秒程度の動画をアップロード video = "demo_mov1.mp4" play_video(video) #動画が動作することを確認 import os ext = os.path.splitext(list(video.keys())[-1])[-1] #上記のコードで下記のエラーが出てしまいます。 エラーメッセージ 'str' object has no attribute 'keys'

以下コードの続きです。
おかしな点があればご指摘いただければ幸いです。

os.rename(list(video.keys())[-1], "input_video".format(ext)) input_video = "input_video" + ext #フレームを抽出し、低解像度版を作成 width=!ffprobe -v error -select_streams v:0 -show_entries stream=width -of csv=p=0 demo_mov1.mp4 height=!ffprobe -v error -select_streams v:0 -show_entries stream=height -of csv=p=0 demo_mov1.mp4 new_height = int(height[0])*200 // int(width[0]) new_height = 4*round(new_height/4) !mkdir -p frames/demo_mov1.mp4 !ffmpeg -i $demo_mov1.mp4 -vf "fps=10, scale=200:$new_height" frames/demo_mov1.mp4/frame_%04d.png !ffmpeg -i frames/demo_mov1.mp4/frame_%04d.png -r 24/1 -y user_video_lr.mp4 #TecoGANを適用 !python generate.py --model tecogan_model.h5 --input-dir-lr frames/demo_mov1.mp4/ --output-dir results/user !ffmpeg -i results/user/output_frame_%04d.png -r 24/1 -y user_video_hr.mp4 play_video("demo_mov1.mp4") play_video("user_video_hr.mp4")

試したこと

input_videoとdemo_mov1.mp4が混同している気がします。
ご教示いただければ幸いです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/12/29 20:48 編集

オリジナルのコードをちゃんと読んでいないのでカンで書きます。 'str' object has no attribute 'keys' とあり、video = "demo_mov1.mp4"としているため、video.keys()でstr.keys()のフォーマットになってこけているようです。ここまでは別に良くて、解決したい、が本音と思います。 ext = os.path.splitext(list(video.keys())[-1])[-1] この一行はたぶん拡張子を取りたいのではないでしょうか?なので、 解決策1 ext=".mp4"のように決め打ちする 解決策2 ext = os.path.splitext(video)[1]として拡張子だけ取り出す。 困ったらコメントください。
jbpb0

2022/12/30 01:18 編集

video = "demo_mov1.mp4" play_video(video) ↓ 修正 play_video("demo_mov1.mp4") で、どうでしょうか? 【追記】 video = files.upload() の「video」は、今エラーが出てる行だけではなく、 os.rename(list(video.keys())[-1], "input_video".format(ext)) でも使ってるので、 video = "demo_mov1.mp4" として上書きしてはダメだと思います
huji312

2022/12/30 01:43 編集

ご指摘ありがとうございます。 1. ext=".mp4"として 2.video = "demo_mov1.mp4" の上書きをやめたところ input_videoまで動作確認ができました。 その後、続きのコードで !ffmpeg -i $input_video -vf "fps=10, scale=200:$new_height" frames/input_video/frame_%04d.png !ffmpeg -i frames/input_video/frame_%04d.png -r 24/1 -y user_video_lr.mp4 を実行するとそれぞれ -vf: No such file or directory [image2 @ 0x556017a66000] Could find no file with path 'frames/input_video/frame_%04d.png' and index in the range 0-4 frames/input_video/frame_%04d.png: No such file or directory と出てきてしまいます。 改善点ありますでしょうか?よろしくお願いします。
jbpb0

2022/12/30 02:41 編集

> 以下コードの続きです。 おかしな点があればご指摘いただければ幸いです。 オリジナルのコードでは os.rename(list(video.keys())[-1], "input_video".format(ext)) ではなく os.rename(list(video.keys())[-1], "input_video{}".format(ext)) で、オリジナル通りのコードを実行するとして、以下書きます 上記コードを実行したら、アップロードした「demo_mov1.mp4」のファイル名は「input_video.mp4」に変わってるので、それ以降のコードで「demo_mov1.mp4」を使っても、その名前のファイルは存在しないのでエラーになります 【追記】 質問の「以下コードの続きです。」のコードのあちこちに「demo_mov1」と書かれてますが、それらは全部ダメです 質問の「以下コードの続きです。」のコードではなく、オリジナルのコードの「Do it with your own video!」以下をそのまま実行させてみてください
jbpb0

2022/12/30 02:02 編集

> 1. ext=".mp4"として 2.video = "demo_mov1.mp4" の上書きをやめた 私のコメントの通りに video = "demo_mov1.mp4" play_video(video) ↓ 修正 play_video("demo_mov1.mp4") として「video」を上書きしてない場合は、fourteenlengthさんのコメントの > 解決策1 ext=".mp4"のように決め打ちする > 解決策2 ext = os.path.splitext(video)[1]として拡張子だけ取り出す。 はどちらも不要で、オリジナルの下記のコードで大丈夫なはずです ext = os.path.splitext(list(video.keys())[-1])[-1]
huji312

2022/12/30 02:06

jbpb0様 ご指摘のように{}が抜けており改善すると動作が確認できました。 なぜ、{}が必要だったのでしょうか?
jbpb0

2022/12/30 02:20

> なぜ、{}が必要だったのでしょうか? 間違ってる os.rename(list(video.keys())[-1], "input_video".format(ext)) を実行した直後に !ls -ltr を実行して、そこにあるファイル名を確認してみてください 「input_video.mp4」は無くて、「input_video」が有りますよね なお、正しい os.rename(list(video.keys())[-1], "input_video{}".format(ext)) を実行した後だと「input_video.mp4」が有るので、もし「input_video.mp4」が有るなら、それを削除してから、動画ファイルのアップロードからやり直してから、確認してみてください
huji312

2022/12/30 02:46

大変よくわかりました。 多数ご指摘いただきましてありがとうございました。
guest

回答1

0

ベストアンサー

python

1video = files.upload()

の「video」は、今エラーが出てる行以外でも使ってるので、

python

1video = "demo_mov1.mp4"

として上書きしてはダメなので、たとえば、下記のようにします

python

1video = "demo_mov1.mp4" 2play_video(video)

↓ 修正

python

1play_video("demo_mov1.mp4")

 

以下コードの続きです。
おかしな点があればご指摘いただければ幸いです。

あちこち間違ってます
TecoGAN
の「Do it with your own video!」以下をそのまま使ってみてください

投稿2022/12/30 02:32

jbpb0

総合スコア7651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問