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

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

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

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

Q&A

解決済

3回答

601閲覧

Pythonで18秒以下の動画を一斉削除するプログラムの作成

grasan

総合スコア10

Python

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

0グッド

0クリップ

投稿2020/04/25 08:19

前提・実現したいこと

Pythonで18秒以下の動画を一斉削除するプログラムを作成しております。
実行ファイルの位置は⇒ c:\Users\sho\Desktop\4K Stogram\★★★ です。
★★★の位置に実行ファイルと共に動画が複数入ったディレクトリが沢山ある状況です。

最終的にはワンポチで全てのディレクトリ内の18秒以下の動画を
一括で削除できるプログラムを作成する予定なのですが、

その前段階で、まずは指定ディレクトリの18秒以下の動画を
削除するプログラムを作成中なのですが、
どうしてエラーメッセージの内容が分かりません。

最後のos.removeの使い方が間違っているのでしょうか?
どなたかご教授していただけると有り難いです!!

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

PS C:\Users\sho> ${env:DEBUGPY_LAUNCHER_PORT}='61434'; & 'C:\Users\sho\AppData\Local\Programs\Python\Python38-32\python.exe' 'c:\Users\sho.vscode\extensions\ms-python.python-2020.4.74986\pythonFiles\lib\python\debugpy\no_wheels\debugpy\launcher' 'c:\Users\sho\Desktop\4K Stogram\Delete_Movie_18.py' video_name:2020-03-22 21.48.03 2270470983052288353_4143928635.mp4 scale:33.8 video_name:2020-03-23 00.34.03 2270554557537481592_4143928635.mp4 scale:31.566666666666666 video_name:2020-03-23 22.40.38 2271222262137565948_4143928635.mp4 scale:22.166666666666668 video_name:2020-03-24 04.14.54 2271390445465113252_4143928635.mp4 scale:44.733333333333334 video_name:2020-03-26 05.31.09 2272878254363287744_4143928635.mp4 scale:20.366666666666667 video_name:2020-03-27 04.33.35 2273574037003789938_4143928635.mp4 scale:59.833333333333336 video_name:2020-03-27 20.29.45 2274055351236641901_4143928635.mp4 scale:31.0 video_name:2020-03-28 02.06.26 2274224509765156606_4143928635.mp4 scale:47.1 video_name:2020-03-28 21.01.16 2274796004748939569_4143928635.mp4 scale:48.21334635416667 video_name:2020-03-28 23.40.03 2274876017246610855_4143928635.mp4 scale:40.93333333333333 video_name:2020-03-29 23.05.13 2275583236896195316_4143928635.mp4 scale:31.833333333333332 video_name:2020-03-30 01.54.49 2275668628605651466_4143928635.mp4 scale:18.266666666666666 video_name:2020-03-30 05.00.39 2275762223761056800_4143928635.mp4 scale:29.5 video_name:2020-04-01 00.10.58 2277065864858271617_4143928635.mp4 scale:32.333333333333336 video_name:2020-04-05 21.15.44 2280601140303794652_4143928635.mp4 scale:59.06666666666667 video_name:2020-04-11 20.17.40 2284921106051984153_4143928635.mp4 scale:27.0 video_name:2020-04-14 02.21.50 2286553903418174713_4143928635.mp4 scale:50.46666666666667 video_name:2020-04-14 23.19.57 2287187043790722063_4143928635.mp4 scale:60.0 video_name:2020-04-16 02.17.39 2288001342202215027_4143928635.mp4 scale:23.966666666666665 video_name:2020-04-17 05.23.51 2288819774400278106_4143928635.mp4 scale:55.233333333333334 video_name:2020-04-19 02.29.39 2290181673843004858_4143928635.mp4 scale:17.133333333333333 Traceback (most recent call last): File "c:\Users\sho\Desktop\4K Stogram\Delete_Movie_18.py", line 30, in <module> os.remove("creative_technologies/video_name") FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。: 'creative_technologies/video_name'

該当のソースコード

import glob import os import cv2 ########## ① mp4ファイルのリストを取得 ########## file_list = glob.glob("creative_technologies/*.mp4") ########## ② 動画の名前と尺を抽出 ########## for video_path in file_list: cap = cv2.VideoCapture(video_path) video_name = os.path.basename(video_path) scale = cap.get(cv2.CAP_PROP_FRAME_COUNT) / cap.get(cv2.CAP_PROP_FPS) print() print("video_name:{}".format(video_name)) print("scale:{}".format(scale)) cap.release() ########## ③18秒以下なら削除 ########## if scale <= 18: os.remove("creative_technologies/video_name") ########## ②に戻って繰り返し ##########

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

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

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

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

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

guest

回答3

0

以下のような感じでどうでしょうか

python

