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

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

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

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

Q&A

解決済

1回答

1263閲覧

Python Pytube 取得した動画に「/」や「*」がタイトルに有ると正確に取得できなくなる

ngh_orange

総合スコア17

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

0グッド

0クリップ

投稿2021/04/30 14:10

前提

ソフトの目的としてやりたいこと
ーYoutubeの動画をPytubeでダウンロードし、ffmpegで変換したい

この質問で聞きたいこと

Q1ーPytubeで取得した動画のタイトルに「/」が入っていると、後にffmpegにわたすときにパスの一部として認識されてしまうのですが、これをパスの一部としてではなく、受け取ったタイトル名を1つの文字列として処理できるようにするにはどうすればよいでしょうか?

Q2ーまた取得したタイトルに「」があるとそもそも出力した動画に「」だけ飛ばされてしまうのはどう治せばよいでしょうか? ffmpegに渡すさいにフルパスで指定しているので1文字でも飛ばされてしまうとできなくなってしまうので直したいです。
###コードの概要
ytdl_ahyn Pytubeを用いて動画のDLとタイトルを取得している。titleという変数にタイトルを入れて、convert_nnに渡しています。
convert_nn ダウンロードした動画の変換を担当する関数です。ここで処理するときタイトルに入ってる文字によって上記の問題が起きてしまいます

該当のソースコード

Python

1def ytdl_ahyn(): 2 global url 3 global fldpath 4 global filename 5 global readyfilename 6 global dirchk 7 global dlpath 8 global title 9 filename = filenameinput.get() 10 url = urlinput.get() 11 qual = qualSelect.get() 12 ext = extSelect.get() 13 dirchk = fldpath + "./GreenTea" 14 print(qual) 15 dlpath = dirchk 16 17 yt = YouTube(url) 18 stream = yt.streams.get_audio_only() 19 finished = stream.download(dlpath) 20 title = yt.title 21 str(title) 22 convert_nn() 23 print(title)

Python

1def convert_nn(): 2 global dlpath 3 global title 4 str(title) 5 filename = filenameinput.get() 6 cvvideoname = dlpath + "/" + title + ".mp4" 7 cvaudioname = dlpath + "/" + title 8 print(cvaudioname) 9 ff = ffmpy.FFmpeg( 10 inputs={cvvideoname: None}, 11 outputs={cvaudioname + ".mp3": None}) 12 ff.run() 13 print("convert-Finish")

試したこと

元々str(title)というのはありませんでしたが、自分で入れてみました
それでも当該の問題は起きてしまいます

補足情報(FW/ツールのバージョンなど)

Python3.9.4
Pytube 10.7.2
VSCode
Windows 10 Home 64bit

少し前に似た質問をしたのですが、そのときはtitleそのものが取得できないという質問で、今回は取得はできるのだけれど、取得したものの内容によって正常に動作しない、という形です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

正規表現を使って、/と*をそれぞれ/と*に変更すると通りそうです。

python

1import re 2 3def convert_nn(): 4 global dlpath 5 global title 6 str(title) 7 filename = re.sub('([/*])', r'\\1', filenameinput.get()) 8 cvvideoname = dlpath + "/" + title + ".mp4" 9 cvaudioname = dlpath + "/" + title 10 print(cvaudioname) 11 ff = ffmpy.FFmpeg( 12 inputs={cvvideoname: None}, 13 outputs={cvaudioname + ".mp3": None}) 14 ff.run() 15 print("convert-Finish")

投稿2021/04/30 14:47

ppaul

総合スコア24666

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

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

ngh_orange

2021/05/01 07:53

すごい早い回答ありがとうございます 試してみたところ、入手したタイトルどおりの指定ができていました! なのですが、変換元の動画、つまりPytubeでDLしてきた動画のタイトルに「.」が含まれているとそれが飛ばされてしまうという現象が起きてしまいました Q2の「*」が含まれていると~といった現象もまだ起きてしまうのですが、これをDLしてきた動画のタイトルにも反映させるにはどうすればよいかわかりますでしょうか?
ngh_orange

2021/05/01 14:04

すみません、全部勘違いしていました 16:53の自分のコメントは無視してください Pythonとか正規表現関係なく、そもそも動画ファイルをDLしてきた際に「*」「/」などの文字って名前に最初から使えないことを失念してました Pytubeの仕様?としてかもしれませんが、アスタリスクやバックスラッシュが半角スペースに勝手に変わってしまいます。 別に変わってもいいのですが、そのさい、Windowsでファイルの名前に使えない文字を半角スペースに変えるような関数はありますでしょうか?
ngh_orange

2021/05/01 15:05

度重なる質問申し訳ありません。 自分が何がわかってないのかがわかっていませんでした 結果として、os.replaceを使い、半角スペースを削除、スラッシュやアスタリスクを半角スペースに置き換えることでもとのファイルと同じ名前にするということができました。 ppaulさんのre.subからヒントを得れたおかげで解決できました!本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問