Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Водяной знак
 
 автор: adscom   (07.08.2010 в 15:37)   письмо автору
 
 

здравствуйте.
Подскажите FFmpeg команду для наложения водяного знакана (изображения) на 3gp и mp4 видео.

  Ответить  
 
 автор: adscom   (07.08.2010 в 21:26)   письмо автору
 
   для: adscom   (07.08.2010 в 15:37)
 

сначало выдирал из видео все кадры такой командой:
ffmpeg -i 1.3gp -f image2 src/i%06d.jpg


Потом выдрал аудио дорожку такой командой:
ffmpeg -i 1.3gp -acodec libamr_nb -ar 8000 -ac 1 -ab 12.2k src/audio.amr


Потом каждый кадр промаркеровал.

потом склеил из кадров такой командой:
ffmpeg -i src/audio.amr -f image2 -i src/i%06d.jpg -r 15 -acodec libamr_nb -ar 8000 -ac 1 -ab 12.2k output.3gp


Все нормально работает, но видео проигрывается быстрее, чем аудио.
Подскажите в чем может быть дело?

  Ответить  
 
 автор: sim5   (08.08.2010 в 01:58)   письмо автору
 
   для: adscom   (07.08.2010 в 21:26)
 

Битрейты потоков не совпадают.

  Ответить  
 
 автор: adscom   (08.08.2010 в 03:59)   письмо автору
 
   для: sim5   (08.08.2010 в 01:58)
 

А как сделать, чтобы совпадали?

  Ответить  
 
 автор: sim5   (08.08.2010 в 04:09)   письмо автору
 
   для: adscom   (08.08.2010 в 03:59)
 

Если, к примеру, у вас есть видео общей длительностью 1 час, в котором частота кадров 25 в секунду, а звук 44 Кгц, то этот поток имеет определенный битрейт, как и каждый из его отдельных потоков (видео/аудио). Вы разделяете поток на два - видео и аудио, затем изменяете, например, частоту кадров до 24 в секунду, после чего опять объеденили эти потоки в один. Как вы думаете, синхронизация потоков сохранится или она будет утеряна?
Я не знаю ffmpeg, чего он и как делает, но нужно получить параметры каждого из потоков вашего видео, и разделять их именно с этими параметрами, в этом случае их длительность будет одинакова. И объеденять их нужно с такими же параметрами, и если ffmpeg не глюкает, значит все должно нормально получиться.
А вы к тому же, разбиваете видео на кадры, а значит и упаковать их в видео нужно именно с исходным битрейтом.

  Ответить  
 
 автор: adscom   (08.08.2010 в 04:32)   письмо автору
 
   для: sim5   (08.08.2010 в 04:09)
 

Значит подожду знающих.

  Ответить  
 
 автор: sim5   (08.08.2010 в 04:45)   письмо автору
 
   для: adscom   (08.08.2010 в 04:32)
 

Вы думаете вам предложат иное?
У видео есть разрешение, видео может быть упаковано каким либо компрессором, при этом указана степень компресси. В этом случае поток будет иметь определенный битрейт. Если вы упакуете теже самые кадры, но используя другой компрессор с той же степенью компрессии, то совсем не обязательно, что вы получите такой же битрейт потока, просто потому, что качество этот компрессор уже будет давать иное, а значит и битрейт будет иной. Тем более, если вы измените частоту кадров при упаковке, тогда уж точно надеяться не на что.
Ищите у библиотеки этой, как указать набору кадров скорость, компрессор, степень сжатия, при этом эти параметры должны быть вам известны - получены из исходного видео. В противном случае даже и не надейтесь на автоматическую синхронизацию видео и звука, такое возможно, если только угадаете и вам повезет.
Идеальным же вариантом было бы не распаковка видео, а изготовление видеодорожки состоящей из одного кадра с длительностью равной длительности исходного видео, которую и совместить с исходными видео. Но ffmpeg должен уметь не только накладывать видео на видео, но еще и понимать альфа канал, или хотя бы уметь вырезать цвет указанный как прозрачный. Вот если он может так работать, как это и делают видеоредакторы, тогда нужно делать именно так. Читайте об этой библиотеке, может что-то и можно сделать.

  Ответить  
 
 автор: adscom   (08.08.2010 в 04:51)   письмо автору
 
   для: sim5   (08.08.2010 в 04:45)
 

