FFmpeg создавать видео из изображений, вставлять изображения в качестве кадра из отметки времени? - PullRequest
0 голосов
/ 29 августа 2018

Итак, я пытаюсь извлечь каждый кадр видео, затем с помощью ffprobe посмотреть, когда каждый кадр воспроизводится в видео, а затем соединить это видео вместе, используя эти извлеченные изображения и вывод ffprobe.

Сейчас у меня есть этот командный файл:

for %%a in (*.mp4) do (
    mkdir "%%~na_images" > NUL
    ffmpeg.exe -hide_banner -i "%%a"  -t 100 "%%~na_images\image-%%d.png"
    ffprobe.exe "%%a" -hide_banner -show_entries frame=coded_picture_number,best_effort_timestamp_time -of csv > "%%~na_frames.txt"
)

Сначала создается каталог для изображений. Затем ffmpeg извлекает все кадры видео в отдельные файлы PNG, которые нумеруются соответствующим образом. Наконец, ffprobe видит, когда каждый кадр впервые показывается в этом видео (IE: кадр 1 отображается с 0 секундами, но, скажем, со скоростью 60 кадров в секунду, затем кадр 2 воспроизводится с 0,016667 секундами в видео). Вывод выглядит так:

frame,0.000000,0
frame,0.000000
frame,0.017000,1
frame,0.023220

Где первое число (IE 0,17000 - время появления второго кадра), а второе число - номер кадра. Теперь моя проблема заключается в использовании ffmpeg, чтобы взять каждый кадр и поместить его в нужное время в видео. Я могу сделать это, используя другой язык (возможно, Python), но мое лучшее предположение - сделать цикл для перебора выходного файла ffprobe, получить время кадра и номер изображения, поместить этот кадр в те точки, в которых он появляется, и затем двигаться дальше до следующего кадра и времени размещения. Если посмотреть на данные фрейма, которые я использовал в качестве примера выше, это будет что-то вроде этого:

for line in lines:
    mySplit = line.split(',')
    # Get image number 0 and insert at time 0.000000

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

1 Ответ

0 голосов
/ 29 августа 2018

Вы должны сообщить системе, что существует более 1 токена. * 1001 то есть *

for /f "tokens=1-4 delims=," %%a in ...

Здесь вы говорите, что хотите получить токены с 1 по 4, а делимер - ,

Так, для примера файла, содержащего 1,100,1000,10000, он назначит %%a первому токену (будучи 1, а %%b второму (будучи 100) и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...