我正在运行以下命令,使用 ffmpeg 和 x264 进行两遍编码:
ffmpeg -t 5 -i Meridian.avi -filter:v scale=-2:240 -b:v 0.20M -passlogfile Meridian-240 -pass 1 -f null /dev/null
ffmpeg -t 5 -i Meridian.avi -filter:v scale=-2:240 -b:v 0.20M -passlogfile Meridian-240 -pass 2 Meridian-240.mp4
但是,当我运行第二条命令时,出现此错误:
ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 5.5.0 (Homebrew gcc 5.5.0_4)
configuration: --prefix=/home/linuxbrew/.linuxbrew/Cellar/ffmpeg/4.1.3-with-options --enable-shared --enable-hardcoded-tables --cc=gcc-5 --host-cflags= --host-ldflags= --enable-gpl --enable-libaom --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --disable-libjack --disable-indev=jack --disable-htmlpages --enable-libvmaf --enable-version3
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Input #0, avi, from 'Meridian.avi':
Metadata:
encoder : Lavf58.26.101
timecode : 00:00:17;12
Duration: 00:01:00.00, start: 0.000000, bitrate: 887782 kb/s
Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), yuv420p, 3840x2160, 888395 kb/s, SAR 1:1 DAR 16:9, 24 fps, 24 tbr, 24 tbn, 24 tbc
Stream mapping:
Stream #0:0 -> #0:0 (ffv1 (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x202f180] using SAR=640/639
[libx264 @ 0x202f180] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x202f180] ratecontrol_init: can't open stats file
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!
因此基本上它的意思是:
ratecontrol_init:无法打开统计文件
这是为什么?
答案1
在第一次(和第二次,以确保安全)传递中指定编码器。
ffmpeg -t 5 -i Meridian.avi -filter:v scale=-2:240 -c:v libx264 -b:v 0.20M -passlogfile Meridian-240 -pass 1 -f null /dev/null
当未指定编码器时,ffmpeg 将选择输出格式的默认编码器。对于 null,它不是 x264 或任何实际编码器。因此不会进行第一遍。
没有必要指定高效的多路复用器,因为那些 CPU 周期都被浪费了。