1from pathlib import Path 2 3import cv2 4 5video_dir = Path("creative_technologies") # 削除する動画があるディレクトリ 6 7 8def get_video_playtime(path): 9 cap = cv2.VideoCapture(str(path)) 10 playtime = cap.get(cv2.CAP_PROP_FRAME_COUNT) / cap.get(cv2.CAP_PROP_FPS) 11 cap.release() 12 13 return playtime 14 15 16threshold = 18 17for path in video_dir.glob("*.mp4"): 18 playtime = get_video_playtime(path) # 再生時間を取得する 19 20 if playtime <= threshold: 21 print(f"Delete {path} ({playtime}s <= {threshold}s)") 22 path.unlink() # threshold 秒以下の動画を削除する

投稿2020/04/25 08:47

編集2020/04/25 08:49
tiitoi

総合スコア21956

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

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

grasan

2020/04/25 09:13 編集

わお、凄いですね。 まだ勉強量が足りないせいか解読できないですが、 参考にさせていただきます! ありがとうございます(^^)
grasan

2020/04/25 09:15

ちなみに上手くいきました! PS C:\Users\sho> ${env:DEBUGPY_LAUNCHER_PORT}='60306'; & 'C:\Users\sho\AppData\Local\Programs\Python\Python38-32\python.exe' 'c:\Users\sho.vscode\extensions\ms-python.python-2020.4.74986\pythonFiles\lib\python\debugpy\no_wheels\debugpy\launcher' 'c:\Users\sho\Desktop\4K Stogram\Delete_Movie_18.py' PS C:\Users\sho> ${env:DEBUGPY_LAUNCHER_PORT}='60397'; & 'C:\Users\sho\AppData\Local\Programs\Python\Python38-32\python.exe' 'c:\Users\sho.vscode\extensions\ms-python.python-2020.4.74986\pythonFiles\lib\python\debugpy\no_wheels\debugpy\launcher' 'c:\Users\sho\Desktop\4K Stogram\Delete_Movie_18.py' Delete creative_technologies\2020-04-19 00.04.16 2290086975200074566_11368146914.mp4 (13.166666666666666s <= 18s)
guest

0

ベストアンサー

それそのまま、ファイルがないというエラーです

if scale <= 18:

os.remove("creative_technologies/video_name")

このコードを入れている意図はなに?

投稿2020/04/25 08:23

y_waiwai

総合スコア88042

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

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

grasan

2020/04/25 08:26

回答ありがとうございます! 18秒の理由ということですか??
y_waiwai

2020/04/25 08:28

いきなり、"creative_technologies/video_name"という名前のファイルを削除しようとしてますが、この意味は?
grasan

2020/04/25 08:36 編集

>>いきなり、"creative_technologies/video_name"という名前のファイルを削除しようとしてますが、この意味は? creative_technologiesフォルダ内のvideo_nameに取得したファイル名の動画を削除し、 それをループさせたかったのですが、何かやり方を間違っていたのでしょうか?? もしやformatを使うとかでしょうか? すみません、勉強不足で。
y_waiwai

2020/04/25 08:34

エラーメッセージからすると、そこに存在してないファイルを削除しようとしてるのでエラーになってます "creative_technologies/video_name"がないということですが、このファイルを削除しようとしている意図は何でしょう
y_waiwai

2020/04/25 08:35

なんでこのコードになってるのか理解できないんで、あなたがなにをするつもりでこのコードを入れてるのか、というのを説明しましょう
y_waiwai

2020/04/25 08:38

ああ、いまきがついたw os.remove( video_path ) てことなのね
grasan

2020/04/25 08:40

そうです。それで上手くいかなかったので、ディレクトリを入れないとダメなのかと。 変なことしてたらすみません。
grasan

2020/04/25 08:42

そこをos.remove( video_path )に直してみたのですが、 このようなエラーが最後についてしまって。。困ってます!苦笑 Traceback (most recent call last): File "c:\Users\sho\Desktop\4K Stogram\Delete_Movie_18.py", line 30, in <module> os.remove(video_name) FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。: '2020-04-19 02.29.39 2290181673843004858_4143928635.mp4'
y_waiwai

2020/04/25 08:45

video_nameじゃない。video_path
grasan

2020/04/25 08:48

おお!! 上手くいきました!(笑) pathを指定しなきゃいけなかったんですね。 ありがとうございます。勉強になりました!!
guest

0

ご教授いただきありがとうございます!
完成プログラムをこちらに掲示しておきます。
どなたかの参考になれば幸いです。

該当のソースコード

import glob import os import cv2 ########## ① mp4ファイルのリストを取得 ########## file_list = glob.glob("creative_technologies/*.mp4") ########## ② 動画の名前と尺を抽出 ########## for video_path in file_list: cap = cv2.VideoCapture(video_path) video_name = os.path.basename(video_path) scale = cap.get(cv2.CAP_PROP_FRAME_COUNT) / cap.get(cv2.CAP_PROP_FPS) print() print("video_name:{}".format(video_name)) print("scale:{}".format(scale)) cap.release() ########## ③18秒以下なら削除 ########## if scale <= 18: os.remove(video_path) ########## ②に戻って繰り返し ##########

投稿2020/04/25 08:54

grasan

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問