RTSPフィードからmkvコンテナにhevcビデオをコピーしようとしています。
これworks:rtsp(hevc) -> out.hevc
then _out.hevc -> out.mkv
_
これ動作しませんrtsp(hevc) -> out.mkv
以下での作業:
_ffmpeg -nostats -hide_banner -loglevel info -rtsp_transport tcp -i rtsp://xx -an -vcodec copy -bsf:v hevc_metadata=tick_rate=1 /tmp/out.hevc -y
[hevc @ 0x564864b07680] VPS 0 does not exist
Last message repeated 1 times
Input #0, rtsp, from 'rtsp://xx':
Metadata:
title : Media Presentation
Duration: N/A, start: 0.040000, bitrate: N/A
Stream #0:0: Video: hevc (Main), yuv420p(tv), 1280x720, 2 fps, 1 tbr, 90k tbn, 2 tbc
Output #0, hevc, to '/tmp/out.hevc':
Metadata:
title : Media Presentation
encoder : Lavf58.20.100
Stream #0:0: Video: hevc (Main), yuv420p(tv), 1280x720, q=2-31, 2 fps, 1 tbr, 2 tbn, 2 tbc
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
frame= 110 fps=1.2 q=-1.0 Lsize= 10165kB time=00:01:48.50 bitrate= 767.5kbits/s speed=1.15x
video:10165kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
_
そしてファイルをチェックします:
_ffprobe -hide_banner /tmp/out.hevc
Input #0, hevc, from '/tmp/out.hevc':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: hevc (Main), yuv420p(tv), 1280x720, 1 fps, 1 tbr, 1200k tbn, 1 tbc
_
完璧!マトロスカコンテナに入れる:
_ffmpeg -nostats -hide_banner -loglevel error -i /tmp/out.hevc -an -vcodec copy -bsf:v hevc_metadata=tick_rate=1 /tmp/out.mkv -y
_
チェック:
_ffprobe -hide_banner /tmp/out.mkv
Input #0, matroska,webm, from '/tmp/out.mkv':
Metadata:
ENCODER : Lavf58.20.100
Duration: 00:01:50.00, start: 0.000000, bitrate: 757 kb/s
Stream #0:0: Video: hevc (Main), yuv420p(tv), 1280x720, 1 fps, 1 tbr, 1k tbn, 1 tbc (default)
Metadata:
DURATION : 00:01:50.000000000
_
ただし、RTSP(hevc)-> Matroska(hevc)から直接移動しようとすると:
_ffmpeg -nostats -hide_banner -loglevel info -rtsp_transport tcp -i rtsp://xx -an -vcodec copy -bsf:v hevc_metadata=tick_rate=1 -f matroska /tmp/out.mkv -y
[hevc @ 0x55fda6886840] VPS 0 does not exist
Last message repeated 1 times
Input #0, rtsp, from 'rtsp://xx':
Metadata:
title : Media Presentation
Duration: N/A, start: 0.040000, bitrate: N/A
Stream #0:0: Video: hevc (Main), yuv420p(tv), 1280x720, 2 fps, 1 tbr, 90k tbn, 2 tbc
Output #0, matroska, to '/tmp/out.mkv':
Metadata:
title : Media Presentation
encoder : Lavf58.20.100
Stream #0:0: Video: hevc (Main), yuv420p(tv), 1280x720, q=2-31, 2 fps, 1 tbr, 1k tbn, 90k tbc
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[matroska @ 0x55fda6888900] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
frame= 51 fps=1.3 q=-1.0 Lsize= 4637kB time=00:00:49.00 bitrate= 775.2kbits/s speed=1.28x
video:4636kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.034634%
_
無効なファイルが作成されます:
_ffprobe -hide_banner /tmp/out.mkv
[AVBSFContext @ 0x55b897eb1980] No start code is found.
/tmp/out.mkv: Invalid data found when processing input
_
_Timestamps are unset in a packet for stream 0
_警告は、に関するものです。
しかし、これは可能だと思いますが、これを機能させるためのバイトストリームマジックの正しい呪文を見つけることができませんでした。最終的に私はセグメント化されたシーク可能なmatroskaファイル(_-f segment -segment_format mkv -segment_time 3600 -strftime 1 camera01-%Y%m%d-%H%M%S.mkv
_)を作成しようとしていますが、ffmpegの奥深くに詰まっているようです。
_-live 1
_と_hevc_mp4toannexb
_を試しましたが効果がありませんでした。
何か案は?
パイプで往復する
ffmpeg -rtsp_transport tcp -i rtsp://xx -an -vcodec copy -bsf:v hevc_metadata=tick_rate=1 -f hevc - | ffmpeg -f hevc -i - -c copy out.mkv -y
ffmpegは最初のパケットでのみコーデックエクストラデータを検索しますが、RTSP入力にはそれがないようです。