Pas*_*out 14 audio video ffmpeg transport-stream
我希望通过在不丢失质量的情况下指定其PID并在结果文件中使用相同的编解码器(输出文件是MPEG)来提取传输流文件(.ts)中某个程序的音频和视频.
这对FFmpeg 来说甚至可能吗?如果是这样,我该怎么办?
到目前为止,我已经来到这个命令:
ffmpeg -i tsfile.ts -vcodec copy -acodec copy -q:v 1 output.mpg
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,文件output.mpg已创建.该文件包含视频,但未附加音频(没有声音).此外,我无法指定要提取的程序PID.
编辑2:这是ffmpeg -i tsfile.ts的输出
ffmpeg version N-47062-g26c531c Copyright (c) 2000-2012 the FFmpeg developers
built on Nov 25 2012 12:21:26 with gcc 4.7.2 (GCC)
libavutil 52. 9.100 / 52. 9.100
libavcodec 54. 77.100 / 54. 77.100
libavformat 54. 37.100 / 54. 37.100
libavdevice 54. 3.100 / 54. 3.100
libavfilter 3. 23.102 / 3. 23.102
libswscale 2. 1.102 / 2. 1.102
libswresample 0. 17.101 / 0. 17.101
libpostproc 52. 2.100 / 52. 2.100
[mpeg2video @ 0201c7a0] mpeg_decode_postinit() failure
Last message repeated 10 times
[mpegts @ 0037b800] PES packet size mismatch
Input #0, mpegts, from 'tsfile.ts':
Duration: 00:01:30.58, start: 56297.848344, bitrate: 18045 kb/s
Program 1
Stream #0:0[0x31]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x34]: Audio: ac3 ([129][0][0][0] / 0x0081), 48000 Hz, 5.1(side), s16, 384 kb/s
Run Code Online (Sandbox Code Playgroud)
这是.ts文件中的tsinfo.exe:
Reading from C:\tsfile.ts
Scanning 10000 TS packets
Packet 1 is PAT
Program list:
Program 1 -> PID 0020 (32)
Packet 2 is PMT with PID 0020 (32)
Program 1, version 1, PCR PID 0031 (49)
Program info (38 bytes): 0e 03 c0 b9 16 10 06 c0 02 71 c0 04 00 0b 02 42 3f 05 04
47 41 39 34 86 0d e2 65 6e 67 7e 3f ff 65 6e 67 c1 3f ff
maximum bitrate (3 bytes): c0 b9 16
smoothing buffer (6 bytes): c0 02 71 c0 04 00
system clock (2 bytes): 42 3f
Registration GA94
Descriptor tag 86 (134) (13 bytes): e2 65 6e 67 7e 3f ff 65 6e 67 c1 3f ff
Program streams:
PID 0031 ( 49) -> Stream type 02 ( 2) H.262/13818-2 video (MPEG-2) or 11172-2 constrained video
PID 0034 ( 52) -> Stream type 81 (129) User private
ES info (6 bytes): 6a 04 41 43 2d 33
DVB AC-3 (4 bytes): 41 43 2d 33
Found 14 PAT packets and 7 PMT packets in 10000 TS packets
Run Code Online (Sandbox Code Playgroud)
ffmpeg可以选择程序流以及程序内的基本流.使用map选项和流说明符.看看 - https://superuser.com/questions/343716/ffmpeg-how-to-demux-live-multi-program-transport-stream
小智 4
我可以通过提取所需的流并重新混合它来从 ffmpeg 中的 MPTS 获取 SPTS。我的 mpts 有 6 个流用于三个节目(一个音频,一个视频):
ffmpeg -i mpt.ts -map 0:0 -map 0:1 -acodec copy -vcodec copy -f mpts program1.ts
Run Code Online (Sandbox Code Playgroud)