Ticket #995 (closed enhancement: fixed)
Selecting a stream from a multi-service mpegts
| Reported by: | burek | Owned by: | |
|---|---|---|---|
| Priority: | normal | Component: | undetermined |
| Version: | unspecified | Keywords: | |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description
Hi, it would be nice to have an option to select (extract) only a specific service from within an mpegts multi programs stream. I'm not sure if I named each thing correctly, but here is an example:
mpegts @ 0x1ffd3a0] Estimating duration from bitrate, this may be inaccurate
Input #0, mpegts, from 'udp://@:5000':
Duration: N/A, start: 34272.976700, bitrate: 41672 kb/s
Program 52
Metadata:
service_name : PenthouseTV
service_provider:
Stream #0:22[0x710], 0, 1/90000: Video: mpeg2video ([2][0][0][0] / 0x0002), 90k tbr, 90k tbn
Stream #0:23[0x711], 0, 1/90000: Audio: mp3 ([3][0][0][0] / 0x0003), 0 channels, s16
Program 53
Metadata:
service_name : Juicy
service_provider:
Stream #0:8[0x720], 0, 1/90000: Video: mpeg2video ([2][0][0][0] / 0x0002), 90k tbr, 90k tbn
Stream #0:9[0x721], 0, 1/90000: Audio: mp3 ([3][0][0][0] / 0x0003), 0 channels, s16
Program 54
Metadata:
service_name : BN BOSNIA
service_provider:
Stream #0:10[0x420], 0, 1/90000: Video: mpeg2video ([2][0][0][0] / 0x0002), 90k tbr, 90k tbn
Stream #0:11[0x421], 0, 1/90000: Audio: mp3 ([3][0][0][0] / 0x0003), 0 channels, s16
Program 55
Metadata:
service_name : BN Music
service_provider:
Stream #0:12[0xfba], 0, 1/90000: Video: mpeg2video ([2][0][0][0] / 0x0002), 90k tbr, 90k tbn
Stream #0:13[0xfcc], 0, 1/90000: Audio: mp3 ([3][0][0][0] / 0x0003), 0 channels, s16
Program 56
Metadata:
service_name : Al Maghribiya
service_provider:
Stream #0:0[0xfb7], 66, 1/90000: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 480x480 [SAR 4:3 DAR 4:3], 1001/60000, 15000 kb/s, 31.44 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0xfc1], 90, 1/90000: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16, 128 kb/s
Program 59
Metadata:
service_name : TVK
service_provider:
Stream #0:14[0x12c], 0, 1/90000: Video: mpeg2video ([2][0][0][0] / 0x0002), 90k tbr, 90k tbn
Stream #0:15[0x12d], 0, 1/90000: Audio: mp3 ([3][0][0][0] / 0x0003), 0 channels, s16
Program 60
Metadata:
service_name : Telesur
service_provider:
Stream #0:2[0x13c], 68, 1/90000: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 704x480 [SAR 10:11 DAR 4:3], 1001/60000, 2750 kb/s, 33.53 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:25[0x13d], 90, 1/90000: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16, 112 kb/s
Program 62
Metadata:
service_name : Canal Algerie
service_provider:
Stream #0:16[0x4c4], 90, 1/90000: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16, 128 kb/s
Stream #0:17[0x4ec], 67, 1/90000: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 544x480 [SAR 20:17 DAR 4:3], 1001/60000, 3150 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Program 64
Metadata:
service_name : Al Maaref
service_provider:
Stream #0:3[0x12a], 67, 1/90000: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 544x480 [SAR 20:17 DAR 4:3], 1001/60000, 1790 kb/s, 34.79 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:4[0x12b], 90, 1/90000: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16, 112 kb/s
Program 65
Metadata:
service_name : Syrian Drama
service_provider:
Stream #0:18[0x450], 67, 1/90000: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 704x480 [SAR 10:11 DAR 4:3], 1001/60000, 2750 kb/s, 31.42 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:19[0x451], 90, 1/90000: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, mono, s16, 112 kb/s
Program 72
Metadata:
service_name : Chaine 1
service_provider:
Stream #0:20[0x5fd], 95, 1/90000: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16, 256 kb/s
Program 73
Metadata:
service_name : Radio Internationale
service_provider:
Stream #0:24[0x5fe], 95, 1/90000: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16, 256 kb/s
Program 74
Metadata:
service_name : BN Bosnia Radio
service_provider:
Stream #0:21[0x422], 0, 1/90000: Audio: mp3 ([3][0][0][0] / 0x0003), 0 channels, s16
Program 167
Metadata:
service_name : CNC World English
service_provider:
Stream #0:6[0x10f5], 64, 1/90000: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 704x480 [SAR 10:11 DAR 4:3], 1001/60000, 15000 kb/s, 35.06 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:7[0x10f6], 90, 1/90000: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16, 128 kb/s
Program 458
Metadata:
service_name : Radio BIR
service_provider:
Stream #0:5[0x212], 0, 1/90000: Audio: mp3 ([3][0][0][0] / 0x0003), 0 channels, s16
Program 460
Metadata:
service_name : Radio Glas Drine
service_provider:
Stream #0:26[0x452], 0, 1/90000: Audio: mp3 ([3][0][0][0] / 0x0003), 0 channels, s16
[libx264 @ 0x21a8ac0] using mv_range_thread = 24
[libx264 @ 0x21a8ac0] using cpu capabilities: MMX2 SSE2Fast FastShuffle SSEMisalign LZCNT
[libx264 @ 0x21a8ac0] profile High, level 3.0
[libx264 @ 0x21a8ac0] 264 - core 120 r2164 da19765 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=9 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
[mpeg2video @ 0x2038120] detected 6 logical cores
Output #0, flv, to '/mnt/encoder/test.avi':
Metadata:
encoder : Lavf54.0.100
Stream #0:0, 0, 1/1000: Audio: mp3 ([2][0][0][0] / 0x0002), 44100 Hz, 0 channels, s16, 128 kb/s
Stream #0:1, 0, 1/1000: Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 704x480, 1001/30000, q=-1--1, 1k tbn, 29.97 tbc
Stream mapping:
Stream #0:5 -> #0:0 (mp3 -> libmp3lame)
Stream #0:6 -> #0:1 (mpeg2video -> libx264)
So, if one wants to extract the "service_name : CNC World English", both audio/video, then the command would look something like:
ffmpeg -f mpegts -i udp://@:5000 -mpegts_select_service_name "CNC World English" -vcodec copy -acodec copy ...
Change History
comment:3 Changed 13 months ago by reimar
There is nothing in your text that would explain why you used udp:// in your example, so the question whether this is only relevant to udp streams or not is justified.
Answer: no, any TS stream with program ids should work the same, and e.g. the sample from ticket 531 works fine.
However you should provide a smaller sample for people to test.
Also, this should not be some TS specific option, it should work for all containers where FFmpeg supports a concept of a "program" (I think it does for Matroska at least), and maybe an option to select it by number should be implemented first.



Is this problem only reproducible via network or also if you read a file?