FFmpeg - 打开输出流 #0:0 的编码器时出错

FFmpeg - 打开输出流 #0:0 的编码器时出错

这个命令有什么问题?
我想转换一个.avi将视频格式设为“视频=h.264/.mp4,音频=.mp3”视频。

ffmpeg -i "C:\video.avi" -c:v libx264 -preset slow -qp 0 -pass 2 -c:a mp3 -b:a 192k "C:\video.mp4"

输出 :

ffmpeg version N-75550-g23acb98 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.9.3 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
  libavutil      55.  2.100 / 55.  2.100
  libavcodec     57.  3.100 / 57.  3.100
  libavformat    57.  2.100 / 57.  2.100
  libavdevice    57.  0.100 / 57.  0.100
  libavfilter     6.  8.100 /  6.  8.100
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.100 /  2.  0.100
  libpostproc    54.  0.100 / 54.  0.100
Input #0, avi, from 'video.avi':
  Metadata:
    encoder         : VirtualDubMod 1.5.10.2 (build 2540/release)
  Duration: 00:24:39.31, start: 0.000000, bitrate: 1757 kb/s
    Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p, 1280x960 [SAR 1:1 DAR 4:3], 1491 kb/s, 23.98 fps, 23.98 tbr, 23.98 tbn, 47.95 tbc
    Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 256 kb/s
[libx264 @ 00000000050647a0] using SAR=1/1
[libx264 @ 00000000050647a0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 00000000050647a0] constant rate-factor is incompatible with 2pass.
Output #0, mp4, to 'video.mp4':
  Metadata:
    encoder         : VirtualDubMod 1.5.10.2 (build 2540/release)
    Stream #0:0: Video: h264, none, q=2-31, 128 kb/s, SAR 1:1 DAR 0:0, 23.98 fps
    Metadata:
      encoder         : Lavc57.3.100 libx264
    Stream #0:1: Audio: mp3, 0 channels, 128 kb/s
    Metadata:
      encoder         : Lavc57.3.100 libmp3lame
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (ac3 (native) -> mp3 (libmp3lame))
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

答案1

Error while opening encoder

此消息表明哪个输出流有问题。#0:0根据控制台输出,在你的情况下,它是视频。

此外,当您收到此消息时,通常可以向上滚动以查看另一条更具体的错误消息。在您的输出中,它是:

[libx264 @ 00000000050647a0] constant rate-factor is incompatible with 2pass.

原因

您的命令使用了两种速率控制方法:-qp-b:v。它们是互斥的,并且-qp与 2pass 不兼容。

怎么修

  • 不要使用 2pass,或者
  • 不要将-qp-crf与 2pass 一起使用(除非您知道自己在做什么)

2pass 并不意味着更好的质量。2pass 主要用于当您尝试在特定文件大小限制内输出时。

您的请求

  1. “我想要的是重新编码视频并保持原始质量”

使用有损编码器无法保持“原始质量”。您必须使用无损设置:

ffmpeg -i input -c:v libx264 -qp 0 output.mp4

输出文件会很大,但是无损。

  1. “您能否对命令进行更改以重新编码视频,以尽可能保持质量”

-crf约为 18 被认为大致为“视觉无损”。从技术上讲,它并非无损,但根据你的输入和你对质量的看法,它很可能看起来是无损的。

ffmpeg -i input -c:v libx264 -crf 18 output.mp4
  1. “并将音频流转换为 192k .mp3”

这可以有两种解释。您想将音频和视频一起输出吗?

ffmpeg -i input -c:v libx264 -crf 18 -c:a libmp3lame -b:a 192k output.mp4

还是分开的?

ffmpeg -i input -map 0:v -c:v libx264 -crf 18 video.mp4 -map 0:a -c:a libmp3lame -b:a 192k audio.mp3
  1. “无论如何,您能添加一个 aac 示例吗?”
ffmpeg -i input -c:v libx264 -crf 18 -c:a aac -strict experimental -b:a 192k output.mp4

更多信息

相关内容