Question

Having a problem running ffprobe on an MKV file that contains teletext subtitles. Code is in a C# library and works fine for other MKV files.

Running the latest:

ffprobe -v

ffprobe version N-42347-g299387e Copyright (c) 2007-2012 the FFmpeg developers
  built on Jul  8 2012 15:44:54 with gcc 4.7.1

Code:

string args = string.Format("-show_format -show_streams \"{0}\"", FileName);

Process p = new Process();
p.StartInfo = new ProcessStartInfo(FFPROBE_PATH);
p.StartInfo.Arguments = args;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.WorkingDirectory = System.IO.Directory.GetCurrentDirectory();
p.Start();

while (!p.HasExited)
{
    System.Threading.Thread.Sleep(100);
}

string output = p.StandardOutput.ReadToEnd().Replace("\r\n", "\n");

The filename has a UNC path - tried using the FileName parameter but got an error, hence passing the filename via the arguments.

If I run the following commandline:

ffprobe -show_format -show_streams "\\192.168.10.1\content\Breakfast At Tiffany's sample preview.mkv"

I get the following output (note the errors - "Unsupported codec with id ..."):

ffprobe -show_format -show_streams "\\192.168.10.1\content\Breakfast At Tiffany's sample preview.mkv"

ffprobe version N-42347-g299387e Copyright (c) 2007-2012 the FFmpeg developers
  built on Jul  8 2012 15:44:54 with gcc 4.7.1
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-fr
ei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-li
bmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutv
ideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --e
nable-zlib
  libavutil      51. 64.100 / 51. 64.100
  libavcodec     54. 33.100 / 54. 33.100
  libavformat    54. 15.102 / 54. 15.102
  libavdevice    54.  1.100 / 54.  1.100
  libavfilter     3.  1.100 /  3.  1.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, matroska,webm, from 'c:\dev\content\Breakfast At Tiffany's sample preview.mkv':
  Metadata:
    creation_time   : 2011-12-14 21:27:01
  Duration: 00:01:02.77, start: 0.000000, bitrate: 4071 kb/s
    Stream #0:0: Video: h264 (High), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Metadata:
      title           : x264   1920x1080   Bitrate=4776 kbps   AvQuant=21.406   Rip by ShivaShanti
    Stream #0:1(eng): Audio: ac3, 48000 Hz, 5.1(side), s16, 448 kb/s (default)
    Metadata:
      title           : English Ac3 5.1 chnls 448 kbps
    Stream #0:2(ita): Audio: ac3, 48000 Hz, stereo, s16, 224 kb/s
    Metadata:
      title           : Italian Ac3 2.0 chnls 224  kbps
    Stream #0:3(eng): Subtitle: text (default)
    Metadata:
      title           : english
    Stream #0:4(ita): Subtitle: text
    Metadata:
      title           : italian
    Stream #0:5(dan): Subtitle: text
    Metadata:
      title           : danish
    Stream #0:6(dut): Subtitle: text
    Metadata:
      title           : dutch
    Stream #0:7(fin): Subtitle: text
    Metadata:
      title           : finnish
    Stream #0:8(fre): Subtitle: text
    Metadata:
      title           : french
    Stream #0:9(ger): Subtitle: text
    Metadata:
      title           : german
    Stream #0:10(nor): Subtitle: text
    Metadata:
      title           : norwegian
    Stream #0:11(spa): Subtitle: text
    Metadata:
      title           : spanish
    Stream #0:12(swe): Subtitle: text
    Metadata:
      title           : swedish
    Stream #0:13(eng): Subtitle: text
    Metadata:
      title           : english hearig impaired
