我正在尝试使用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!
我尝试过的:
增加命令中的analyzeduration
和probesize
值
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
希望能有所帮助。如果你有一个特定的错误,可以问任何问题。