Формат OGV правильно воспроизводится на моем компьютере, но перекодирует пропускаемые (дублирующие?) Кадры


8

Я сделал несколько скринкастов, используя recordmydesktop на Ubuntu 12.10. Вывод - файл ogv.Когда я смотрю файл ogv с помощью проигрывателя фильмов по умолчанию (тотем), он выглядит хорошо - аудио и видео синхронизированы.Когда он транскодируется (мной или YouTube), аудио и видео не синхронизированы.Похоже, я пропускаю слайд или два во время повествования.

Обновить

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

Я видел это, но это не совсем моя ситуация (пытается перейти от ogv -> что-нибудь) https://superuser.com/questions/436187/ffmpeg-convert-video-w-dropped-frames-out-of-sync

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

Примеры

Это оригинальный файл OGV от gtk-recordmydesktop: http://dl.dropbox.com/u/64693533/sync_test/sync_test1.ogv

Видео начинается со слайда в течение 10 секунд, а затем продвигается к еще 3 слайдам по 5 секунд каждый.Каждый раз, когда я продвигаю слайды, я тоже касаюсь микрофона (10 с, 15 с, 20 с, 25 с).

Вот некоторые преобразования, которые были сделаны (у каждого есть свои проблемы с синхронизацией видео):

http://dl.dropbox.com/u/64693533/sync_test/sync_test1.mp4

  • этот показывает первый слайд в первом кадре, но быстро проходит мимо него
  • это было сделано с помощью стокового ffmpeg

http://dl.dropbox.com/u/64693533/sync_test/sync_test1.ffmpeg-static.mp4

  • этот довольно близок - по какой-то причине в 13 лет он решает продвинуться, хотя
  • это было сделано с помощью статической сборки ffmpeg несколько дней назад

Вот это на YouTube - вы можете видеть, что около 13 лет он продвигается рано (из слайда 1 -> слайд 2):

Вот доказательство того, что файл OGV работает правильно:

перевод ffmpeg

Используя ffmpeg или avconv, я, похоже, получаю результаты, аналогичные youtube (переходы происходят рано, но не обязательно одновременно).

Вот команда, которую я использую (с недавней статической сборкой ffmpeg) и вывод:

$ ~/ffmpeg/ffmpeg -i JSP.ogv JSP.mp4
ffmpeg version N-50025-gb8bb661 Copyright (c) 2000-2013 the FFmpeg developers
  built on Feb 17 2013 05:23:03 with gcc 4.6 (Debian 4.6.3-1)
  configuration: --prefix=/root/ffmpeg-static/64bit --extra-cflags='-I/root/ffmpeg-static/64bit/include -static' --extra-ldflags='-L/root/ffmpeg-static/64bit/lib -static' --extra-libs='-lxml2 -lexpat -lfreetype' --enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable-zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass --enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx
  libavutil  52. 17.101 / 52. 17.101
  libavcodec  54. 91.103 / 54. 91.103
  libavformat 54. 63.100 / 54. 63.100
  libavdevice 54. 3.103 / 54. 3.103
  libavfilter  3. 38.100 / 3. 38.100
  libswscale  2. 2.100 / 2. 2.100
  libswresample 0. 17.102 / 0. 17.102
  libpostproc 52. 2.100 / 52. 2.100
[ogg @ 0x34d4640] Multiple fisbone for the same stream is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
[ogg @ 0x34d4640] Header parsing failed for stream 0
[ogg @ 0x34d4640] Broken file, keyframe not correctly marked.
Input #0, ogg, from 'JSP.ogv':
  Duration: 00:12:49.67, start: 0.000000, bitrate: 224 kb/s
   Stream #0:0: Data: none
   Stream #0:1: Video: theora, yuv420p, 1600x880 [SAR 1:1 DAR 20:11], 15 fps, 15 tbr, 15 tbn, 15 tbc
   Metadata:
   RECORDMYDESKTOP : 0.3.8.1
   Stream #0:2: Audio: vorbis, 22050 Hz, mono, fltp, 89 kb/s
