web-dev-qa-db-ja.com

ffmpeg / avconvからssh経由でファイルに出力をパイプする

Ffmpeg/avconvからssh経由で出力をファイルにパイプするのが好きです。こういうことをしたいです。

_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
g3blv

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トランスポートストリームを使用しますが、パケット化できるH.264 AnnexBバイトストリームへのMP4ビットストリームのフィルタリングが必要です。

ssh USER_NAME@SERVER_IP "ffmpeg -i "..." -c copy -bsf:v h264_mp4toannexb -f mpegts pipe:1" | cat > out.ts

注:ffmpegをテストできないため、ここではavconvを使用しました。

1
slhck