У меня есть очень короткое видео со скоростью 120 кадров в секунду .
ffprobe input.mp4
показывает 118.99fps
:
ffprobe version 3.0 Copyright (c) 2007-2016 the FFmpeg developers
built with Apple LLVM version 7.3.0 (clang-703.0.29)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.0 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --enable-ffplay --enable-vda
libavutil 55. 17.103 / 55. 17.103
libavcodec 57. 24.102 / 57. 24.102
libavformat 57. 25.100 / 57. 25.100
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 31.100 / 6. 31.100
libavresample 3. 0. 0 / 3. 0. 0
libswscale 4. 0.100 / 4. 0.100
libswresample 2. 0.101 / 2. 0.101
libpostproc 54. 0.100 / 54. 0.100
[h264 @ 0x7f8262009600] Increasing reorder buffer to 1
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp41mp42isom
creation_time : 2016-04-27 10:43:14
Duration: 00:00:02.76, start: 0.000000, bitrate: 10318 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 720x1280, 10272 kb/s, 118.99 fps, 600 tbr, 600 tbn, 1200 tbc (default)
Metadata:
creation_time : 2016-04-27 10:43:14
handler_name : Core Media Video
Я запускаю квадратную обрезку и операцию изменения размера:
ffmpeg -i input.mp4 -vf "crop='if(gte(iw,ih),ih,iw):if(gte(ih,iw),iw,ih)', scale=640x640" -an -c:v libx264 -profile:v high -level 4.1 -preset veryslow -crf 20 output.mp4
Это дает:
....
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp41mp42isom
creation_time : 2016-04-27 10:43:14
Duration: 00:00:02.76, start: 0.000000, bitrate: 10318 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 720x1280, 10272 kb/s, 118.99 fps, 600 tbr, 600 tbn, 1200 tbc (default)
....
Output #0, mp4, to 'output.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp41mp42isom
encoder : Lavf57.25.100
Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 640x640, q=-1--1, 600 fps, 19200 tbn, 600 tbc (default)
....
И, конечно же, ffprobe output.mp4
подтверждает, что output.mp4
это на скорости 600 кадров в секунду, как и VLC.
Как я могу гарантировать, что ffmpeg будет кодировать мое видео с той же частотой кадров, что и на входе (будь то 30, 60, 120 или 240 кадров в секунду)?
Обновление : записи PTS ввода и вывода для приведенной ниже команды идентичны в версии N-79630-g9ac154d. Похоже, файл ошибочно помечен как VFR. Но эта одношаговая команда ниже работает для примера видео.
Использовать
ffmpeg -i input.mp4 -vf "crop='if(gte(iw,ih),ih,iw):if(gte(ih,iw),iw,ih)', scale=640x640" \
-an -c:v libx264 -profile:v high -level 4.1 -preset veryslow -crf 20 -vsync 0 output.mp4
Частота кадров, хранящаяся в контейнере ( tbr
), равна 600, в то время как сообщаемое количество кадров в секунду 118.99
получается путем подсчета количества видеопакетов и деления на общую продолжительность. Если это не поток с переменной частотой кадров, добавьте -r 118.99
его в качестве параметра вывода.
Для более старых версий, как вариант, вывод в MKV, т.е.
ffmpeg -i input.mp4 -vf "crop='if(gte(iw,ih),ih,iw):if(gte(ih,iw),iw,ih)', scale=640x640" \
-vsync 0 -an -c:v libx264 -profile:v high -level 4.1 -preset veryslow -crf 20 output.mkv
Если вы затем мультиплексируете MKV в MP4,
ffmpeg -i output.mkv -c copy output.mp4
Полученный MP4 покажет (близкую к) исходную частоту кадров.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'no-rc.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.34.103
Duration: 00:00:02.75, start: 0.000000, bitrate: 2462 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x640, 2444 kb/s, 119.88 fps, 600 tbr, 16k tbn (default)
небрежность
-r 118.99
заключается в том, что вход может быть с разной частотой кадров. Есть ли способ сделать его динамическим, чтобы он-r <value>
соответствовал вводуfps
?Гьян
небрежность
роджерпак