[libx264 @ 0x369c5e0] using SAR=1/1
[libx264 @ 0x369c5e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x369c5e0] profile High, level 4.0
[libx264 @ 0x369c5e0] 264 - core 129 r2230 1cffe9f - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=15 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'JSP.mp4':
  Metadata:
   encoder   : Lavf54.63.100
   Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1600x880 [SAR 1:1 DAR 20:11], q=-1--1, 15360 tbn, 15 tbc
   Metadata:
   RECORDMYDESKTOP : 0.3.8.1
   Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 22050 Hz, mono, s16, 128 kb/s
Stream mapping:
  Stream #0:1 -> #0:0 (theora -> libx264)
  Stream #0:2 -> #0:1 (vorbis -> libvo_aacenc)
Press [q] to stop, [?] for help
[ogg @ 0x34d4640] Broken file, non-keyframe not correctly marked.
   Last message repeated 2 times
Broken file, non-keyframe not correctly marked.=00:00:08.37 bitrate= 28.7kbits/s dup=66 drop=0 
Broken file, keyframe not correctly marked.time=00:00:51.01 bitrate= 125.3kbits/s dup=675 drop=0 
Broken file, keyframe not correctly marked.time=00:00:55.05 bitrate= 140.2kbits/s dup=782 drop=0 
Broken file, keyframe not correctly marked.time=00:00:59.60 bitrate= 140.5kbits/s dup=836 drop=0 
[ogg @ 0x34d4640] Broken file, keyframe not correctly marked.
Broken file, keyframe not correctly marked.time=00:01:08.00 bitrate= 143.0kbits/s dup=900 drop=0 
Broken file, keyframe not correctly marked.time=00:01:11.86 bitrate= 141.6kbits/s dup=910 drop=0 

... повторяется много раз ...

