2

Я использую ffmpeg для создания покадровой анимации из неподвижных изображений. Первое изображение повторяется для создания заголовка. Следующие шаги - объединить заголовок и промежуток времени для финального видео. И заголовок и промежуток времени созданы нормально. Создание объединенного финального видео не дает ожидаемого результата.

ffmpeg версия 1.2.6-7 на kubuntu 14.

Заголовок

ffmpeg -framerate 16 -f image2 -i './Header/Sun_20150214_head_%02d.png' -vf "crop=1240:940:40:10" -vf drawtext="fontsize=100:fontcolor=yellow:fontfile=/usr/share/fonts/truetype/freefont/FreeSans.ttf:textfile=./scripts/header_text.txt:x=(w-text_w)/2:y=(h-text_h-line_h)/2" -c:v libx264 -pix_fmt yuv420p -crf 16 -y ./Video/sunspot_20150214_header.mp4

ffmpeg -i ./Video/sunspot_20150214_header.mp4 -vf fade=in:0:30 -crf 24 -y ./Video/sunspot_20150214_header_fade.mp4

Сам по себе заголовок играет хорошо и имеет приятное затухание.

Теперь для промежутка времени:

ffmpeg -r 12 -threads 0 -f image2 -pattern_type glob -i './npy2reg/Sun_20150214_*.png'  -c:v libx264 -crf 16 -vf "crop=1240:940:40:10" -y ./Video/sunspot_20150214_crf16_12fps.mp4

Сам по себе промежуток времени играет нормально.

Попробовал concat, используя файл concat.txt с указателями на оба входных файла. Файл concat.txt:

file '/home/gottsch/sunspot_20150214/Video/sunspot_20150214_header_fade.mp4'
file '/home/gottsch/sunspot_20150214/Video/sunspot_20150214_crf16_12fps.mp4'

Cmd для ffmpeg:

ffmpeg -f concat -i ./scripts/concat.txt -c copy -y  ./Video/sunspot_20150214_crf16_12fps_final.mp4

Это дает мой выходной файл sunspot_20150214_crf16_12fps_final.mp4 . Проблема: выходной файл показывает только заголовок.

Я читал, что движок ffmpeg concat требует, чтобы входные видео были в том же формате, который, как я полагаю, дается, когда ffmpeg создал их оба.

Ваша помощь ценится.

Спасибо герт

ОБНОВИТЬ:

Меня попросили предоставить консольный вывод следующего cmd:

gottsch@ubuntu:~/sunspot_20150214$ ffmpeg -i './Header/Sun_20150214_head_%02d.png' -pattern_type glob -i './npy2reg/Sun_20150214_*.png'
ffmpeg version 1.2.6-7:1.2.6-1~trusty1 Copyright (c) 2000-2014 the FFmpeg developers
  built on Apr 26 2014 18:52:58 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --arch=amd64 --disable-stripping --enable-avresample --enable-pthreads --enable-runtime-cpudetect --extra-version='7:1.2.6-1~trusty1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-libcdio --enable-x11grab --enable-libx264 --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
  libavutil      52. 18.100 / 52. 18.100
  libavcodec     54. 92.100 / 54. 92.100
  libavformat    54. 63.104 / 54. 63.104
  libavdevice    53.  5.103 / 53.  5.103
  libavfilter     3. 42.103 /  3. 42.103
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, image2, from './Header/Sun_20150214_head_%02d.png':
  Duration: 00:00:02.36, start: 0.000000, bitrate: N/A
Stream #0:0: Video: png, rgb24, 1280x960, 25 fps, 25 tbr, 25 tbn, 25 tbc
Input #1, image2, from './npy2reg/Sun_20150214_*.png':
  Duration: 00:00:01.76, start: 0.000000, bitrate: N/A
Stream #1:0: Video: png, rgb24, 1280x960, 25 fps, 25 tbr, 25 tbn, 25 tbc
At least one output file must be specified
gottsch@ubuntu:~/sunspot_20150214$ 

после этого, кажется, нормально обрабатывать обе части в одном cmd. Мой скрипт обработки изображений создает файлы в перечисляемом формате, поэтому вторая часть может быть написана без глобуса с% нотацией.

