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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

Q&A

解決済

1回答

9499閲覧

ffmpegを使用したコードでの(.py)と(.ipynb)の実行結果の違いについて

raikin

総合スコア2

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

FFmpeg

FFmpegは、動画と音声を交換できるフリーソフトウェアです。UNIX系OSから派生した、MS-DOSから操作するコマンドラインツールです。libavcodecやlibavformat、libswscale、libavfilterなどを含みます。ライセンスは、コンパイルの際のオプションによりLGPLもしくはGPLに決定されます。対応コーデックや使用できるオプションが多く、幅広く利用されています。

0グッド

0クリップ

投稿2021/09/13 14:45

編集2021/09/13 23:42

<前提・実現したいこと>

VSCODEを使用してffmpegによるファイルの扱いについて勉強しています。
pythonファイル(.py)とジュピターノートブックファイル(.ipynb)ファイルそれぞれで
同じコードを書いて実行させたところ、後者のみエラーで弾かれてしまうのでその理由が知りたいです。

###<該当のソースコード>

import ffmpeg input_path = 'input.mp4' stream = ffmpeg.input(input_path) stream = ffmpeg.output(stream,"output.mp4") ffmpeg.run(stream)

###<エラーメッセージ>
(.py)ファイルで実行させた場合(VSCODE上のターミナル、WindowsPowerShellどちらも)、正常にファイルが出力されます。
(.ipynb)ファイルで実行させた場合のみ、下記のエラーが出てしまい正常に処理されません。

Error: ffmpeg error (see stderr output for detail) --------------------------------------------------------------------------- Error Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_8308/352701612.py in <module> 5 stream = ffmpeg.input(input_path) 6 stream = ffmpeg.output(stream,"output.mp4") ----> 7 ffmpeg.run(stream) ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\ffmpeg\_run.py in run(stream_spec, cmd, capture_stdout, capture_stderr, input, quiet, overwrite_output) 323 retcode = process.poll() 324 if retcode: --> 325 raise Error('ffmpeg', out, err) 326 return out, err 327 Error: ffmpeg error (see stderr output for detail)

##<試したこと>
######1,
上記の(該当のソースコード)(※以降、「該当コード」と表記)をVSCODE上で(.ipynb)ファイルを実行したところ、
上記(エラーメッセージ)がでて処理がされなかった。
######2,
VSCODE上で新規の(.py)ファイルを作り、該当コードをコピーしてVSCODE上から起動したターミナルにて実行したところ、
正常に処理され、ファイルが出力された。
######3,
WindowsPowerShellにて、上記(2)で作成した(.py)ファイルを実行したところ、
正常に処理され、ファイルが出力された。
######4,
WindowsPowerShellにて、pythonを起動し、該当コードを一行ずつ実行したところ、
正常に処理され、ファイルが出力された。
######5,
エラーメッセージを理解したく、<エラーメッセージ>中の【~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\ffmpeg_run.py】のファイルをのぞいてみたものの、
私の知識では全く理解が及びませんでした;;
ブラウザで【Python】【ffmpeg】【ffmpeg error】【stderr】などをキーに検索しては見たのですが解決策が見当たりませんでした。
➡別件となってしまいますが、エラーメッセージから解決法を探す際のコツなど
もしありましたら合わせてご教示頂けますと大変ありがたいです;;宜しくお願い致します。

######<補足情報(FW/ツールのバージョンなど)>
【環境】
・Windows10 HOME
・Python 3.9.7
・ffmpeg 1.4
・ffmpeg-python 0.2.0
(追記)
・(ipynb)ファイルはVSCODEに拡張機能【jupyter-notebook-vscode】を入れそちらで編集、実行しています。
・vscodeは、WindowsPowerShellで[cd "練習用の作業フォルダ"]したのち、[code .]で立ち上げております。

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

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

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

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

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

jbpb0

2021/09/13 21:31 編集

> WindowsPowerShellにて、pythonを起動し、該当コードを一行ずつ実行 の「python」として下記を使って、同じことをやってみてください C:\Users\ユーザ名\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\python.exe そうしたら、たぶんもっと詳細なエラーが表示されると思います
raikin