У меня в начале скрипта идет чтение всех данных из исходного файла, и эти данные вставляются при упаковке видео.

По моему тут что то с кодеками.

  Ответить  
 
 автор: sim5   (08.08.2010 в 04:57)   письмо автору
 
   для: adscom   (08.08.2010 в 04:51)
 

Данные, это одно, у данных (видео/аудио) есть еще и параметры, это другое. Вот с этими параметрами вы и должны упаковать свои кадры с логотипом, то есть новая видеодорожка должна быть такой же, как и была исходной - разрешение, частота кадров, применяемый кодек, степень компрессии.
Кодеки сами по себе не принимают решения, они могут иметь параметры по умолчанию, либо ffmpeg может что-то по умолчанию ляпнуть, если вы не укажите необходимого.

  Ответить  
 
 автор: adscom   (08.08.2010 в 05:51)   письмо автору
 
   для: sim5   (08.08.2010 в 04:57)
 

На все ответ найдете =)
Скажите тогда в чем у меня ошибка?

  Ответить  
 
 автор: sim5   (08.08.2010 в 06:13)   письмо автору
 
   для: adscom   (08.08.2010 в 05:51)
 

Я не знаю в чем ваша ошибка, так как не знаю ffmpeg и по его командам, которые вы тут представили, понятия не имею чего вы там не так делаете.
Но причина ошибки явна - это не соответствие скоростей потоков видео и аудио. Они ведь не сами по себе существуют, а имееют скорости и воспроизводятся в реальном режиме времни. А это значит, что звук "а" не ждет когда появится его кадр "К", а воспроизводится, при этом подразумевается, что видеопоток в это время воспроизводит кадр "К".
Вы указываете параметры видео, как разрешение, кодек, компрессию, для звука частоту семплирование, кодек, и все это отдаете компрессору. Компрессор при этом расчитает битрейт потока и запакует как подобает. У вас получается, что вы на исходную звуковую доржку (если вы только и ее параметры не изменили) накладываете видеопоток с параметрами как бог на душу положил, на глазок. Другого объяснения нет.

  Ответить  
 
 автор: adscom   (08.08.2010 в 07:12)   письмо автору
 
   для: sim5   (08.08.2010 в 06:13)
 

При сравнение исходного файла и сконвертированного, все параметры одинаковы.

  Ответить  
 
 автор: sim5   (08.08.2010 в 07:27)   письмо автору
 
   для: adscom   (08.08.2010 в 07:12)
 

Не может быть такого!
Откройте любой видеоредактор и поместите на его временную дорожку видео. Теперь выберите видео дорожку и укажите ей новую скорость - большую. Если у вас при этом на временной дорожке длительность видео дорожки останется такой же, и при этом слово "нифига" будет все равно синхронно с мимикой рта, тогда я вам поверю.
Если у вас видео воспроизводится быстрее чем звук по сравнению с оригинальным видео, то значит в вашем новом видео скорость видеопотока стала выше, его общая длительность стала меньше.

  Ответить  
 
 автор: sim5   (10.08.2010 в 06:16)   письмо автору
 
   для: adscom   (08.08.2010 в 07:12)
 

Хотел дописать, да все некогда было:

У вас может быть другая проблема, которую вы воспринимаете как повышенную скорость видеопотока. Возможно скорость такая как и была, если вы извлекли кадров именно столько, сколько их было и в оригинале, и, если вы укажете ту же скорость кадров при компрессии, то скорость не изменится.
Но возможно в ориганале, в начале, есть бланк-кадр (черный кадр), который воспроизводится, например, одну секунду. Возможно, что такой кадр ffmpeg извлек ни как последовательность кадров (компрессоры упаковывают не все в кадре, а только их изменяемые фрагменты, сравнивая их с опорным кадром), а как один кадр (или меньшее чем в оригинале их число). В результате сведения дорожек, в этом случае, видеоряд у вас сместится относительно звукоряда.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования