Скопійований файл FLV з FFMPEG не відкриється в будь-якій програмі, крім VLC


1

Я намагаюся додати накладку до файлу FLV, отриманого з YouTube. Вхідний файл становить 4,4 Мб і відтворюється програмою QuickTime, тому у нього, здається, немає проблем.

ffmpeg -i input.flv -vf drawtext="fontfile='arial.ttf':text='hello':fontsize=9" output.flv

Наступний вихід я отримую через напрочуд короткі секунди:

  ffmpeg version 1.2.1 Copyright (c) 2000-2013 the FFmpeg developers
  built on May 15 2013 13:13:12 with Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
  configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-libtheora --enable-libschroedinger --enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libspeex --enable-libfreetype --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/clang --arch=x86_64 --enable-yasm --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid
  libavutil      52. 18.100 / 52. 18.100
  libavcodec     54. 92.100 / 54. 92.100
  libavformat    54. 63.104 / 54. 63.104
  libavdevice    54.  3.103 / 54.  3.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, mov,mp4,m4a,3gp,3g2,mj2, from 'input.flv':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2010-01-31 13:44:29
  Duration: 00:02:20.85, start: 0.000000, bitrate: 249 kb/s
    Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 22050 Hz, mono, fltp, 56 kb/s
    Metadata:
      creation_time   : 2010-01-31 13:44:29
      handler_name    : (C) 2007 Google Inc. v08.13.2007.
    Stream #0:1(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 191 kb/s, 29.84 fps, 29.97 tbr, 30k tbn, 29.97 tbc
    Metadata:
      creation_time   : 2010-01-31 13:44:29
      handler_name    : (C) 2007 Google Inc. v08.13.2007.
File 'output.flv' already exists. Overwrite ? [y/N] y
Output #0, flv, to 'output.flv':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    encoder         : Lavf54.63.104
    Stream #0:0(und): Video: flv1 ([2][0][0][0] / 0x0002), yuv420p, 320x240 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 1k tbn, 29.97 tbc
    Metadata:
      creation_time   : 2010-01-31 13:44:29
      handler_name    : (C) 2007 Google Inc. v08.13.2007.
    Stream #0:1(und): Audio: mp3 ([2][0][0][0] / 0x0002), 22050 Hz, mono, fltp
    Metadata:
      creation_time   : 2010-01-31 13:44:29
      handler_name    : (C) 2007 Google Inc. v08.13.2007.
Stream mapping:
  Stream #0:1 -> #0:0 (mpeg4 -> flv)
  Stream #0:0 -> #0:1 (aac -> libmp3lame)
Press [q] to stop, [?] for help
frame= 4201 fps=1386 q=10.0 Lsize=    4304kB time=00:02:20.85 bitrate= 250.3kbits/s    
video:3603kB audio:550kB subtitle:0 global headers:0kB muxing overhead 3.618454%

Тепер Quick.ime output.flv залишається не відтворюваним, і Flash скаржиться, що аудіокодек не підтримується. Єдина програма, здатна успішно відтворювати її - VLC. Розмір файлів такий самий, як input.flv. Що може бути причиною цього і які варіанти можуть створити відтворювану копію?

ОНОВЛЕННЯ

Обрізаний вихід, отриманий від використання різних кодерів:

ffmpeg -i input.flv -c:v libxvid -c:a copy -q:v 5 output2.flv
...
Stream mapping:
  Stream #0:1 -> #0:0 (mpeg4 -> libxvid)
  Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 4201 fps=303 q=5.0 Lsize=    6597kB time=00:02:20.85 bitrate= 383.7kbits/s    
video:5491kB audio:968kB subtitle:0 global headers:0kB muxing overhead 2.120003%


ffmpeg -i input.flv -c:v mpeg4 -c:a copy -q:v 5 output3.flv
...
Stream mapping:
  Stream #0:1 -> #0:0 (mpeg4 -> mpeg4)
  Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 4201 fps=2523 q=5.0 Lsize=    6852kB time=00:02:20.85 bitrate= 398.5kbits/s    
video:5746kB audio:968kB subtitle:0 global headers:0kB muxing overhead 2.044082%


ffmpeg -i input.flv -c copy outputcopy.flv
...
Stream mapping:
  Stream #0:1 -> #0:0 (copy)
  Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 4201 fps=0.0 q=-1.0 Lsize=    4394kB time=00:02:20.85 bitrate= 255.6kbits/s    