ffmpeg -i './Header/Sun_20150214_head_%02d.png' -i './npy2reg/Sun_20150214_%02d.png'

Ошибка строки cmd по поводу отсутствующего выходного файла - не проблема. Меня беспокоит серия фильтров, которые я планировал включить. (Выцветает, текст, обрезать). Есть ли учебник по правильной последовательности и контролю приоритета фильтров?

Я также обеспокоен самой широкой совместимостью созданного mpeg, чтобы большинство комбинаций устройств / ОС / браузеров могли его обрабатывать.

При моей предыдущей попытке я получил сообщение о том, что в браузере MAC OS происходит сбой с отсутствующей ошибкой плагина.

Спасибо герт

UPDATE2

Каждая строка Follwing производит только видео заголовка. Кадр из интервальной съемки не отображается.

ffmpeg -i './Header/Sun_20150214_head_%02d.png' -i './npy2reg/Sun_20150214_%02d.png' -codec:v libx264 -pix_fmt yuv420p -crf 16 -y ./Video/sunspot_20150214_crf16_12fps_test.mp4

ffmpeg -i './Header/Sun_20150214_head_%02d.png' -pattern_type glob -i './npy2reg/Sun_20150214_*.png' -codec:v libx264 -pix_fmt yuv420p -crf 16 -y ./Video/sunspot_20150214_crf16_12fps_test.mp4

Бест, Герт

1 ответ1

1

Из того, что я вижу, ваши видео имеют разные частоты кадров, 16fps и 12fps. Для конкатенации видео и использования демультиплексора concat единственное, что может отличаться для конкатенации видео, может быть битрейт, все остальное, разрешение, fps, кодек, формат цвета ... должны быть одинаковыми.

См. Раздел « Конкатенация вики FFmpeg».

Возможные решения

  • Выровняйте все возможные параметры вашего видео (fps, размер, ...)
  • Создавайте свои видео в графическом редакторе GUI как kdenlive.
  • FFMpeg довольно ограничен для редактирования задач, таких как фейды и тексты. Если вы действительно хотите создавать / создавать видео программно, лично я бы использовал сервер кадров, такой как avisynth, который предоставляет все, что вам нужно, через свои внутренние фильтры (ImageSource , FadeIn , Subtitle , ...). Тем не менее, он доступен только для Windows. Существует порт Linux под названием avxsynth, хотя я никогда не пробовал этого. Использование фрейм-сервера обеспечивает возможность предварительного просмотра конечного результата в медиаплеере по вашему выбору, супер простое изменение параметров и кодирование конечного результата за один раз.
  • Используйте конкататный фильтр ffmpegs: https://trac.ffmpeg.org/wiki/Concatenate#differentcodec. У меня был смешанный успех с этим.

Пример сценария avisynth

Я сделал простой сценарий sunspot.avs который может стать для вас отправной точкой. Я пробовал это в Windows, но в теории, это должно работать и с avxsynth ...

# Set the desired parameters for the output video
out_fps = 25
out_width = 800
out_height = 600

# Make a title clip
blank = BlankClip(length=out_fps * 3, width=out_width, height=out_height, fps=out_fps, color=$000000).KillAudio()
blank_subtitle = blank.Subtitle("Your Title", align=5, size=60, text_color=$ffff00)

# Load image sequence, assume 16 input fps 16, convert to output video's 25fps
# NOTE: since the input frame rates differs from the output frame rate, there will be interpolation going on... 
sunspot = ImageReader("Sun_20150214_%02d.png", 1, 62, 16).ChangeFPS(out_fps).ConvertToRGB32()
# Crop & Resize, pay attention not to distort the images to the ratios
sunspot_cropped = sunspot.Crop(8,2,-9,-4).LanczosResize(out_width, out_height)

# Concatenate the clips (which now have the same fps + format + color space)
blank_subtitle.FadeIn(out_fps * 1) ++ sunspot_cropped

Вы можете предварительно просмотреть результат с помощью ffplay sunspot.avs и, если оно выполнено, преобразовать его в файл mp4, например:

ffmpeg -i sunspot.avs -c:v libx264 -crf 19 -preset:v slower -pix_fmt yuv420p -c:a libfdk_aac sunspot.mp4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .