如何通过管道输出 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 音频 ( ffmpeg -c:v libx264 -c:a aac) 的 mp4,ffmpeg 将因[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

相关内容