2021/09/13 23:26

>jbpb0さん コメントありがとうございます。 >1つ目のコメント すみません、環境の説明が不十分であったと思います; (ipynb)ファイルはVSCODEのほうに拡張機能として【jupyter-notebook-vscode】を入れそちらで編集、実行しています。 vscodeのほうは、WindowsPowerShellの方で[cd "練習用の作業フォルダ"]してから[code .]で立ち上げております。 それらの起動の際などには…当該のメッセージが出ることはなかったと…思います。 >2つ目のコメント WindowsPowerShellにて記載のpythonを起動し、質問の該当コードを一行ずつ実行させたところ、 <試したこと>の4と同様、正常に処理され、ファイル出力できてしまいました。 (補足) 先日、別件の質問の際に教えて頂き、Pythonの実行環境が複数あるのを改善しようと システムのアプリのアンインストールから一つのPythonのアンインストールを行いました。 現状[Where.exe python]をWindowsPowerShellで実行したところ、出力結果は [C:\Users\ユーザ名\AppData\Local\Microsoft\WindowsApps\python.exe] の一つのみとなっております。 …ですがjbpb0さんの仰られたパスにも同名のpython.exeが存在して普通に起動できるのですね。 度々、すみません、よろしくお願いいたします。
jbpb0

2021/09/13 23:43 編集

普通にJupyterを起動して、そこでコードを実行したら、どうなりますか? それでも大丈夫なら、「VS Code」の拡張機能固有の問題だと思います 【追記】 念の為に、うまくいかない状態で下記を実行して、同じPythonが動いてるか確認してみてください import sys print(sys.executable)
raikin

2021/09/13 23:59

