ffmpeg出力をパイプする方法は?

ffmpeg出力をパイプする方法は?

ffmpegビデオの暗号化に使用したい出力は次のとおりですopenssl

成功していないままネームパイプを使ってみました。使用コマンド:

mkfifo myfifo
ffmpeg -f alsa -ac 2 -i plughw:0,0 -f video4linux2 -s vga -i /dev/video0 myfifo

エラーが発生しました。

[NULL @ 0x563c02ce5c00] Unable to find a suitable output format for 'myfifo'
myfifo: Invalid argument

アイデアは、後で暗号化のためにffmpegの標準出力を使用することです。

dd if=myfifo | openssl enc -des3 -out video.mp4

出力をどのようにパイプできますかffmpegopenssl


PS:ffmpegを使用して暗号化することは可能ですが、opensslとパイプを使用することをお勧めします。

ベストアンサー1

ffmpegはファイル拡張子に基づいてビデオフォーマットを推測しようとします。 @alex-stragiesが言ったように、「出力形式などのオプションを設定する」か、ffmpegが知っているfifoのファイル拡張子を使用してください。

opensslをスタンドアロンで実行するには、コマンドラインに暗号化パスワードを入力してください。

パイプまたはfifoを出力として使用する場合、ffmpegは出力ファイルから前後に移動できないため、書き込み時にランダムアクセスを必要としない形式を選択する必要があります。たとえば、x264ビデオとaacオーディオ()を含むmp4を作成しようとすると、ffmpeg -c:v libx264 -c:a aacffmpegは失敗します[mp4 @ 0xc83d00] muxer does not support non seekable output

    ( umask 066 ; echo password >/tmp/myfilepasswd )
    mkfifo /tmp/schproutz-vid
    openssl enc -des3 -out video.enc \
        -in /tmp/schproutz-vid \
        -pass file:/tmp/myfilepasswd &
    sleep 1
    ffmpeg -f alsa -ac 2 -i plughw:0,0 \
        -f video4linux2 \
        -s vga -i /dev/video0 \
        -f ogg /tmp/schproutz-vid

一度機能すると、fifoを簡単に取り除き、ffmpegとopensslの間にパイプを使用できます。

    ffmpeg -f alsa -ac 2 -i plughw:0,0 \
        -f video4linux2 \
        -s vga -i /dev/video0 \
        -f ogg - |
    openssl enc -des3 \
        -pass file:/tmp/myfilepasswd \
        > outputfile.enc

おすすめ記事