我喜欢通过 ssh 将 ffmpeg/avconv 的输出传输到文件。我想做这样的事情。
ssh USER_NAME@SERVER_IP "avconv -i "http://svtplay20k-f.akamaihd.net/i/se/open/20141013/1368164-001A/EPISOD-1368164-001A-c49ff75135a27611_,144,252,360,468,892,1584,2700,.mp4.csmil/index_6_av.m3u8?null=" -acodec copy -vcodec copy -bsf aac_adtstoasc -f mp4 pipe:1" | cat > pipeOutput.mp4
我已经尝试过以上但得到Could not write header for output file #0 (incorrect codec parameters ?): Operation not permitted
我尝试更改为-f avi
和pipeOutput.avi
。但这给了我一个非常大但无法正常工作的文件。
有什么建议我做错了吗?
答案1
要使 ffmpeg 写入 MP4 文件,它需要输出可查找(用于创建所需的 MP4 原子)。但是 MP4 不是可流式传输的容器。这意味着您无法通过 SSH 连接或常规 Unix 管道传输“原始”MP4 数据。
您可以使用 Matroska 作为格式:
ssh USER_NAME@SERVER_IP "ffmpeg -i "..." -c copy -f matroska pipe:1" | cat > out.mkv
或者使用 MPEG-2 传输流,但它们需要将 MP4 比特流过滤为可分组的 H.264 Annex B 字节流:
ssh USER_NAME@SERVER_IP "ffmpeg -i "..." -c copy -bsf:v h264_mp4toannexb -f mpegts pipe:1" | cat > out.ts
注意:我ffmpeg
在这里使用是因为我无法测试avconv
。