Как конвертировать 1080 @ 50i -> 720 @ 50p с помощью ffmpeg?

16196
BarsMonster

Мне действительно нравится видео со скоростью 50 кадров в секунду, но я не могу заставить ffmpeg конвертировать его в 50 кадров в секунду для себя.

Разрешение 720p у меня абсолютно нормально, просто нужно больше FPS.

50i выглядит просто более плавно в соответствующих проигрывателях (например, GOM Player деинтерлейсирует видео и воспроизводит его с частотой 50 Гц. Очень большая разница с видео с частотой 25 Гц.) ...

Моя текущая командная строка:

ffmpeg -i 00010.MTS -threads 3 -filter:v yadif -s "1280x720" -r 50 -b:v 20M output.avi 

Вот больше деталей видео. Исходное видео от камкодера Cannon HF10 AVCHD.

ffmpeg -i 00010.MTS -threads 3 -filter:v yadif -s "1280x720" -r 50 -b:v 20M output.avi ffmpeg version N-37541-g670229e Copyright (c) 2000-2012 the FFmpeg developers built on Feb 3 2012 20:14:17 with gcc 4.6.2 configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-ru ntime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libope ncore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --en able-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger - -enable-libspeex --enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwben c --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable- libxvid --enable-zlib libavutil 51. 37.100 / 51. 37.100 libavcodec 54. 0.102 / 54. 0.102 libavformat 54. 0.100 / 54. 0.100 libavdevice 53. 4.100 / 53. 4.100 libavfilter 2. 61.100 / 2. 61.100 libswscale 2. 1.100 / 2. 1.100 libswresample 0. 6.100 / 0. 6.100 libpostproc 52. 0.100 / 52. 0.100 [h264 @ 000000000033FA30] Increasing reorder buffer to 1 Input #0, mpegts, from '00010.MTS': Duration: 00:03:13.92, start: 0.482156, bitrate: 16304 kb/s Program 1 Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p, 1920x1 080 [SAR 1:1 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 50 tbc Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, s16, 256 kb/s File 'output.avi' already exists. Overwrite ? [y/N] y w:1920 h:1080 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_param: [yadif @ 0000000003CE95B0] mode:0 parity:-1 auto_enable:0 [scale @ 0000000003CE9550] w:1920 h:1080 fmt:yuv420p -> w:1280 h:720 fmt:yuv420p flags:0x4 Output #0, avi, to 'output.avi': Metadata: ISFT : Lavf54.0.100 Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 1280x720 [SAR 1:1 DA R 16:9], q=2-31, 20000 kb/s, 50 tbn, 50 tbc Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, s16, 128 kb /s Stream mapping: Stream #0:0 -> #0:0 (h264 -> mpeg4) Stream #0:1 -> #0:1 (ac3 -> libmp3lame) Press [q] to stop, [?] for help frame= 15 fps= 0 q=2.0 size= 945kB time=00:00:00.62 bitrate=12481.3kbits/ frame= 32 fps= 32 q=2.0 size= 2132kB time=00:00:01.30 bitrate=13435.2kbits/ frame= 51 fps= 34 q=2.0 size= 3372kB time=00:00:02.06 bitrate=13409.2kbits/ frame= 70 fps= 35 q=2.0 size= 4641kB time=00:00:02.82 bitrate=13482.8kbits/ frame= 76 fps= 35 q=2.0 Lsize= 5047kB time=00:00:03.06 bitrate=13511.9kbits 
9
Что вы имеете в виду, «не может сделать»? Это дает вам ошибки? Just Jake 13 лет назад 0
Он производит файл, который выглядит как 25p, а не такой гладкий, как 50i в соответствующем плеере. BarsMonster 13 лет назад 0
@slhck Вот так BarsMonster 12 лет назад 0
Любая конкретная причина для кодирования в MPEG-4 Visual вместо повторного использования h.264 (например, `-vcodec libx264`? Не то чтобы это имело значение для ~ 20 Мбит / с, но все же. slhck 12 лет назад 0
@ slhck хорошо, это просто по умолчанию :-) BarsMonster 12 лет назад 0
Что произойдет, если вы используете ffmpeg с "-r 100"? Почему вы не используете mencoder с `-vf scale = width: height`? harrymc 12 лет назад 0
Ну, в файле mediainfo есть 100 FPS, но я все еще получаю только 25 FPS на проигрывателе. Шаг за кадром это ровно 25 кадров в секунду. BarsMonster 12 лет назад 0
Менкодер справляется с работой за рулем ffmpeg? harrymc 12 лет назад 0
Еще один вопрос: вы уверены, что входное видео действительно 50 кадров в секунду? Из вашей попытки с "-r 100" кажется, что информация заголовка не всегда правильно описывает видеопоток. Кстати: видеофайл "-r 100" был больше, чем файл, сгенерированный с использованием "-r 50"? harrymc 12 лет назад 0

5 ответов на вопрос

6
mtone

