FFmpeg错误-管道输入的未指定像素格式



我正在尝试使用ffmpeg 将流转换为mp4文件

ffmpeg -i pipe:0 -c:v libx264 -crf 20 -an -s 800x600 -q:v 31 output.mp4

输出:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55e63529aec0] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none, 1280x720, 3001 kb/s): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'pipe:0':
Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
encoder         : Lavf58.45.100   Duration: 00:03:03.15, start: 0.000000, bitrate: N/A
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), none, 1280x720, 3001 kb/s, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 24k tbn, 48k tbc (default)
Metadata:
handler_name    : VideoHandler
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name    : Stereo
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
[mov,mp4,m4a,3gp,3g2,mj2 @0x55e63529aec0] stream 0, offset 0x30: partial file pipe:0: Invalid data found when processing input
Cannot determine format of input stream 0:0 after EOF Error marking filters as finished
Conversion failed!

我尝试过的:

增加命令中的analyzedurationprobesize

ffmpeg -analyzeduration 100M -probesize 100M -i pipe:0 -c:v libx264 -crf 20 -an -s 800x600 -q:v 31 output.mp4

但我仍然有同样的错误。

更新:

ffmpeg -f mp4 -i pipe:0 -c:v libx264 -f mp4 output.mp4

这个将流格式化为mp4的命令实际上适用于较小的文件。我对更大的文件仍然有问题。我怀疑dockerfile上有特定的ffmpeg包

您必须告诉FFmpeg管道数据使用的编解码器格式(和/或设置(
您没有说明您的"流">正在使用,所以这里有一些一般提示:

  • 应用格式设置(包括宽度/高度,如原始RGB数据所需(
  • 使用-f指定格式
  • 使用-pix_fmt指定YUV图片格式(如4:2:0(

例如,如果要转换的流是H.264格式(此处不需要pix_fmt(:

ffmpeg -f h264 -i - -c:v copy -f mp4 output.mp4

或者可以尝试作为(在MP4输出不需要-f的情况下:

ffmpeg -f h264 -i pipe:0 -c:v copy output.mp4

如果您的流是原始RGB像素数据:
(可能您正在使用-r 30以30 FPS的速度通过代码/位图数据生成视频(。

ffmpeg -f rawvideo -pix_fmt argb -s 800x600 -r 30 -i pipe:0 -c:v libx264 -crf 20 -an  -q:v 31 output.mp4 

希望能有所帮助。如果你有一个特定的错误,可以问任何问题。

最新更新