私は、Raspberry Pi ffmpeg を使用して RTSP ストリームから 30 秒のビデオを取得するという、単純なことを試しています。コマンドは次のようになります。
ffmpeg -i <rtsp:...> -t 30 <output>
RTSP 文字列が長くなります (70 ~ 80 文字程度)。常に次のエラーで失敗します:
[1] 5436
bash: -t command not found
これは ffmpeg の問題ですか、それとも Raspberry Pi の設定の問題ですか?
引数の長さの制限について調べてみましたが、何も見つかりませんでした。
答え1
ストリーム URL に文字が含まれている可能性があります。これは bash の特殊文字であり、コマンドを区切るため、&
コマンド ラインでは でエスケープする必要があります。\
ffmpeg -i rtsp://host/path?param1=\¶m2= -t 30
.に注意してください\&
。アンパサンドでない場合は、他の特殊文字になります。
または、URL を二重引用符で囲んで完了します。
ffmpeg -i "rtsp://host/path?param1=¶m2=" -t 30
このエラーが発生する理由:
bash: -t command not found
なぜなら、URL のどこかにアンパサンドがあると仮定すると、bash は (基本的に) 2 つのコマンドを実行しようとするからです。つまり、次のような場合です (URL から妥当な推測をしています)。
ffmpeg -i rtsp://example.com?x=0&y=0 -t 30
Bash は実行を試みます:
-
ffmpeg -i rtsp://example.com?x=0
-
y=0 -t 30
2 番目は「環境変数を設定してy
、1 つのパラメータで0
コマンドを実行する」と解析され、実際のコマンドではありません。そのため、エラーが発生します。-t
30
-t
私の推測なので、あなたの状況はまさにそれではないかもしれませんが、それが一般的な考え方です。
bash の動作の詳細はこの回答の範囲外であり、簡潔にするために省略されています。
これは ffmpeg の問題ですか、それとも Raspberry Pi の設定の問題ですか?
引数の長さの制限について調べてみましたが、何も見つかりませんでした。
ちなみに、引数の長さの制限はここでは問題ではありません。:)非常に大きいまた、カーネルにハードコードされているため、ユーザーが設定できるオプションはありません。