ffmpeg 在同一个文件中对一个输入视频流和多个输出视频流进行转码

Posted

技术标签:

【中文标题】ffmpeg 在同一个文件中对一个输入视频流和多个输出视频流进行转码【英文标题】:ffmpeg transcoding one input video stream and multiple output video streams in the same file 【发布时间】:2013-03-01 09:07:31 【问题描述】:

我正在尝试将具有 1 个视频流和多个音频流的单个视频文件转码为具有不同比特率/大小的相同视频流且同时具有正确填充的文件。

我使用的命令是:

ffmpeg -y -ss 600 -t 600 -i "INPUT.mkv" -map_chapters -1 -map 0:0 -c:v libx264 -keyint_min 48 -g 96 -bufsize 350k -b:v 350k -minrate 300k -maxrate 400k -profile:v 基线 -level 3.0 -preset slow -vf "scale=iw*min(480/iw\,272/ih):ih*min(480/iw\,272/ih),pad=480:272: (480-iw)/2:(272-ih)/2" -map 0:0 -c:v libx264 -keyint_min 48 -g 96 -bufsize 650k -b:v 650k -minrate 500k -maxrate 800k -profile:v基线 -level 3.1 -preset slow -vf "scale=iw*min(640/iw\,360/ih):ih*min(640/iw\,360/ih),pad=640:360:(640-iw )/2:(360-ih)/2" -map 0:1 -c:a libfaac -b:a 32k -ar 44100 -f mpegts OUTPUT.m2ts

ffmpeg 创建两个视频流,但是它们的比特率和分辨率都取自最后一个视频参数 - 即两个流都是 640x360:

输出#0,mpegts,到“OUTPUT.m2ts”: 流 #0:0(eng):视频:h264,yuv420p,640x360 [SAR 559:560 DAR 559:315],q=-1--1, 650 kb/s,流 #0:1(eng):视频: h264, yuv420p, 640x360 [SAR 559:560 DAR 559:315], q=-1--1, 650 kb/s, 90k tbn, 23.98 tbc (默认) 流 #0:2(rus):音频:aac、44100 Hz、5.1、s16、32 kb/s(默认) 流映射: 流 #0:0 -> #0:0 (h264 -> libx264) 流 #0:0 -> #0:1 (h264 -> libx264) 流 #0:1 -> #0:2 (aac -> libfaac) 按 [q] 停止,按 [?] 寻求帮助

实际上是否可以将多个比特率转码到同一个文件?

【问题讨论】:

【参考方案1】:

您正在映射您的输入,而不是您的输出。尝试像这样指定您的输出比特率:-b:v:0 350k-b:v:1 650k。也可以通过这种方式定义其他流和变量,如编解码器。有关更多信息和示例,请参阅 FFmpeg map wiki。

【讨论】:

【参考方案2】:

试试这个命令:

ffmpeg -y -ss 600 -t 600 -i "INPUT.mkv" -map_chapters -1 -map 0:0 -map 0:0  -map 0:1 -c:v:0 libx264 -keyint_min 48 -g 96 -bufsize 350k -b:v0 350k -minrate 300k -maxrate 400k -profile:v:0 baseline -level 3.0 -preset slow -vf "scale=iw*min(480/iw\,272/ih):ih*min(480/iw\,272/ih),pad=480:272:(480-iw)/2:(272-ih)/2" -c:v:1 libx264 -keyint_min 48 -g 96 -bufsize 650k -b:v1 650k -minrate 500k -maxrate 800k -profile:v:1 baseline -level 3.1 -preset slow -vf "scale=iw*min(640/iw\,360/ih):ih*min(640/iw\,360/ih),pad=640:360:(640-iw)/2:(360-ih)/2" -c:a libfaac -b:a 32k -ar 44100 -f mpegts OUTPUT.m2ts

【讨论】:

要了解错误,请查看 Nick van Tilborg 的答案。

以上是关于ffmpeg 在同一个文件中对一个输入视频流和多个输出视频流进行转码的主要内容,如果未能解决你的问题,请参考以下文章

如何运行命令行 FFMPEG 并接受多个管道(视频和音频)而不阻塞第一个输入?

视频特效-使用ffmpeg滤镜

视频特效-使用ffmpeg滤镜

视频特效-使用ffmpeg滤镜

ffmpeg实现视频I帧提取

关于ffmpeg推流,如何推流一个文件夹里的所有视频或者多个视频?