>jbpb0さん コメントありがとうございます。 すみません、jupyterlabを使ったことがないものでして…、 Jupyterでの確認というと、ブラウザのJupyterLab上での動作確認で問題ありませんでしょうか。 WindowsPowerShellにてインストールして[pip3 install jupyterlab]、実行[jupyter-lab]したところ、 ERR_FILE_NOT_FOUND(file:///C:/Users/ユーザ名/AppData/Roaming/jupyter/runtime/jpserver-2616-open.html)となりうまく起動できませんでした;
raikin

2021/09/14 00:07

>jbpb0さん ブラウザのJupyterLabで該当コードを一行ずつ実行させたところ、 <試したこと>の1と同様、エラーメッセージが出ました。 <エラーメッセージ> --- --------------------------------------------------------------------------- Error Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_10060/2452722728.py in <module> ----> 1 ffmpeg.run(stream) ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\ffmpeg\_run.py in run(stream_spec, cmd, capture_stdout, capture_stderr, input, quiet, overwrite_output) 323 retcode = process.poll() 324 if retcode: --> 325 raise Error('ffmpeg', out, err) 326 return out, err 327 Error: ffmpeg error (see stderr output for detail) --- 内容は…見たところ、<試したこと>の1で出たエラーメッセージとほぼ同じように見えます。
jbpb0

2021/09/14 00:16 編集

> see stderr output for detail stderrにもっと詳細なエラーメッセージが書かれてて、それがエラーの手がかりになるかもしれません > <試したこと>の1と同様、エラーメッセージが出ました。 は、「Jupyter Notebook」を起動したターミナルに表示されたものですか? ブラウザ上には、かなり省略されたエラーしか出ません
raikin

2021/09/14 00:24

>jbpb0さん コメントありがとうございます。 返信のタイミングが被ってしまいすいません。 9:07投稿の返信に記載のエラーメッセージはブラウザで起動したJupyterLabによる出力結果です。 jupyter notebook上で確認するため、 9:08に頂いた返信に記載のURLを参考に試してみたのですが、 インストール完了後[jupyter notebook] で起動させようとしたところ、 WindowsPowerShellが処理中状態で固まったような状態になり、ブラウザが開き、 8:59 の私の投稿に記載のものと同じ[ERR_FILE_NOT_FOUND]が表示される、といった状況で 正常に起動できませんでした; jupyter notebook上で動作させることにより、より詳細なエラーメッセージが確認できるということですね。 何とか起動できるようにサイトを探して情報をあさってみようと思います;
raikin

2021/09/14 00:37

>jbpb0さん 不勉強ですみません。 9:24の返信内容中、jupyter notebookの起動のエラーとして書いていたものですが、 起動時の正常な動作のようですね(^^; もう少し調べて使ってみて、エラーメッセージを確認してみます。
raikin

2021/09/14 01:00

jupyter notebookを起動することができまして、確認を行いました。 該当コードを一行ずつ実行させ、その都度WindowsPowerShellの方での出力を確認しました。 ですが、jupyter notebook(ブラウザ)上でエラーが出ることなく, WindowsPowerShellの出力状態を見ると、 <試したこと>の3,4同様に正常に処理が行われていて、ファイルが出力されました;
raikin

2021/09/14 01:08

[jupyter noteboook] と [VSCODE]で仮に全く同じ条件で同じコードを動かして エラーが出る出ないが変わるとしたら、jbpb0さんが仰られたようにVSCODEの拡張機能の問題で (.ipynb)ファイルがVSCODEの方でうまく動作できていない、みたいなことになるのでしょうか。
raikin

2021/09/14 02:01

>jbpb0さん 回答への返信のほうでも記載させて頂いたのですが、 事前に出力ファイル(mp4)の削除を行っていたため、エラーが発生しなかったようです; 再度、jupyter notebook のほうで実行したところ、エラーが発生しました; 色々、私自身の動作確認の甘さから、問題解決が遠回りになり、 お手間を取らせてしまい申し訳ありませんでした; 今後その辺りにより気を配るよう努めていきたいと思います。 ありがとうございました。
jbpb0

2021/09/14 02:19 編集

解決してよかったですね Jupyterはエラーメッセージをある程度隠してしまうので、ブラウザに表示されてるのだけを見てたら、何か不具合が発生した時に原因が分かりにくいですが、ターミナル側にはいろいろ表示されるので、そちらを見てたら何とか原因が分かったりします (今回のケースは、そこにも表示されなかったのかもしれないけど) VS Code経由では使ったこと無いのでよく知らないのですが、本来のJupyterのターミナルに表示されるような詳しいエラーは、どこかに表示されるかログとして保存されるか、してるのだろうか?? (質問では無くて独り言なので、答えなくてもいいです)
raikin

2021/09/14 06:41 編集

>jbpb0さん ありがとうございました。 VSCODEを使い勉強を始めたばかりでほとんど使いこなせていないのですが、 VSCODE上で、ターミナル画面とタブを切り替えるような形で開ける【出力】画面の方で 処理内容に関しての状態が見られるようです。 ――― Info 2021-09-14 15:15:26: Execute Cells request 1 25 Info 2021-09-14 15:15:26: Execute Cell 25 file:///d%3A/~~~/~~~.ipynb Info 2021-09-14 15:15:27: Notebook Session status file:///d%3A/~~~/~~~.ipynb # Busy Info 2021-09-14 15:15:27: KernelProcess output: Content-Length: 200 Content-Type: application/vscode-jsonrpc; charset=utf8 {"jsonrpc": "2.0", "method": "log", "params": {"level": "INFO", "msg": "write to stderr: ffmpeg version N-103601-gb35653d4c4-20210912 Copyright (c) 2000-2021 the FFmpeg developers\r\n", "pid": 11992}}Content-Length: 175 Content-Type: application/vscode-jsonrpc; charset=utf8 {"jsonrpc": "2.0", "method": "output", "params": {"source": "stderr", "out": "ffmpeg version N-103601-gb35653d4c4-20210912 Copyright (c) 2000-2021 the FFmpeg developers\r\n"}} Info 2021-09-14 15:15:27: Python Daemon (pid: 11992): write to stderr: ffmpeg version N-103601-gb35653d4c4-20210912 Copyright (c) 2000-2021 the FFmpeg developers Info 2021-09-14 15:15:27: KernelProcess output: Content-Length: 150 Content-Type: application/vscode-jsonrpc; charset=utf8 ~~~ ~~~ ~~~ Info 2021-09-14 15:15:27: Python Daemon (pid: 11992): write to stderr: File 'output.mp4' already exists. Overwrite? [y/N] Not overwriting - exiting Warn 2021-09-14 15:15:27: Kernel 11992 as possibly died, StdErr from Kernel Process File 'output.mp4' already exists. Overwrite? [y/N] Not overwriting - exiting Warn 2021-09-14 15:15:27: StdErr from Kernel Process File 'output.mp4' already exists. Overwrite? [y/N] Not overwriting - exiting Info 2021-09-14 15:15:27: Notebook Session status file:///~~~/~~~.ipynb # Idle Info 2021-09-14 15:15:27: Cancel all remaining cells true || 4 Info 2021-09-14 15:15:27: Cancel pending cells ――― 非常に長いログで、また理解が追いつかないのですが、 どうやら処理中の処理内容詳細が記述されているのかなと思います。 ログの末尾辺りの記述を見ると、いかにも今回の原因箇所の処理で 何かしら起こって終了したのだな、ということが詳細は読み取れないのですがわかりますね; ありがとうございます。 今後エラーが発生した場合の対処、原因把握の方法の一つとして覚えておこうと思います(^^
jbpb0

2021/09/14 07:07

> 'output.mp4' already exists. Overwrite? [y/N] Not overwriting - exiting ファイルが存在するので上書きしていいか?って聞いてますね
raikin

2021/09/14 14:45

>jbpb0さん そのようですね。 次回からは、今回のような内容の場合、出力を確認して、 ➡上書き確認のところでエラーが発生しているらしい ➡上書きされる状況でのみ起こるエラーか再現確認 ➡その結果を踏まえて「質問投稿」 位の流れにすべきですね。 勉強しなければ…(^^;
guest

回答1

0

ベストアンサー

端末(VSCodeの統合ターミナルを含む)で実行すると、output.mp4がすでに存在している場合に、ffmpegは上書きしていいか尋ねてきます。

File 'output.mp4' already exists. Overwrite? [y/N]

そして、ユーザーのキー入力に応じて上書きまたはスキップの処理を行ないます。

いっぽう、同じコードをJupyterで実行すると、キー入力を受け付ける端末を持たないためにffmpegが終了コード0以外で終了する、ようになっていると推測します。
すると、質問文に載っているコードの部分、

Python

1 323 retcode = process.poll() 2 324 if retcode: 3--> 325 raise Error('ffmpeg', out, err) 4 326 return out, err

で、retcodeの値が0(正常終了のときの値)以外の値を取るために、例外がraiseされるのでしょう。

解決策としては、ffmpeg.runにオプション引数overwrite_outputを指定してTrueを設定することです。

diff

1-ffmpeg.run(stream) 2+ffmpeg.run(stream, overwrite_output=True)

これで、ffmpeg実行時に-yオプション(出力先を上書きする指定)が設定される(ように_run.pyget_argsメソッドに書いてある)ので、出力先のファイルが存在していても問題なく実行できます。

投稿2021/09/14 01:28

編集2021/09/14 05:10
Daregada

総合スコア11990

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

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

raikin

2021/09/14 01:55

なるほど…。 応答を求める処理が実行された場合に、それを処理する方法がないために例外が発生するということですね。 自信の理解力不足から完全に理解できているか自信がありませんが、 とても合点がいきました。ありがとうございます。 VSCODE上やjupyter notebook で(ipynb)ファイルを実行させた場合でも、出力ファイルが存在しない場合は上書き確認が出ないため、例外が発生せずエラーが出なかったということですか。。 jbpb0さんからもコメントを幾度も頂戴して、jupyter notebookでの確認を行った際も 事前に改めて出力先のファイルを削除していたから一回目は上書き確認が出ず、正常処理されたわけですね。 2回目再度出力ファイルが既にある状態でjupyter notebookにて実行したところ、問題のエラーが発生しました。。非常に納得です。。 私の理解力不足はもちろんですが、デバッグ(というか基本的な動作確認)の甘さによって、 解決が遅くなってしまった感じですね; 幾度もコメントを下さったjbpb0さんにも申し訳ないです;; 動作確認の内容には、もっと気を配るように今後気を付けて参りたいと思います。 Daregadaさん、jbpb0さん、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問