Broken file, keyframe not correctly marked.time=00:12:47.62 bitrate= 153.0kbits/s dup=9087 drop=0 
frame=11521 fps= 87 q=-1.0 Lsize= 14849kB time=00:12:49.48 bitrate= 158.1kbits/s dup=9087 drop=0 
video:2401kB audio:12024kB subtitle:0 global headers:0kB muxing overhead 2.938094%
[libx264 @ 0x369c5e0] frame I:49 Avg QP:16.05 size: 29658
[libx264 @ 0x369c5e0] frame P:2912 Avg QP: 9.88 size: 114
[libx264 @ 0x369c5e0] frame B:8560 Avg QP:12.76 size: 78
[libx264 @ 0x369c5e0] consecutive B-frames: 0.9% 0.1% 0.2% 98.9%
[libx264 @ 0x369c5e0] mb I I16..4: 90.8% 0.4% 8.8%
[libx264 @ 0x369c5e0] mb P I16..4: 0.0% 0.0% 0.0% P16..4: 0.0% 0.0% 0.0% 0.0% 0.0% skip:99.9%
[libx264 @ 0x369c5e0] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 0.3% 0.0% 0.0% direct: 0.0% skip:99.7% L0:65.3% L1:34.6% BI: 0.1%
[libx264 @ 0x369c5e0] 8x8 transform intra:0.5% inter:15.8%
[libx264 @ 0x369c5e0] coded y,uvDC,uvAC intra: 6.4% 0.1% 0.1% inter: 0.0% 0.0% 0.0%
[libx264 @ 0x369c5e0] i16 v,h,dc,p: 94% 4% 2% 0%
[libx264 @ 0x369c5e0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 22% 44% 1% 2% 2% 3% 1% 6%
[libx264 @ 0x369c5e0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 35% 17% 19% 4% 5% 5% 5% 5% 5%
[libx264 @ 0x369c5e0] i8c dc,h,v,p: 100% 0% 0% 0%
[libx264 @ 0x369c5e0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x369c5e0] ref P L0: 82.5% 1.4% 11.9% 4.3%
[libx264 @ 0x369c5e0] ref B L0: 47.2% 52.4% 0.4%
[libx264 @ 0x369c5e0] ref B L1: 99.2% 0.8%
[libx264 @ 0x369c5e0] kb/s:25.60

Видео все еще продвигается рано, но в разное время.Похоже, gtk-recordmydesktop генерирует «битый файл».Что раздражает, так это то, что OGV работает, поэтому мне кажется, что я должен быть в состоянии сделать эту работу с некоторым набором опций.

Я обнаружил, что могу рендерить видео в kdenlive, и, похоже, оно там работает.Я все еще хотел бы знать, что происходит.Kdenlive работает намного лучше, но иногда все еще продвигается рано.

+2

Пожалуйста, покажите вашу команду ffmpeg и полученный полный вывод консоли. 15 янв. 132013-01-15 17:38:52

  0

Хорошая идея @LordNeckbeard Я добавил команду и вывод.Я заметил ошибку/предупреждение: достигнуто max_analyze_duration. 17 фев. 132013-02-17 20:26:23

  0

Проблема все еще возникает, если вы используете недавнюю [статическую сборку ffmpeg] (http://ffmpeg.org/download.html#LinuxBuilds)?Это исключит любые потенциальные ошибки, с которыми вы можете столкнуться, которые уже были исправлены в более новой версии ffmpeg.Не нужно устанавливать или что-нибудь.Просто скачайте, распакуйте архив и запустите включенный двоичный файл 'ffmpeg'. 17 фев. 132013-02-17 20:56:32

  0

Можете ли вы предоставить пример входного файла, с которым можно воспроизвести проблему? 19 фев. 132013-02-19 19:22:55

  0

Хорошая идея, я покажу маленькую и выложу позже вечером. 19 фев. 132013-02-19 19:46:27

  0

Будет ли приемлем ответ «использовать другую программу записи экрана»?Похоже, GTK-recordmydesktop создает испорченные файлы. 20 фев. 132013-02-20 12:58:23

  0

@evilsoup - К сожалению, нет, я создал несколько записей еще до того, как заметил проблему.Более того, я могу смотреть OGV просто отлично в Linux, так что кажется, что он не полностью испорчен.При этом я буду пытаться выяснить, почему он создает «битые файлы». 20 фев. 132013-02-20 16:24:16

  0

Если я что-то не упустил, то это, вероятно, ошибка или отсутствие поддержки функции ogg в ffmpeg и/или ошибка в recordmydesktop (для этого ffmpeg не было особого случая).[Отчет об ошибке] (https://ffmpeg.org/trac/ffmpeg/) может быть лучшим вариантом здесь.Убедитесь, что вы используете последнюю версию ffmpeg, покажите свою команду ffmpeg и завершите вывод консоли, предоставьте 'sync_test1.ogv' и попробуйте показать проблему, используя только собственные кодировщики (без' lib * ', такие как' libx264'), если возможный. 24 фев. 132013-02-24 22:22:44

  0

Спасибо за предложение @LordNeckbeard Я отправлю сообщение об ошибке и посмотрю, к чему это приведетЕсть идеи, почему AVI работает? 25 фев. 132013-02-25 21:38:40

1

Зачем переходить на OGV, когда ваша последняя загрузка будет на youtube, я могу ошибаться, но вы можете конвертировать в видеокодек x264 с AAC Audio даже на linux и загружать его на youtube, учитывая, что это то, что они предпочитают загружать в любом случае.Вы пытались сделать h264 и загрузить на YouTube вместо файла OGV и посмотреть, если это было проблемой.Потому что я бы поспорил, что если это решит проблему, то вы знаете, что это проблема с загрузкой OGV на YouTube, а если она не решит, это может быть проблема с частотой кадров при интерпретации YouTube или что-то подобное.

В прошлом было много проблем с файлами OGV, загруженными на YouTube.Я не могу себе представить, что это исправлено на 100% даже в этот момент.

http://support.google.com/youtube/bin/answer.py?hl=en&answer=1722171

РЕДАКТИРОВАТЬ: также только что заметил, что ваши оригинальные кадры на скорости 15 кадров в секунду ... это вполне может быть источником проблемы

РЕДАКТИРОВАТЬ 2: Я, казалось, немного неправильно понял вопрос ... в том, что вы начинаете с видео-файла, который является OGV, и я увидел, что вы собираетесь MP4 ... это немного меняет вещи ... .но я собираюсь догадаться, что это как-то связано со звуком 15fps и 22050 Гц ... Я знаю, что частота дискретизации не имеет ничего общего с синхронизацией звука, но из опыта, когда используются нестандартные частоты кадров и частоты дискретизации звука, Я склонен видеть дрейф ... синхронизировать их может быть довольно сложно, но я не могу редактировать их после первоначальной записи с помощью дешевого видеоредактора ...

Хотя программное обеспечение стало лучше справляться с дрейфующим звуком, оно все еще является распространенной проблемой при использовании необычных частот кадров и частоты дискретизации, поскольку ключевые точки синхронизации не являются стандартными и могут округлять ключевые кадры и т. Д.

Вы видите, где написано: «Сломанный файл, ключевой кадр помечен неправильно».это то, что он имеет в виду ...

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

Программные транскодеры не всегда работают должным образом ... потому что настройка протоколов и/или заядлая настройка идут с аппаратным обеспечением для дальнейшего обеспечения возможностей синхронизации и постоянной частоты кадров и т. Д ...

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

РЕДАКТИРОВАТЬ: я смог получить видео для синхронизации с оригиналом с помощью этой команды ffmpeg ... может потребоваться предложение скорости, что я подозревал

ffmpeg -i sync_test1.ogv -strict experimental -pix_fmt yuv420p -r 15 -vcodec h264 -acodec aac sync_test1.mp4

  0

Оригинальный файл - видео Theora и аудио Vorbis в контейнере ogv.Насколько я знаю, Амир Т не перекодирует в этот формат, но когда он пытается перекодировать оригинал с помощью ffmpeg или YouTube, возникает проблема синхронизации. 20 фев. 132013-02-20 01:20:13

  0

Формат ввода - ogv, который выводит gtk-recordmydesktop.Я пытаюсь добраться до чего-либо, кроме ogv (flv и т. Д.). 20 фев. 132013-02-20 02:36:32

  0

Прочитайте мой обновленный ответ ... Я думаю, что это проблема FPS 20 фев. 132013-02-20 02:38:15

  0

Я добавил пример исходного файла.Проблема с синхронизацией * очень * заметна.Мне кажется, что куча кадров выбрана для разных форматов. 20 фев. 132013-02-20 03:08:33

  0

Попробуйте это ... увидеть новый ответ 23 фев. 132013-02-23 00:56:15

+1

Добавление '-r 15' - это то же самое, что и пропуск его, потому что ffmpeg будет наследовать входную частоту кадров по умолчанию, а результирующие выходные файлы, с или без' -r 15', в точности совпадают с ffmpeg из git head (версия N 50285-gad89952).Если он работает для вас, используя более старую версию ffmpeg, это может быть регрессией и должно быть сообщено в [FFmpeg bug tracker] (https://ffmpeg.org/trac/ffmpeg/). 24 фев. 132013-02-24 21:50:30

  0

@ChrisJamesChampeau спасибо за предложение - я попробовал команду, которую вы перечислили, используя статическую сборку ffmpeg. Я получаю слайд 2 в 12 и 3 в 17: https://dl.dropbox.com/u/64693533/sync_test/sync_test1.cjc. mp4 25 фев. 132013-02-25 21:37:07

  0

Ну, FFmpeg, который я использую, является версией MAC по сравнению с вашей версией Linus, но я не уверен, что в вашем FFMPEG должно быть ошибкаВы пытались удалить его и переустановить последнюю версию? 26 фев. 132013-02-26 01:21:10

  0

Да, я пробовал две версии: Ubuntu по умолчанию из apt-get и статическая сборка. 26 фев. 132013-02-26 02:49:47

+1

Я с @LordNeckbeard, вы должны сообщить об этом как об ошибке в FFMPEG 27 фев. 132013-02-27 00:06:24


2

Я боролся с подобной проблемой на Ubuntu 12.04.3 LTS.Я исправил проблему с помощью статической сборки ffmpeg, которая доступна с http://johnvansickle.com/ffmpeg/

+1

Я также попробовал статическую сборку, и она работала несколько лучше.Возможно, ошибка была исправлена, и в этом случае может быть полезно добавить номер версии из статической сборки в ваш ответ? 28 июл. 142014-07-28 23:44:57


0

Попробуйте просто поменять контейнер на avi, а не перекодировать, что, похоже, лучше для youtube:

ffmpeg -i JSP.ogv -vcodec copy -acodec copy JSP.avi