Скопированный файл FLV с FFMPEG не откроется ни в одной программе, кроме VLC

2028
danronmoon

Я пытаюсь добавить оверлей к 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% 

Теперь output.flv не воспроизводится QuickTime, и 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 и других источников.

1

1 ответ на вопрос

5
slhck

Флэш-видео

В соответствии со спецификацией, 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: копия output.flv` без фильтров, к сожалению, не работает. danronmoon 11 лет назад 0
Пожалуйста, не обрезайте вывод других команд. Если текст тела вопроса слишком длинный, вставьте его [в область монтажа] (http://paste.ubuntu.com/) - это облегчит выявление проблем. Возможно, у вас есть образец? Файл воспроизводится, скажем, в VLC? slhck 11 лет назад 0
Усеченный вывод для последних 3 был таким же, как первый полный вывод вверху (набор метаданных для исходного файла). ОК, я должен признать, что моя оригинальная команда (так же как output3.flv, спасибо за это) работает с VLC, но не с чем-либо еще (Flash говорит, что аудиокодек не поддерживается). Это хорошая новость, но я думаю, что разумно ожидать воспроизведения в других видеоплеерах, поэтому я переписываю вопрос. danronmoon 11 лет назад 0
Кажется немного хитрым. С QuickTime вам придется использовать официально поддерживаемые видеокодеки FLV, по крайней мере, в соответствии с моими тестами. Однако пока не удалось найти видеопоток MPEG-4 Part 2 в FLV-контейнере с YouTube - кажется, я получаю только H.264 или Sorenson H.263-кодированные. slhck 11 лет назад 0
`-c: aac` вызывает зависание ffmpeg, заставляя меня закрыть и открыть новый терминал. `-c: mp3` по-прежнему создает файл, который невозможно воспроизвести с помощью QT. Идентификатор YouTube, на котором основан этот вопрос - rNp-cj5dEA8. Если бы вы могли дать мне идентификатор YT и соответствующую команду, которая работает для вас (оригинал и копия, воспроизводимая QT), я мог бы попробовать его и посмотреть, работает ли он на моей машине. Кстати, какой тип сборки ffmpeg у вас есть? Начиная думать, мне, возможно, придется понизить или переустановить. danronmoon 11 лет назад 0
Для идентификатора видео, которое вы мне дали, у меня есть только два возможных варианта FLV (в зависимости от того, что показывает youtube-dl), [один с видео H.264 внутри, а другой с Sorenson H.263] (http: // paste. ubuntu.com/5859174/). Оба играбельны в QuickTime. Я не получаю версию MPEG-4 - возможно, вы используете какой-то другой сервис загрузки YouTube, который выполняет транскодирование? Я только что попробовал "обычный" `ffmpeg -i input.flv output.flv`, и он воспроизводится в QuickTime. И на последней `ffmpeg`, скомпилированной из Git, и на 1.2.1. slhck 11 лет назад 0
Я использовал MacTubes для тестирования # 5. Я только что установил youtube-dl и скачал # 5, и я заметил, что размер файла и разрешение отличаются от того, который я скачал с MacTubes, и что видеокодер - flv1, такой же, как у вас. Еще более ошеломляющим является тот факт, что я не могу загрузить файл, загруженный с youtube-dl, для воспроизведения в QT. Поэтому я думаю, что проблема становится слишком локализованной, и со всеми несоответствиями, с которыми я столкнулся, я думаю, что разумный путь - петь похвалы VLC и сосредоточиться на других задачах. Спасибо за вашу помощь. danronmoon 11 лет назад 0
Конечно. Пинг мне в чате или здесь, если вам нужно что-то перепроверить. Мне жаль, что я не мог вам больше помочь, но здесь, похоже, есть много факторов. slhck 11 лет назад 0

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