Pipe
如何管道輸出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
如何通過管道輸出
ffmpeg
到openssl
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