Unsupported codec with id 94210 for input stream 3
Unsupported codec with id 94210 for input stream 4
Unsupported codec with id 94210 for input stream 5
Unsupported codec with id 94210 for input stream 6
Unsupported codec with id 94210 for input stream 7
Unsupported codec with id 94210 for input stream 8
Unsupported codec with id 94210 for input stream 9
Unsupported codec with id 94210 for input stream 10
Unsupported codec with id 94210 for input stream 11
Unsupported codec with id 94210 for input stream 12
Unsupported codec with id 94210 for input stream 13
[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High
codec_type=video
codec_time_base=1001/48000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
width=1920
height=1080
has_b_frames=2
sample_aspect_ratio=1:1
display_aspect_ratio=16:9
pix_fmt=yuv420p
level=41
timecode=N/A
is_avc=1
nal_length_size=4
id=N/A
r_frame_rate=24000/1001
avg_frame_rate=24000/1001
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:title=x264   1920x1080   Bitrate=4776 kbps   AvQuant=21.406   Rip by ShivaShanti
[/STREAM]
[STREAM]
index=1
codec_name=ac3
codec_long_name=ATSC A/52A (AC-3)
profile=unknown
codec_type=audio
codec_time_base=1/48000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
sample_fmt=s16
sample_rate=48000
channels=6
bits_per_sample=0
dmix_mode=-1
ltrt_cmixlev=-1.000000
ltrt_surmixlev=-1.000000
loro_cmixlev=-1.000000
loro_surmixlev=-1.000000
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=448000
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=eng
TAG:title=English Ac3 5.1 chnls 448 kbps
[/STREAM]
[STREAM]
index=2
codec_name=ac3
codec_long_name=ATSC A/52A (AC-3)
profile=unknown
codec_type=audio
codec_time_base=1/48000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
sample_fmt=s16
sample_rate=48000
channels=2
bits_per_sample=0
dmix_mode=-1
ltrt_cmixlev=-1.000000
ltrt_surmixlev=-1.000000
loro_cmixlev=-1.000000
loro_surmixlev=-1.000000
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=224000
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=ita
TAG:title=Italian Ac3 2.0 chnls 224  kbps
[/STREAM]
[STREAM]
index=3
codec_name=unknown
codec_long_name=unknown
profile=unknown
codec_type=subtitle
codec_time_base=1/1000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=eng
TAG:title=english
[/STREAM]
[STREAM]
index=4
codec_name=unknown
codec_long_name=unknown
profile=unknown
codec_type=subtitle
codec_time_base=1/1000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=ita
TAG:title=italian
[/STREAM]
[STREAM]
index=5
codec_name=unknown
codec_long_name=unknown
profile=unknown
codec_type=subtitle
codec_time_base=1/1000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=dan
TAG:title=danish
[/STREAM]
[STREAM]
index=6
codec_name=unknown
codec_long_name=unknown
profile=unknown
codec_type=subtitle
codec_time_base=1/1000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=dut
TAG:title=dutch
[/STREAM]
[STREAM]
index=7
codec_name=unknown
codec_long_name=unknown
profile=unknown
codec_type=subtitle
codec_time_base=1/1000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=fin
TAG:title=finnish
[/STREAM]
[STREAM]
index=8
codec_name=unknown
codec_long_name=unknown
profile=unknown
codec_type=subtitle
codec_time_base=1/1000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=fre
TAG:title=french
[/STREAM]
[STREAM]
index=9
codec_name=unknown
codec_long_name=unknown
profile=unknown
codec_type=subtitle
codec_time_base=1/1000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=ger
TAG:title=german
[/STREAM]
[STREAM]
index=10
codec_name=unknown
codec_long_name=unknown
profile=unknown
codec_type=subtitle
codec_time_base=1/1000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=nor
TAG:title=norwegian
[/STREAM]
[STREAM]
index=11
codec_name=unknown
codec_long_name=unknown
profile=unknown
codec_type=subtitle
codec_time_base=1/1000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=spa
TAG:title=spanish
[/STREAM]
[STREAM]
index=12
codec_name=unknown
codec_long_name=unknown
profile=unknown
codec_type=subtitle
codec_time_base=1/1000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=swe
TAG:title=swedish
[/STREAM]
[STREAM]
index=13
codec_name=unknown
codec_long_name=unknown
profile=unknown
codec_type=subtitle
codec_time_base=1/1000
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=N/A
bit_rate=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
TAG:language=eng
TAG:title=english hearig impaired
[/STREAM]
[FORMAT]
filename=c:\dev\content\Breakfast At Tiffany's sample preview.mkv
nb_streams=14
format_name=matroska,webm
format_long_name=Matroska/WebM file format
start_time=0.000000
duration=62.776000
size=31947628
bit_rate=4071317
TAG:creation_time=2011-12-14 21:27:01
[/FORMAT]

My problem is, the process appears to hang. I took out the 'CreateNoWindow' option and, of course, I get a big blank window onscreen that normally just flashs by on a normal file. With the teletext subtitle file however, it persists. If I manually close it, the program continues and I seem to get the output I want.

So my question is, how can I debug this further, to find out why this is hanging and how to handle the error (or simply ignore it) and continue?

Was it helpful?

Solution

Ah, found another article that answered my question. Seems I must have run into a deadlock. Works fine now!

Revised code:

string args = string.Format("-show_format -show_streams \"{0}\"", FileName);

Process p = new Process();
p.StartInfo = new ProcessStartInfo(FFPROBE_PATH);
p.StartInfo.Arguments = args;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.WorkingDirectory = System.IO.Directory.GetCurrentDirectory();
p.Start();

string output = p.StandardOutput.ReadToEnd().Replace("\r\n", "\n");
p.WaitForExit();

OTHER TIPS

When you redirect both StandardOutput and StandardError you run the risk of encountering a deadlock, refer to http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandarderror.aspx

I have tried several combinations of synchronous & asynchronous reads of both streams but to date have been unable to get code that works flawlessly.

So for now i work around this by only redirecting StandardOutput or StandardError but never both.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top