LINUX.ORG.RU

FFMPEG. Смена контейнера

 ,


0

1

Добрый день.

Прошу прощения за столь глупый вопрос, но не могу сам понять. Хочу просто перепаковать avi в flv. Без всяких доп. опций.

Данные по видео: ffprobe version 2.2.git Copyright (c) 2007-2014 the FFmpeg developers built on Mar 6 2014 16:59:41 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4) configuration: --prefix=/usr --enable-gpl --enable-nonfree --enable-pthreads --enable-libx264 libavutil 52. 66.101 / 52. 66.101 libavcodec 55. 52.102 / 55. 52.102 libavformat 55. 33.101 / 55. 33.101 libavdevice 55. 11.100 / 55. 11.100 libavfilter 4. 2.100 / 4. 2.100 libswscale 2. 5.101 / 2. 5.101 libswresample 0. 18.100 / 0. 18.100 libpostproc 52. 3.100 / 52. 3.100 Input #0, avi, from 'V+A_wav.avi': Metadata: encoder : Lavf55.33.101 Duration: 00:00:40.04, start: 0.000000, bitrate: 293 kb/s Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p, 1280x1024, 6 fps, 23.98 tbr, 5.99 tbn, 11.99 tbc Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, 1 channels, s16, 128 kb/s

Для смены контейнера использую: ffmpeg -i V+A_wav.avi -ar 11025 -qscale 1 -y video_finale.flv

При этом получаю файл размером 18 МБ, что намного больше исходного (1,5 МБ).

Подскажите, пожалуйста, как правильней всего это сделать?

Спасибо.

Выложи полностью выхлоп ffmpeg (минус собственно процесс кодирования), с информацией об файле который получился.

Потом еще раз ffmpeg -i video_finale.flv

Выложить лучше сюда завёрнутое в тэг [code]твойкод[/code], либо http://pastebin.com/

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

Сам процесс:

# ffmpeg -i V+A_wav.avi -ar 11025 -qscale 1 -y video_finale10.flv
Guessed Channel Layout for  Input Stream #0.1 : mono
Input #0, avi, from 'V+A_wav.avi':
  Metadata:
    encoder         : Lavf55.33.101
  Duration: 00:00:40.04, start: 0.000000, bitrate: 293 kb/s
    Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p, 1280x1024, 6 fps, 23.98 tbr, 5.99 tbn, 11.99 tbc
    Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
Please use -q:a or -q:v, -qscale is ambiguous
[flv @ 0x21e7d80] removing common factors from framerate
Output #0, flv, to 'video_finale10.flv':
  Metadata:
    encoder         : Lavf55.33.101
    Stream #0:0: Video: flv1 (flv) ([2][0][0][0] / 0x0002), yuv420p, 1280x1024, q=2-31, 200 kb/s, 1k tbn, 5.99 tbc
    Stream #0:1: Audio: adpcm_swf ([1][0][0][0] / 0x0001), 11025 Hz, mono, s16, 44 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> flv)
  Stream #0:1 -> #0:1 (pcm_s16le -> adpcm_swf)
Press [q] to stop, [?] for help
frame=  240 fps= 40 q=1.0 Lsize=   18265kB time=00:00:40.37 bitrate=3706.0kbits/s
video:18225kB audio:34kB subtitle:0 data:0 global headers:0kB muxing overhead 0.033637%

Инфа о конечном файле:

Input #0, flv, from 'video_finale10.flv':
  Metadata:
    encoder         : Lavf55.33.101
  Duration: 00:00:40.37, start: 0.000000, bitrate: 3705 kb/s
    Stream #0:0: Video: flv1, yuv420p, 1280x1024, 200 kb/s, 11.99 tbr, 1k tbn, 1k tbc
    Stream #0:1: Audio: adpcm_swf, 11025 Hz, mono, s16, 44 kb/s

classick ()
Ответ на: комментарий от asten

Пробовал, таким образом очень сильно искажается звук (с женского на медленный мужской) + ускоряется проигрывание видео под длительность аудио. Т.е. видео длительностью в 40 сек воспроизводиться в ускоренном темпе за 8 сек.

classick ()
Ответ на: комментарий от madcore

Так, с голосом теперь все хорошо, но вот видео все равно воспроизводиться в ускоренном режиме (равной длительности аудиодорожки)

classick ()
ffmpeg -i input.avi -codec copy output.flv

Для смены контейнера использую: ffmpeg -i V+A_wav.avi -ar 11025 -qscale 1 -y video_finale.flv

Как можно сменить контейнер без перекодирования поменяв sampling и VBR !?

arson ★★★★★ ()
Ответ на: комментарий от arson

вы про то, что нет опций -vcodec, -acodec? ffmpeg подставит дефолтные для медиаконтейнера.

Krieger_Od ★★ ()
Ответ на: комментарий от classick

Реенкод видео лечит проблему.

ffmpeg -i V+A_wav.avi -vcodec libx264 -acodec aac -strict -2 -ar 48000 -y out.flv -loglevel debug

При прогоне видео без реенкода, при проигрывании кажет такое, в большом количестве:

[flv @ 0x7ff644000920] negative cts, previous timestamps might be wrong

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

Krieger_Od ★★ ()
Последнее исправление: Krieger_Od (всего исправлений: 1)
Ответ на: комментарий от Krieger_Od

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

Видео записывалось ffmpeg'ом следующей командой:

ffmpeg -f dshow -r 6000/1001 -i video=screen-capture-recorder -r 6000/1001 -qcomp 0.8 -q:v 5 -pix_fmt yuv420p -threads 0 -an -y -vcodec libx264 -vb 300k outvideo.avi

Вполне допускаю, что я (по неопытности) не совсем корректно указал все аргументы для записи..

classick ()
Ответ на: комментарий от classick

У вас в этом видео неправильные cts. Видимо, они правильные для avi, но неправильные для flv (хотя хрен знает, avi вроде не поддерживает negative timestamps, но, может, как-то случайно -avoid_negative_ts 0 поставился). Решить проблему можно, добавив -fflags +genpts.

А вот то, что аудио копируется и не ругается на неподдерживаемый рейт — баг.

ffmpeg -fflags +genpts -i ~/Downloads/V+A_wav.avi -map 0 -map_metadata 0 -c copy -c:a libmp3lame -ar 11025 output.flv
ValdikSS ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.