video:3289kB audio:968kB subtitle:0 global headers:0kB muxing overhead 3.216934%

Отримання інформації про будь-який із цих файлів дає мені багато таких помилок (де n - ціле число, що збільшується):

- Stream discovered after head already parsed
- header damaged
- max_analyze_duration 5000000 reached at 5014000 microseconds
- Could not find codec parameters for stream n (Video: mpeg4, yuv420p): unspecified size
  Consider increasing the value for the 'analyzeduration' and 'probesize' options
- decoding for stream n failed

Після цього надходять повідомлення типу:

Stream #0:n: Video: mpeg4, yuv420p, 1k tbr, 1k tbn

Я щойно оновив ffmpeg та його залежності через MacPorts, і мені все ще не пощастило. Це відбувається для кожного файлу FLV, який я спробував з YouTube та інших країн.

Відповіді:


5

Flash Video

Згідно зі специфікацією , Flash Video підтримує лише відео VP-6 та H.264, серед кількох інших. Це означає, що вам доведеться дотримуватися використання flvкодера FFmpeg , або ви переходите на H.264 з libx264кодером - див. Посібник з кодування x264 щодо параметрів, які ви можете використовувати:

ffmpeg -i input.flv … -c:v libx264 output.flv

Тому ви не можете використовувати кодери MPEG-4 Part 2 mpeg4або libxvid, оскільки вони підтримуються лише в програвачах на базі libavformat , що включає в себе що-небудь від телефонів Android до VLC, але, звичайно, не QuickTime.

QuickTime

Що стосується QuickTime, він офіційно не підтримує FLV . На жаль, цілком розумно припустити, що QuickTime не може відтворити всі файли. Встановлення Perian (тепер EOL) повинно змусити його відтворювати деякі файли FLV, але не всі.

Як і прогнозує специфікація, у мене є лише можливість відтворювати файли FLV з flvкодером, як він викликається ffmpeg, який є кодеком Sorenson Spark H.263 та libx264кодером.

Аудіо

FLV підтримує MP3 і AAC, тому я не знаю, що з Flash, який скаржиться на недійсний кодек. Ви можете спробувати кодер AAC:

ffmpeg -i input.flv … -c:a aac -strict experimental output.flv

… Або використовувати будь-який інший кодер AAC, який підтримує ваша збірка.


-c:v mpeg4дає мені подібні результати. -c:v libxvidпотребує більш реальної кількості часу на обробку, але все ще не дає відтворюваного результату. На ffmpeg -i input.flv -c:v copy -c:a copy output.flvжаль, команда прямого копіювання без фільтрів не працює на жаль.
danronmoon

Будь ласка, не вкорочуйте свій вихід з інших команд. Якщо тіло питання занадто довго, приклейте його до картону - це полегшить виявлення проблем. Можливо, у вас є зразок? Чи грає файл, скажімо, у VLC?
slhck

Урізаний вихід для останніх 3 був таким самим, як і перший повний вихід у верхній частині (купа метаданих для вихідного файлу). Гаразд, я повинен визнати, що моя оригінальна команда (як і output3.flv, дякую за це) працює з VLC, але не з чим іншим (Flash каже, що аудіокодек не підтримується). Це гарна новина, але я вважаю, що доцільно очікувати відтворення в інших відеоплеєрах, тому я переформулюю це питання.
danronmoon

Здається, трохи хитро. За допомогою QuickTime вам доведеться використовувати офіційно підтримувані відео кодеки FLV, принаймні згідно з моїми тестами. Ще не вдалося знайти відеопотік MPEG-4 Частина 2 у контейнері FLV з YouTube, однак - здається, я отримую лише закодовані H.264 або Sorenson H.263.
slhck

-c:a aacзмушує ffmpeg зависнути, змушуючи мене закрити і відкрити новий термінал. -c:a mp3як і раніше створює файл, який не можна відтворити за допомогою QT. Ідентифікатор youtube, на якому ґрунтується це питання, є rNp-cj5dEA8. Якщо ви можете дати мені ідентифікатор YT та пов'язану з ним команду, яка працює для вас (оригінал та копіювання обох відтворюваних QT), я міг би спробувати його та перевірити, чи працює він на моїй машині. BTW, який тип збірки ffmpeg у вас є? Починаючи думати, мені, можливо, доведеться зменшити чи перевстановити.
danronmoon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.