Подобно тому, как чересстрочное прогрессивное содержимое разделяет каждый кадр на 2 поля, удваивая частоту кадров, общий метод деинтерлейсинга состоит в объединении каждых 2 полей в 1 кадр, что уменьшает скорость на 2, таким образом, принимая 50 в 25 кадров в секунду. Конечно, вы можете удвоить каждый последний кадр, но это не дает никакой выгоды.

Во-первых, мы можем прочитать не использовать -deinterlace, а вместо этого yadif (что вы уже делаете):

 - deinterlace This option is deprecated since the deinterlacing is very low quality. Use the yadif filter with -filter:v yadif. 

Вы, вероятно, найдете раздел yadif документации FFMPEG довольно интересным:

Deinterlace the input video ("yadif" means "yet another deinterlacing filter").  It accepts the optional parameters: mode:parity:auto.   MODE specifies the interlacing mode to adopt, accepts one of the following values:  ‘0’ output 1 frame for each frame ‘1’ output 1 frame for each field  ‘2’ like 0 but skips spatial interlacing check  ‘3’ like 1 but skips spatial interlacing check  Default value is 0.   PARITY default value is -1. AUTO default value is 0.  

Обратите внимание, что по умолчанию MODE равен 0, что указывает FFMPEG выводить 1 кадр для каждых 2 полей, таким образом вдвое уменьшая число кадров в секунду. Я думаю, что вы ищете РЕЖИМ 1: один кадр на поле . Я не слишком уверен, как использовать эти необязательные параметры, но, возможно, что-то вроде

-filter:v yadif 1:-1:0 -s "1280x720" -r 50 
По крайней мере, это дает 50 кадров в секунду, но, к сожалению, 2 сгенерированных последовательных кадра очень похожи ... Хотя, когда я делаю шаг за шагом оригинальное видео 50i, я действительно вижу, что в быстром движении есть в два раза больше «шагов» и гораздо плавнее. BarsMonster 12 лет назад 0
@BarsMonster Во-первых, я бы попытался выяснить, что делает GOM-плеер, на случай, если это связано с какой-либо формой интерполяции. Мне любопытно - много ли чересстрочного контента, который содержит информацию с высокой частотой кадров? (В конце концов, преобразование 25p в 50i для широковещания не создает никакой новой информации о движении - вам нужен контент с прямым чередованием). Затем, если вы найдете метод деинтерлейсинга, который использует GOM (см. Википедию, их довольно много), вы должны попытаться найти фильтр для него, который можно использовать в AVISYNTH как часть процесса вместо использования метода -YADIF в FFMPEG. , mtone 12 лет назад 0
1
Just Jake

Согласно документации, -rопция устанавливает количество выходных файлов в секунду. Например, это устанавливает производительность на 50 кадров в секунду:

ffmpeg -i input.avi -r 50 output.avi 
К сожалению, полученный файл примерно такой же, как и для -r 25. И он больше не работает. Похоже, что он просто снял 25p видео, а затем удвоил его. BarsMonster 13 лет назад 0
Вы также пытались указать входную частоту кадров? Just Jake 13 лет назад 0
Это исключено. При деинтерлейсинге видео вы жертвуете плавным движением для совместимости с прогрессивными дисплеями. Jason 12 лет назад 3
@Jason Ну, мой видеоплеер (GOM Player) деинтерлейсирует видео 50i и показывает его плавно (т.е. с частотой 50 Гц) на моем TFT-мониторе с частотой 120 Гц, что, очевидно, является прогрессивным. Почему видео перекодировщик не может делать то же самое и производить плавный выход 50 Гц? Я понимаю, что у 50i меньше мелких деталей, но почему я не могу рассчитывать на выход 50Гц? BarsMonster 12 лет назад 0
Это зависит от используемого фильтра деинтерлейсинга. Очевидно, GOM Player делает хорошую работу в этом. Не слишком много знаю о том, как FFmpeg обрабатывает чересстрочное видео. @BarsMonster slhck 12 лет назад 0
1
Jason

ffmpeg -i input.avi -deinterlace -filter:v yadif -s "1280x720" output.avi

К сожалению, он по-прежнему выдает всего 25 кадров в секунду ... Оригинальный файл гораздо более плавный ... Даже добавление -r 50 не помогло. BarsMonster 12 лет назад 1
1
Steven Penny

«В большинстве практических случаев невозможно получить полное прогрессивное видео из чересстрочного контента».

Кроме того, если бы вы могли загрузить небольшой фрагмент видео, это очень помогло бы вашему делу.

Источник: mplayerhq.hu/DOCS/HTML/en/menc-feat-telecine.html

0
ecchphoto

Эта команда работает для меня:

ffmpeg -i source_50i.MTS -aspect 1920:1080 -vf yadif=1,scale=1920:1080 -c:v libx264 -preset fast -profile:v high -crf 23 -ac 2 -strict experimental -c:a aac -b:a 96k -movflags +faststart -y result_50p.mp4 

Источником был файл видеокамеры Sony.

Похожие вопросы