当我使用此命令将视频从 MKV 转换为 MP4 时:
ffmpeg -i input.mkv -vcodec copy -acodec copy output.mp4
帧速率模式从恒定变为可变,导致 Adobe Premiere 随着时间的推移出现不同步。有没有办法保持帧速率恒定?
编辑:FFMPEG 的控制台输出
F:\Recordings\Gameplay\Test>ffmpeg -i input.mkv -vcodec copy -acodec copy output.mp4
ffmpeg version N-82178-g60178e7 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-libebur128 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib
libavutil 55. 35.100 / 55. 35.100
libavcodec 57. 65.100 / 57. 65.100
libavformat 57. 57.100 / 57. 57.100
libavdevice 57. 2.100 / 57. 2.100
libavfilter 6. 66.100 / 6. 66.100
libswscale 4. 3.100 / 4. 3.100
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
Input #0, matroska,webm, from 'input.mkv':
Metadata:
ENCODER : Lavf57.41.100
Duration: 00:00:10.83, start: 0.000000, bitrate: 8834 kb/s
Stream #0:0: Video: h264 (Constrained Baseline), yuv420p(progressive), 1920x1080, SAR 1:1 DAR 16:9, 1k fps, 60 tbr, 1k tbn, 120 tbc (default)
Metadata:
DURATION : 00:00:10.834000000
Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp (default)
Metadata:
title : Mic
DURATION : 00:00:10.797000000
Stream #0:2: Audio: aac (LC), 44100 Hz, stereo, fltp (default)
Metadata:
title : Desktop
DURATION : 00:00:10.797000000
Stream #0:3: Audio: aac (LC), 44100 Hz, stereo, fltp (default)
Metadata:
title : Discord
DURATION : 00:00:10.797000000
Output #0, mp4, to 'output.mp4':
Metadata:
encoder : Lavf57.57.100
Stream #0:0: Video: h264 (Constrained Baseline) ([33][0][0][0] / 0x0021), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 1k fps, 60 tbr, 16k tbn, 1k tbc (default)
Metadata:
DURATION : 00:00:10.834000000
Stream #0:1: Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo (default)
Metadata:
title : Mic
DURATION : 00:00:10.797000000
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 650 fps=0.0 q=-1.0 Lsize= 11681kB time=00:00:10.81 bitrate=8846.5kbits/s speed= 347x
video:11362kB audio:302kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.145660%
F:\Recordings\Gameplay\Test>pause
Press any key to continue . . .
答案1
它变为 VFR 是因为您的原始材料 (MKV) 实际上是 VFR,只是检测错误。这是我使用的多个库中非常常见的问题。
本质上,“帧速率”的概念在 MKV 容器中并不存在,更不用说 CFR/VFR 了。相反,每个视频帧都有一个时间码。大多数实用程序(ffmpeg
等mediainfo
)仅使用时间码来计算帧速率以及帧速率模式。出于明显的性能考虑,它们无法/不会读取整个文件,因此有时信息会出错。您可以使用mkvextract
提取所有帧的时间码并计算整个视频中它们之间的间隔,以查看它是否真正完全是 CFR 或 VFR。
答案2
-framerate XX
可能需要根据输入使用 -r 指定。
答案3
阴影游戏捕捉一开始就是多种多样的。
您必须使用重新编码ffmpeg -i input.mkv -r 60 -acodec copy output.mp4