使用FFmpeg生成空白视频失败:无文件生成且无报错信息
问题描述
在C#中执行FFmpeg命令生成空白视频文件时出现异常,相关代码如下:
string ffmpegPath = "path/to/ffmpeg"; string outputPath = "empty.mpeg"; string command = $"{ffmpegPath} -t 7200 -s 640x480 -f rawvideo -pix_fmt rgb24 -r 25 -i /dev/zero {outputPath}"; // ... 执行FFmpeg命令的代码 ...
运行后未生成目标文件empty.mpeg,控制台无任何输出或报错提示。已确认FFmpeg安装正常、可执行文件及输出路径均正确,尝试过重定向标准错误流、更换多种文件格式和扩展名,问题仍未解决。
解决思路
- 适配操作系统特殊设备路径:
/dev/zero是Linux/Unix系统专属的零数据设备文件,Windows系统无法识别,这是核心问题。Windows环境下需将输入源替换为NUL,修改后的命令如下:{ffmpegPath} -t 7200 -s 640x480 -f rawvideo -pix_fmt rgb24 -r 25 -i NUL {outputPath} - 规范C#进程执行逻辑:确保正确配置FFmpeg进程的输出/错误流重定向,避免因流阻塞导致进程未正常执行。示例执行代码:
ProcessStartInfo startInfo = new ProcessStartInfo { FileName = ffmpegPath, Arguments = "-t 7200 -s 640x480 -f rawvideo -pix_fmt rgb24 -r 25 -i NUL empty.mpeg", RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, CreateNoWindow = true }; using (Process process = Process.Start(startInfo)) { string output = process.StandardOutput.ReadToEnd(); string error = process.StandardError.ReadToEnd(); process.WaitForExit(); // 输出日志用于排查 Console.WriteLine("FFmpeg输出:" + output); Console.WriteLine("FFmpeg错误:" + error); } - 简化命令快速验证:先缩短视频时长(例如
-t 10生成10秒视频)减少测试等待时间;同时明确指定视频编码器,比如添加-c:v mpeg2video确保MPEG格式编码流程正常:{ffmpegPath} -t 10 -s 640x480 -f rawvideo -pix_fmt rgb24 -r 25 -i NUL -c:v mpeg2video empty.mpeg - 终端直接测试命令:跳过C#代码,直接在系统终端运行修改后的FFmpeg命令,验证命令本身是否能生成文件,排除代码执行逻辑的问题。
内容的提问来源于stack exchange,提问作者Frost Dream
相关产品推荐
相关产品推荐

