2010-05-26 230 views
2

我正在使用ffmpeg转换视频,并且会话持续时间显示为00:00:00.00。 这里是我传递参数ffmpeg设置转换时间

"-i " + FileName + " -ar 22050 -b 500k -f flv -t " + Duration + " " + outputfile 

这是由我的代码呈现给

-i 1.mov -ar 22050 -b 500k -f flv -t 00:03:34.99 1.flv 

我缺少什么?


filargs = "flvtool2 -UP " + outputfile; 
      proc = new Process(); 
      proc.StartInfo.FileName = spath + "flvtool2.exe"; 
      proc.StartInfo.Arguments = filargs; 
      proc.StartInfo.UseShellExecute = false; 
      proc.StartInfo.CreateNoWindow = false; 
      proc.StartInfo.RedirectStandardOutput = false; 

      proc.Start(); 

      proc.WaitForExit(); 
      proc.Close(); 

我试过这个,没有效果,持续时间仍为0,其中“OUTPUTFILE”是我的转换后的文件谁没有时间

+0

你检查,你是通过它的持续时间是正确的(以秒或HH:MM:SS [.XXX] )?输出文件是否正确播放,报告时间不正确,还是根本不播放?你可以从命令行尝试相同的命令,并在这里粘贴ffmpeg的输出。 – 2010-05-26 14:09:08

+0

这是我的确切命令。 -i 1.mov -ar 22050 -b 500k -f flv -t 00:03:34.99 1.flv 会话成功进行,但有些玩家看不到持续时间,查找线被禁用。 – 2010-05-26 15:17:41

回答

1

我看到在测试同样的问题我只是跑了。这似乎是ffmpeg中的一个已知问题。对于flv,它不会正确写入所有元数据,包括持续时间。您可以使用flvtool2为您修复元数据。只要运行:

flvtool2 -UP file.flv 

,它会自动找到基于时间戳的持续时间和写入元数据文件。我刚刚尝试过,效果很好。

0

我已经解决了我的问题

static void Fix(string Path) 
     { 
      string spath; 
      spath = AppDomain.CurrentDomain.BaseDirectory; 
      string filargs = "-U " + Path; 
      Process proc1 = new Process(); 
      proc1.StartInfo.FileName = spath + "flvtool2.exe"; 
      proc1.StartInfo.Arguments = filargs; 
      proc1.StartInfo.UseShellExecute = false; 
      proc1.StartInfo.CreateNoWindow = false; 
      proc1.StartInfo.RedirectStandardOutput 
= false; 
      proc1.Start(); 
      proc1.WaitForExit(); 
      proc1.Close(); 
     } 

它完美的工作