ffmpeg может гореть во временном коде?

У меня есть потребность гореть во временном коде к видео, и задаюсь вопросом, является ли это чем-то, к чему ffmpeg способен?

16
задан spinon 6 July 2010 в 17:32
поделиться

2 ответа

Короткий ответ - нет.

Длинный ответ: да, но не без использования отдельной библиотеки для создания кадров с отрендеренным тайм-кодом на них, с прозрачностью, заполняющей остальную часть кадра, затем используя FFmpeg для наложения кадров на существующее видео. Я не знаю, как это сделать, но я уверен, что если вы творческий человек, вы сможете это придумать.

Edit: Я работал над этой проблемой, потому что это интересный вопрос/проект для меня. Я продвинулся немного дальше в решении, написав Perl скрипт, который будет генерировать .srt файл со встроенным в него временным кодом для любого данного видео файла, из которого FFmpeg настроен на чтение метаданных. Он использует библиотеку Video::FFmpeg для чтения длительности и сохраняет файл субтитров как ${video}.srt. Это сделает его автоматически рендеринговым в Mplayer, если вы вставите следующие строки в ~/.mplayer/config:

# select subtitle files automatically in the current directory, all files
# matching the basename of the current playing file
sub-fuzziness=1

Все еще работаю над тем, как расположить и наложить рендеринговые субтитры на видео и повторно закодировать в том же формате. Я обновлю этот пост, когда узнаю больше.

3
ответ дан 30 November 2019 в 15:51
поделиться

FFMPEG сможет выполнить большую часть работы, но он не будет полностью упакован. Используя FFMPEG, вы можете заставить его декодировать все кадры по порядку и дать вам "временную метку презентации" (дополнительные метаданные, связанные со временем, могут быть доступны в некоторых форматах, но PTS - это то, что вы захотите найти для начала). Затем вы сами должны нарисовать текст на декодированном кадре. Я использую Qt для подобных вещей, используя QPainter на QImage с данными кадра, но, возможно, есть какой-то другой API для рисования на изображении, который вам кажется более очевидным. Затем используйте API FFMPEG для создания сжатого видео, в котором есть только что нарисованные кадры. Это будет немного сложнее, если вам также нужен звук. В моей работе аудио не очень важно, поэтому я не стал изучать аудио аспекты API. По сути, когда вы выполняете цикл чтения, получая пакеты из файла, некоторые из них будут аудио. Вместо того чтобы отбрасывать их, как это делаю я, вам нужно сохранить их и записать в выходной файл в том виде, в котором вы их получили.

Я использовал только C API, а не C#, поэтому не знаю, есть ли там какие-то особые проблемы, о которых стоит беспокоиться.

-1
ответ дан 30 November 2019 в 15:51
поделиться
Другие вопросы по тегам:

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