Pipe

如何管道輸出ffmpeg?

  • December 11, 2016

我想使用的輸出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。

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

引用自:https://unix.stackexchange.com/questions/329503