由于转码视频[ffmpeg]导致数据丢失

由于转码视频[ffmpeg]导致数据丢失

我有一个应用程序,它接收用户的视频并进行一些处理。处理管道由多个步骤组成。到目前为止,我编写的代码假设输入视频采用 h264 编解码器。但不能假设用户的输入是特定的格式/编解码器,所以我正在考虑在管道开始时添加一个步骤,即将任何给定的输入视频转码为 h264。但我正试图通过这一步将视频中的数据损失降到最低。此外,用户上传的视频也可能不是无损的,事实上很可能是有损的 h264 视频。

我可以在转码输入视频时使用 crf=0

ffmpeg -i input.mp4 -c:v h264 -crf 0 output.mp4

但这会导致文件体积过大,从而影响流程中的后续步骤。

现在假设我使用 crf=18 进行上述转码步骤

ffmpeg -i input.mp4 -c:v h264 -crf 18 output.mp4

并且假设输入视频也有 crf=18,那么在这种情况下这个转码步骤是否会导致数据丢失?

答案1

如果源视频包含 H.264 视频,您可以简单地使用-map-c:v copy提取所需的流而无需转码。我会首先“探测”源视频以查看它包含哪些流,然后根据需要使用 ffmpeg 构建“transcode”管道命令:

ffmpeg -i input.mp4 -map 0:1 -c:v copy output.mp4

相关内容