
我正在嘗試保存視頻海康威視 DS-2CD2032 攝影機(又稱 Swann HD-820CAM 又稱 Lorex MCNB2151)透過 ffmpeg。它基本上與這樣的命令一起工作:
$ ffmpeg -rtsp_transport tcp -i rtsp://user:pass@ip/ -c copy -map 0:0 driveway.mp4
ffmpeg version N-73641-gb90b6af Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.9.1 (Ubuntu 4.9.1-16ubuntu6)
configuration:
libavutil 54. 28.100 / 54. 28.100
libavcodec 56. 48.100 / 56. 48.100
libavformat 56. 40.100 / 56. 40.100
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 21.100 / 5. 21.100
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.100 / 1. 2.100
Input #0, rtsp, from 'rtsp://user:pass@ip/':
Metadata:
title : Media Presentation
Duration: N/A, start: 0.466078, bitrate: N/A
Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709), 1280x720, 15 fps, 15 tbr, 90k tbn, 30 tbc
Stream #0:1: Data: none
[mp4 @ 0x24f6720] Codec for stream 0 does not use global headers but container format requires global headers
Output #0, mp4, to 'driveway.mp4':
Metadata:
title : Media Presentation
encoder : Lavf56.40.100
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720, q=2-31, 15 fps, 15 tbr, 90k tbn, 90k tbc
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x24f6720] Non-monotonous DTS in output stream 0:0; previous: 0, current: -30013; changing to 1. This may result in incorrect timestamps in the output file.
[mp4 @ 0x24f6720] Non-monotonous DTS in output stream 0:0; previous: 1, current: -23990; changing to 2. This may result in incorrect timestamps in the output file.
[mp4 @ 0x24f6720] Non-monotonous DTS in output stream 0:0; previous: 2, current: -17996; changing to 3. This may result in incorrect timestamps in the output file.
[mp4 @ 0x24f6720] Non-monotonous DTS in output stream 0:0; previous: 3, current: -11994; changing to 4. This may result in incorrect timestamps in the output file.
[mp4 @ 0x24f6720] Non-monotonous DTS in output stream 0:0; previous: 4, current: -5992; changing to 5. This may result in incorrect timestamps in the output file.
[mp4 @ 0x24f6720] Non-monotonous DTS in output stream 0:0; previous: 5, current: -18; changing to 6. This may result in incorrect timestamps in the output file.
frame= 178 fps= 18 q=-1.0 Lsize= 1711kB time=00:00:11.39 bitrate=1229.3kbits/s
video:1708kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.177573%
但我擔心警告訊息。特別是,我想解決任何可能導致影片播放不流暢或與某些播放器互動不良的問題。所以...
- 什麼是「全域標頭」?他們失蹤會造成什麼後果?我在中找到了有關 dump_extra 的註釋ffmpeg 比特流過濾器文檔。如果我添加它所描述的“-flags:v +global_header -bsf:v dump_extra”,警告就會消失。它到底在做什麼?我猜它會將某些內容從每個資料包標頭移動到全域標頭?我將如何檢查這些/觀察差異?
- 對於“非單調 DTS”警告,我能做什麼(如果有的話)?
fwiw,我用 libavformat 編寫了一個自定義程序,它從每個幀轉儲 DTS 信息,如下所示:
while (av_read_frame(input_context, &packet) == 0) {
if (packet.flags & AV_PKT_FLAG_KEY) {
cout << "have key frame, dts: " << packet.dts << endl;
} else {
cout << " have non-key frame, dts: " << packet.dts << endl;
}
}
它吐出了這個,所以我猜這只是關鍵幀的 dts 不正確?不知道該怎麼做。
have key frame, dts: 41995
have non-key frame, dts: 12033
have non-key frame, dts: 17966
have key frame, dts: 23970
have non-key frame, dts: 29992
have non-key frame, dts: 35992
have non-key frame, dts: 41995
have non-key frame, dts: 47995
have key frame, dts: 53973
have non-key frame, dts: 59994
have non-key frame, dts: 65996
have non-key frame, dts: 71995
have non-key frame, dts: 77994
have key frame, dts: 83978
have non-key frame, dts: 89993
have non-key frame, dts: 95997
have non-key frame, dts: 102035
have non-key frame, dts: 107978
have key frame, dts: 113976
have non-key frame, dts: 119998
have non-key frame, dts: 126000
have non-key frame, dts: 131997
have non-key frame, dts: 138000