web-dev-qa-db-fra.com

FFmpeg - Extraire la vidéo et l'audio du fichier de flux de transport (.ts)

Je souhaite extraire l'audio et la vidéo d'un certain programme dans un fichier de flux de transport (.ts) en spécifiant son PID sans perte de qualité et en utilisant le même codec dans le fichier résultant (le fichier de sortie est un MPEG).

Est-ce même possible avec FFmpeg? Si oui, comment faire?

Jusqu'à présent, je suis venu à cette commande:

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

Edit : Notez que le fichier output.mpg est créé. Le fichier contient la vidéo mais l'audio n'est pas joint (pas de son). De plus, je ne peux pas spécifier le programme PID à extraire.

Edit 2 : Voici la sortie de 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

Voici un tsinfo.exe sur le fichier .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
14
Passepartout

ffmpeg peut sélectionner le flux de programme ainsi que le flux élémentaire dans le programme. en utilisant l'option de carte et le spécificateur de flux. regardez - https://superuser.com/questions/343716/ffmpeg-how-to-demux-live-multi-program-transport-stream

6
rajneesh

Je pourrais obtenir SPTS de MPTS dans ffmpeg en extrayant les flux requis et en le remuxant. Mes mpts ont 6 flux pour trois programmes (un audio, une vidéo):

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