2012-12-18 415 views
11

我希望通過在傳輸流文件(.ts)中提取某個程序的音頻和視頻,方法是指定其PID,但不會丟失質量並使用結果文件中的相同編解碼器(輸出文件是MPEG)。FFmpeg - 從傳輸流文件(.ts)中提取視頻和音頻

難道是即使可能與FFmpeg?如果是這樣,我該怎麼做?

到目前爲止,我已經來到這個命令:

ffmpeg -i tsfile.ts -vcodec copy -acodec copy -q:v 1 output.mpg 

編輯:請注意,文件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 

這裏有一個tsinfo.exe,在.ts文件

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 
+0

如果TS包含多個節目(電視節目通過DVB-T捕獲),怎麼能分開呢?例如,我有一個包含足球+烹飪+卡通的TS文件。如何將此TS文件分割爲3 mpg文件? –

回答

5

可以的ffmpeg選擇程序流以及程序內的基本流。 使用映射選項和流說明符。 看看 - https://superuser.com/questions/343716/ffmpeg-how-to-demux-live-multi-program-transport-stream

+2

謝謝,我想出了「ffmpeg -i tsfile.ts -y -c copy -map p:1 output.mpeg」 – Passepartout

+0

@Passepartout我得到了這個:[mpeg @ 000000000585f9a0]提供的應用程序無效,非單調增加 將dts混入流12中:-3447416964> = -3447895574 av_interleaved_write_frame():無效參數 frame = 0 fps = 0.0 q = -1.0 Lq = -1.0 q = -1.0 q = -1.0 q = -1.0 q = -1.0 q = -1.0 q = -1.0 q = - 1.0 q = -1.0 size = 2kB time = 00:00.00.00 bitrate = N/A video:0kB audio:0kB subtitle:1kB other streams:0kB global headers:0kB global headers :0kB muxing ove rhead:217.027863% 轉換失敗! –

+1

如果TS包含多個節目(由DVB-T捕獲的電視節目),如何分割?例如,我有一個包含足球+烹飪+卡通的TS文件。如何將此TS文件分割爲3 mpg文件? –

3

我可以提取所需要的溪流和remuxing它得到SPTS從MPTS中的ffmpeg。我MPTS有6個流用於三個項目(一個聲音,一個視頻):

ffmpeg -i mpt.ts -map 0:0 -map 0:1 -acodec copy -vcodec copy -f mpts program1.ts