FFmpeg. Проблемы при кодировании

Вопросы, приемы и проблемы обработки видео

Модератор: Модераторы разделов

Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

FFmpeg. Проблемы при кодировании

Сообщение Mifodix »

Всем добрый вечер!
Решил попробовать использовать ffmpeg для кодирования видео вместо старого-доброго mencoder. Как и следовало ожидать, столкнулся с несколькими проблемами.

1. Как смуксить потоки в другом порядке?
На вход подаю mpeg-видео с 2 аудиодорожками внутри, встроенными субтитрами и 2 внешними файлами субтитров.

Код: Выделить всё

mifodix@linux-yusg:~> ffmpeg -i ashes_dump.mpg -i rus.srt -i ukr.srt
ffmpeg version 0.8.3, Copyright (c) 2000-2011 the FFmpeg developers
  built on Sep  8 2011 19:02:07 with gcc 4.5.1 20101208 [gcc-4_5-branch revision 167585]
  configuration: --shlibdir=/usr/lib64 --prefix=/usr --mandir=/usr/share/man --libdir=/usr/lib64 --enable-shared --disable-static --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libxvid --enable-postproc --enable-gpl --enable-x11grab --extra-cflags='-fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -fPIC -I/usr/include/gsm' --enable-debug --disable-stripping --enable-libgsm --enable-libschroedinger --enable-libdirac --enable-avfilter --enable-libvpx --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libdc1394 --enable-pthreads --enable-librtmp
  libavutil    51.  9. 1 / 51.  9. 1
  libavcodec   53.  7. 0 / 53.  7. 0
  libavformat  53.  4. 0 / 53.  4. 0
  libavdevice  53.  1. 1 / 53.  1. 1
  libavfilter   2. 23. 0 /  2. 23. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
[mpeg @ 0x635660] max_analyze_duration 5000000 reached at 5005000
Input #0, mpeg, from 'ashes_dump.mpg':
  Duration: 01:02:22.33, start: 0.280633, bitrate: 7745 kb/s
    Stream #0.0[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x480 [PAR 32:27 DAR 16:9], 7000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x80]: Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s
    Stream #0.2[0x81]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
    Stream #0.3[0x21]: Subtitle: dvdsub
[srt @ 0x63d340] Estimating duration from bitrate, this may be inaccurate
Input #1, srt, from 'rus.srt':
  Duration: N/A, start: 6.053000, bitrate: N/A
    Stream #1.0: Subtitle: srt
[srt @ 0x6469c0] Estimating duration from bitrate, this may be inaccurate
Input #2, srt, from 'ukr.srt':
  Duration: N/A, start: 5.252000, bitrate: N/A
    Stream #2.0: Subtitle: srt
At least one output file must be specified

На выходе должен получится mkv с h264-видео, двумя аудиодорожками из исходного mpeg и 2 субтитрами из rus.srt и ukr.srt. С помощью ключа -map указываю какие дорожки/потоки нужно взять и откуда. Но вот в чём проблема: дорожки в выходном файле располагаются в порядке добавления их через ключ -map, т. е. в выходном файле дорожка с субтитрами встаёт между аудиодорожками:

Код: Выделить всё

mifodix@linux-yusg:~> ffmpeg -i ashes_dump.mpg -i rus.srt -i ukr.srt -map 0:0 -vlang ENG -vcodec libx264 -x264opts threads=auto:psnr=1:ssim=1:b_adapt=2:deblock:cabac=1:chroma_me=1:subq=9:partitions=all:8x8dct=1:me=umh:nofast_pskip=1:nodct_decimate=1:me_range=32:trellis=2:frameref=16:bframes=16:b_pyramid=normal:weight_b=1:mixed_refs=1:direct_pred=auto:keyint=750:keyint_min=25:aq_mode=1:aq_strength=1.0:psy_rd=1.0,0.0:bitrate=2000:pass=1 -map 0:1 -alang ENG -acodec copy -map 1.0 -slang RUS -scodec copy -y res.mkv -map 0.2 -alang ENG -acodec copy -newaudio -map 2:0 -slang UKR -scodec copy -newsubtitle
ffmpeg version 0.8.3, Copyright (c) 2000-2011 the FFmpeg developers
  built on Sep  8 2011 19:02:07 with gcc 4.5.1 20101208 [gcc-4_5-branch revision 167585]
  configuration: --shlibdir=/usr/lib64 --prefix=/usr --mandir=/usr/share/man --libdir=/usr/lib64 --enable-shared --disable-static --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libxvid --enable-postproc --enable-gpl --enable-x11grab --extra-cflags='-fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -fPIC -I/usr/include/gsm' --enable-debug --disable-stripping --enable-libgsm --enable-libschroedinger --enable-libdirac --enable-avfilter --enable-libvpx --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libdc1394 --enable-pthreads --enable-librtmp
  libavutil    51.  9. 1 / 51.  9. 1
  libavcodec   53.  7. 0 / 53.  7. 0
  libavformat  53.  4. 0 / 53.  4. 0
  libavdevice  53.  1. 1 / 53.  1. 1
  libavfilter   2. 23. 0 /  2. 23. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
[mpeg @ 0x635660] max_analyze_duration 5000000 reached at 5005000
Input #0, mpeg, from 'ashes_dump.mpg':
  Duration: 01:02:22.33, start: 0.280633, bitrate: 7745 kb/s
    Stream #0.0[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x480 [PAR 32:27 DAR 16:9], 7000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x80]: Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s
    Stream #0.2[0x81]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
    Stream #0.3[0x21]: Subtitle: dvdsub
[srt @ 0x63d340] Estimating duration from bitrate, this may be inaccurate
Input #1, srt, from 'rus.srt':
  Duration: N/A, start: 6.053000, bitrate: N/A
    Stream #1.0: Subtitle: srt
[srt @ 0x6469c0] Estimating duration from bitrate, this may be inaccurate
Input #2, srt, from 'ukr.srt':
  Duration: N/A, start: 5.252000, bitrate: N/A
    Stream #2.0: Subtitle: srt
[buffer @ 0xb87020] w:720 h:480 pixfmt:yuv420p tb:1/1000000 sar:32/27 sws_param:
[libx264 @ 0x634460] Default settings detected, using medium profile
[libx264 @ 0x634460] using SAR=32/27
[libx264 @ 0x634460] using cpu capabilities: MMX2 SSE2Fast FastShuffle SSEMisalign LZCNT
[libx264 @ 0x634460] profile Main, level 3.0
[libx264 @ 0x634460] 264 - core 116 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x1:0 me=dia subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=1 sliced_threads=0 nr=0 decimate=0 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=16 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=750 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=2000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to 'res.mkv':
  Metadata:
    encoder         : Lavf53.4.0
    Stream #0.0(ENG): Video: libx264, yuv420p, 720x480 [PAR 32:27 DAR 16:9], q=2-31, 2000 kb/s, 1k tbn, 29.97 tbc
    Stream #0.1(ENG): Audio: ac3, 48000 Hz, stereo, 192 kb/s
    Stream #0.2(RUS): Subtitle: srt
    Stream #0.3(ENG): Audio: ac3, 48000 Hz, 5.1, 448 kb/s
    Stream #0.4(UKR): Subtitle: srt
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
  Stream #1.0 -> #0.2
  Stream #0.2 -> #0.3
  Stream #2.0 -> #0.4

Как поменять порядок?

2. Стоит ли использовать ключ -x264opts вместо того, чтобы указывать опции через ключи самого ffmpeg? Правда ffmpeg поддерживает далеко не все опции x264. Я указываю все опции кодирования (в том числе и битрейт, и номер прохода) видео через x264opts. Глюков от этого не будет?:)

3. Насколько я понял, ffmpeg не может использовать в качестве источника папку с DVD. Или я не прав?

4. Есть какие-нибудь особенности кодирования видео в h264 у ffmpeg по сравнению с mencoder?
Спасибо сказали:

Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: FFmpeg. Проблемы при кодировании

Сообщение alkesta »

Mifodix писал(а):
11.09.2011 14:43
Как поменять порядок?

Сам ведь ответил на свой вопрос:
Mifodix писал(а):
11.09.2011 14:43
дорожки в выходном файле располагаются в порядке добавления их через ключ -map

Т.е. укажи нужную последовательность через -map.

Mifodix писал(а):
11.09.2011 14:43
2. Стоит ли использовать ключ -x264opts вместо того, чтобы указывать опции через ключи самого ffmpeg?

Опять сам задаешь и сам отвечаешь:
Mifodix писал(а):
11.09.2011 14:43
ffmpeg поддерживает далеко не все опции x264

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


Mifodix писал(а):
11.09.2011 14:43
3. Насколько я понял, ffmpeg не может использовать в качестве источника папку с DVD. Или я не прав?

В каталоге с DVD содержатся vob-файлы. Проблема на два уровня ниже перейти? :)

Mifodix писал(а):
11.09.2011 14:43
4. Есть какие-нибудь особенности кодирования видео в h264 у ffmpeg по сравнению с mencoder?

Обе используют одну библиотеку, по идее не должно быть.
Спасибо сказали:

Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: FFmpeg. Проблемы при кодировании

Сообщение Mifodix »

alkesta писал(а):
12.09.2011 12:23
Mifodix писал(а):
11.09.2011 14:43
Как поменять порядок?

Сам ведь ответил на свой вопрос:
Mifodix писал(а):
11.09.2011 14:43
дорожки в выходном файле располагаются в порядке добавления их через ключ -map

Т.е. укажи нужную последовательность через -map.

Если б всё было так просто, я б не спрашивал:) В примере, описанном выше, я не могу указать в качестве 3 дорожки аудиодорожку, так как ffmpeg упорно хочет видеть на 3 месте субтитры:

Код: Выделить всё

Output #0, matroska, to 'res.mkv':
    Stream #0.0: Video: mpeg4, q=2-31, 200 kb/s, 90k tbn
    Stream #0.1: Audio: mp2, 5.1, s16, 64 kb/s
    Stream #0.2: Subtitle: [0][0][0][0] / 0x0000, 64 kb/s
    Stream #0.3(ENG): Audio: [0][0][0][0] / 0x0000, 0 channels, 64 kb/s
    Stream #0.4(UKR): Subtitle: [0][0][0][0] / 0x0000, 64 kb/s
Codec type mismatch for mapping #0.2 -> #0.2

В каталоге с DVD содержатся vob-файлы. Проблема на два уровня ниже перейти?

А как-нибудь "склеить" файлы .vob в один файл, например, mpeg, как это можно легко сделать тем же mplayer'ом через -dumpstream -dumpfile, нельзя?

И возникла ещё одна проблема с ffmpeg. Почему-то кодек x264 упорно игнорирует опции, указанные через -x264opts

Код: Выделить всё

[buffer @ 0x636da0] w:720 h:480 pixfmt:yuv420p tb:1/1000000 sar:32/27 sws_param:
[libx264 @ 0x634460] Default settings detected, using medium profile
[libx264 @ 0x634460] using SAR=32/27
[libx264 @ 0x634460] using cpu capabilities: MMX2 SSE2Fast FastShuffle SSEMisalign LZCNT
[libx264 @ 0x634460] profile Main, level 3.0
[libx264 @ 0x634460] 264 - core 116 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x1:0 me=dia subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 sliced_threads=0 nr=0 decimate=0 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=16 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=750 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=2000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to '/dev/null':
Спасибо сказали:

Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: FFmpeg. Проблемы при кодировании

Сообщение alkesta »

Mifodix писал(а):
12.09.2011 20:15
В примере, описанном выше, я не могу указать в качестве 3 дорожки аудиодорожку, так как ffmpeg упорно хочет видеть на 3 месте субтитры:

А порядок потоков на что-то влияет? Т.е. почему нужно аудио именно на 3-м месте?
Посмотри "ffmpeg -i res.mkv", может таким образом ffmpeg помечает дефолтные потоки..
Mifodix писал(а):
12.09.2011 20:15
А как-нибудь "склеить" файлы .vob в один файл, например, mpeg, как это можно легко сделать тем же mplayer'ом через -dumpstream -dumpfile, нельзя?

А "cat 1.VOB 2.VOB > all.VOB" ?
Mifodix писал(а):
12.09.2011 20:15
Почему-то кодек x264 упорно игнорирует опции, указанные через -x264opts

А откуда эти опции? Под какое устройство? Может наворотил, что-то противоречивое. Попробуй вывести на уровень ffmpeg - threads (-threads), pass (-pass), bitrate (-b), а в -x264opts укажи level=__:vbv-maxrate=____:vbv-bufsize=____ в зависимости от целевого-устройства + ключевые профайловые значения, остальное поумолчанию (Levels).
Спасибо сказали:

Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: FFmpeg. Проблемы при кодировании

Сообщение Mifodix »

alkesta писал(а):
13.09.2011 11:21
А порядок потоков на что-то влияет? Т.е. почему нужно аудио именно на 3-м месте?
Посмотри "ffmpeg -i res.mkv", может таким образом ffmpeg помечает дефолтные потоки..

Если пихнуть вторую аудиодорожку между субтитрами, то я не уверен, что все плееры будут адекватно воспроизводить её. Как понять дефолтные потоки? Отличная статья есть про мапинг потоков (даже на русском!):
Как я уже писал, ffmpeg определяет количество дорожек выходного файла по формату файла и типам дорожек исходных файлов - по умолчанию их будет всего по одной каждого типа!

Видимо раз на входе есть видео, аудио и субтитры, ffmpeg хочет чтобы первые 3 дорожки тоже были типов видео, аудио, субтитры. Глупо конечно, но скорее всего впихнуть ещё одно аудио в эти 3 дорожки не получится.
А "cat 1.VOB 2.VOB > all.VOB" ?

Просто и элегантно:)
А откуда эти опции? Под какое устройство? Может наворотил, что-то противоречивое. Попробуй вывести на уровень ffmpeg - threads (-threads), pass (-pass), bitrate (-b), а в -x264opts укажи level=__:vbv-maxrate=____:vbv-bufsize=____ в зависимости от целевого-устройства + ключевые профайловые значения, остальное поумолчанию (Levels).

Точно такие же опции я использовал в mencoder, один в один. Причём часть параметров (bitrate, keyint, keyint_min) нормально воспринимаются, а часть (threads, 8x8dct=1, trellis=2, me=umh и т. д. ) нет.

Пришёл к выводу, что некоторые опции x264opts каким-то хреном перекрываются main профилем, так что хоть выноси их за пределы x264opts, хоть не выноси - результат один.
Спасибо сказали:

Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: FFmpeg. Проблемы при кодировании

Сообщение alkesta »

Mifodix писал(а):
13.09.2011 13:13
Если пихнуть вторую аудиодорожку между субтитрами, то я не уверен, что все плееры будут адекватно воспроизводить её.

Я думаю, что это надуманная неуверенность. Все нормально будет работать.
Mifodix писал(а):
13.09.2011 13:13
Как понять дефолтные потоки?

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

Код: Выделить всё

    Stream #0.0(eng): Video: h264 (High), yuv420p, 1024x576, PAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Stream #0.1(eng): Audio: aac, 48000 Hz, 5.1, s16 (default)
    Stream #0.2(rus): Subtitle: [0][0][0][0] / 0x0000 (default)
    Stream #0.3(ukr): Subtitle: [0][0][0][0] / 0x0000

Mifodix писал(а):
13.09.2011 13:13
Видимо раз на входе есть видео, аудио и субтитры, ffmpeg хочет чтобы первые 3 дорожки тоже были типов видео, аудио, субтитры. Глупо конечно, но скорее всего впихнуть ещё одно аудио в эти 3 дорожки не получится.

На самом деле (я попробовал) даже если нет в первом файле субтитров, ffmpeg хочет субтитры на третьем месте. Так что я думаю это связано именно с умолчательными потоками. Т.е. если есть видео, аудио и субтитры, то они как дефолтные потоки должны быть на первых трех позициях.
Mifodix писал(а):
13.09.2011 13:13
Причём часть параметров (bitrate, keyint, keyint_min) нормально воспринимаются, а часть (threads, 8x8dct=1, trellis=2, me=umh и т. д. ) нет.

Не понятно кем воспринимаются и чем это выражено... ?
Спасибо сказали:

Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: FFmpeg. Проблемы при кодировании

Сообщение Mifodix »

alkesta писал(а):
13.09.2011 13:53
Mifodix писал(а):
13.09.2011 13:13
Как понять дефолтные потоки?

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

Код: Выделить всё

    Stream #0.0(eng): Video: h264 (High), yuv420p, 1024x576, PAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Stream #0.1(eng): Audio: aac, 48000 Hz, 5.1, s16 (default)
    Stream #0.2(rus): Subtitle: [0][0][0][0] / 0x0000 (default)
    Stream #0.3(ukr): Subtitle: [0][0][0][0] / 0x0000


И как указать ffmpeg сделать тот или иной поток по умолчанию?
Не понятно кем воспринимаются и чем это выражено... ?

Например параметр bitrate, если я укажу в x264opts или как параметр самого ffmpeg - без разницы, выходной файл будет кодироваться с этим битрейтом. А вот если взять параметр trellis=1, то хоть указывай его в x264opts, хоть в ffmpeg - будет использовано значение 0, взятое из профиля main:

Код: Выделить всё

[libx264 @ 0x634700] Default settings detected, using medium profile
[libx264 @ 0x634700] using SAR=32/27
[libx264 @ 0x634700] using cpu capabilities: MMX2 SSE2Fast FastShuffle SSEMisalign LZCNT
[libx264 @ 0x634700] profile Main, level 3.0
[libx264 @ 0x634700] 264 - core 116 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x1:0 me=dia subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 sliced_threads=0 nr=0 decimate=0 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=16 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=750 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=1500 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to 'res.mkv':

trellis=0
Спасибо сказали:

Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: FFmpeg. Проблемы при кодировании

Сообщение alkesta »

Mifodix писал(а):
13.09.2011 14:05
И как указать ffmpeg сделать тот или иной поток по умолчанию?

Судя по всему именно разместив их на 1, 2 и 3 позиции

Mifodix писал(а):
13.09.2011 14:05
Например параметр bitrate, если я укажу в x264opts или как параметр самого ffmpeg - без разницы, выходной файл будет кодироваться с этим битрейтом. А вот если взять параметр trellis=1, то хоть указывай его в x264opts, хоть в ffmpeg - будет использовано значение 0, взятое из профиля main

Теперь понял. А если воспользоваться пресетами ffmpeg? http://ffmpeg.org/ffmpeg-doc.html#SEC13

UPDATE
Собственно вот в чем причина:
Используя -pass 1 применяются следующие настройки:
--ref 1
--no-8x8dct
--partitions i4x4 (if originally enabled, else none)
--me dia
--subme MIN( 2, subme )
--trellis 0
http://mewiki.project357.com/wiki/X264_Set...#slow-firstpass
Спасибо сказали:

Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: FFmpeg. Проблемы при кодировании

Сообщение Mifodix »

Обманул я ffmpeg:))) Поставил ключ -sn, заставляющий игнорировать субтитры в исходниках, а новые субтитры прикрутил через -newsubtitle. В итоге получилось так (упрощённо):

Код: Выделить всё

ffmpeg -i ashes_dump.mpg -i rus.srt -i ukr.srt -sn -y res.mkv -map 0.0 -vlang ENG -vcodec copy -map 0.1 -alang ENG -acodec copy -map 0.2 -alang ENG -acodec copy -newaudio -map 1.0 -slang RUS -scodec copy -newsubtitle -map 2.0 -slang UKR -scodec copy -newsubtitle
ffmpeg version 0.8.3, Copyright (c) 2000-2011 the FFmpeg developers
...
[mpeg @ 0x635660] max_analyze_duration 5000000 reached at 5005000
Input #0, mpeg, from 'ashes_dump.mpg':
  Duration: 01:02:22.33, start: 0.280633, bitrate: 7745 kb/s
    Stream #0.0[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x480 [PAR 32:27 DAR 16:9], 7000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x80]: Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s
    Stream #0.2[0x81]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
    Stream #0.3[0x21]: Subtitle: dvdsub
[srt @ 0x63d340] Estimating duration from bitrate, this may be inaccurate
Input #1, srt, from 'rus.srt':
  Duration: N/A, start: 6.053000, bitrate: N/A
    Stream #1.0: Subtitle: srt
[srt @ 0x6469c0] Estimating duration from bitrate, this may be inaccurate
Input #2, srt, from 'ukr.srt':
  Duration: N/A, start: 5.252000, bitrate: N/A
    Stream #2.0: Subtitle: srt
[buffer @ 0x650c20] w:720 h:480 pixfmt:yuv420p tb:1/1000000 sar:32/27 sws_param:
Output #0, matroska, to 'res.mkv':
  Metadata:
    encoder         : Lavf53.4.0
    Stream #0.0: Video: mpeg4, yuv420p, 720x480 [PAR 32:27 DAR 16:9], q=2-31, 200 kb/s, 1k tbn, 29.97 tbc
    Stream #0.1: Audio: mp2, 48000 Hz, 2 channels, s16, 64 kb/s
    Stream #0.2(ENG): Audio: ac3, 48000 Hz, 5.1, 448 kb/s
    Stream #0.3(RUS): Subtitle: srt
    Stream #0.4(UKR): Subtitle: srt
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
  Stream #0.2 -> #0.2
  Stream #1.0 -> #0.3
  Stream #2.0 -> #0.4

Получилось что надо: видео, аудио 1, аудио 2, субтитры 1, субтитры 2. Также можно проигнорировать в исходниках аудио -an и видео -vn.
ПОПРАВКА:
Если отключить только одни субтитры, то у потоков выходного файла будет нарушен формат (как в моём примере видеодорожка стала mpeg4, а 1-ая аудио - mp2). Поэтому надо отключать вообще всё! -vn -an -sn и добавлять все дорожки через -newvideo, -newaudio и -newsubtitle, тогда формат будет соблюден. Возможно это просто глюк моей версии ffmpeg.

alkesta писал(а):
13.09.2011 14:15
Mifodix писал(а):
13.09.2011 14:05
Например параметр bitrate, если я укажу в x264opts или как параметр самого ffmpeg - без разницы, выходной файл будет кодироваться с этим битрейтом. А вот если взять параметр trellis=1, то хоть указывай его в x264opts, хоть в ffmpeg - будет использовано значение 0, взятое из профиля main

Теперь понял. А если воспользоваться пресетами ffmpeg? http://ffmpeg.org/ffmpeg-doc.html#SEC13

Как в пресете записывать опции -x264opts?
Спасибо сказали:

Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: FFmpeg. Проблемы при кодировании

Сообщение Mifodix »

alkesta писал(а):
13.09.2011 14:15
UPDATE
Собственно вот в чем причина:
Используя -pass 1 применяются следующие настройки:
--ref 1
--no-8x8dct
--partitions i4x4 (if originally enabled, else none)
--me dia
--subme MIN( 2, subme )
--trellis 0
http://mewiki.project357.com/wiki/X264_Set...#slow-firstpass

Вот оно как! Т. е. когда я использовал mencoder, он тоже на 1-ом проходе использовал другие параметры? Интересно:)
Спасибо сказали:

Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: FFmpeg. Проблемы при кодировании

Сообщение alkesta »

Mifodix писал(а):
13.09.2011 14:30
Обманул я ffmpeg:)))

Элегантно.
Спасибо сказали:

Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: FFmpeg. Проблемы при кодировании

Сообщение Mifodix »

А как обстоят дела у ffmpeg с трёхпроходным кодированием? Или это всё остаётся на совести выбранного видеокодека?
Спасибо сказали:

Аватара пользователя
sspphheerraa
Сообщения: 1375
ОС: Gentoo

Re: FFmpeg. Проблемы при кодировании

Сообщение sspphheerraa »

А не проще ли для сабжа mkvtoolnix использовать? Сделать сжатие видео/аудио через ffmpeg, а в матрешку муксить уже родной тулзой (там и порядок без проблем можно указать и теги по каждому потоку прописать и многое другое)
Sspphheerraa
Спасибо сказали:

Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: FFmpeg. Проблемы при кодировании

Сообщение Mifodix »

sspphheerraa писал(а):
13.09.2011 17:02
А не проще ли для сабжа mkvtoolnix использовать? Сделать сжатие видео/аудио через ffmpeg, а в матрешку муксить уже родной тулзой (там и порядок без проблем можно указать и теги по каждому потоку прописать и многое другое)

Зачем эти лишние телодвижения?:) Если всё сразу можно сделать при помощи ffmpeg. Да и в той статье, на которую я приводил ссылку, автор утверждает следующее:
Тут следует сделать небольшое отступление, почему нельзя воспользоваться выделенным решением с графическим интерфейсом, специально разработанным для работы с MKV-контенером, таким как MKV merge (GUI)? Именно так раньше я и делал. Но оказалось, что ffmpeg умеет делать больше. В частности, видеофайлы со звуковой FLAC-дорожкой гораздо лучше перематываются в видеопроигрывателе, если они изначально собраны с помощью ffmpeg. Кроме того, промежуточные операции над отдельными дорожками могут быть излишними, особенно если все задачи можно поручить разом ffmpeg.
Спасибо сказали:

Аватара пользователя
sspphheerraa
Сообщения: 1375
ОС: Gentoo

Re: FFmpeg. Проблемы при кодировании

Сообщение sspphheerraa »

Странное заявление... больше ничего сказать не могу :)
Sspphheerraa
Спасибо сказали:

Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: FFmpeg. Проблемы при кодировании

Сообщение Mifodix »

А тем временем злоключения с ffmpeg продолжаются!:)
Если указать в x264opts количество потоков threads, то оно будет проигнорировано и вместо этого мы получим всего 1 поток. Надо указывать непосредственно как ключ ffmpeg -threads.

Также вопрос по поводу трёхпроходного кодирования x264. Правильно ли я понимаю, что
1-ый проход - это pass 1
2-ой или сколько угодно промежуточных - это pass 3
3-ий или финальный проход - это pass 2?

Сам себе отвечу на последний вопрос: pass 2 - это запись без обновления статистики, а pass 3 - запись с обновлением статистики. Так что варианты pass 1, pass 3, pass 3 и pass 1, pass 3, pass 2 - фактически одно и тоже для конечного файла.
Спасибо сказали:

Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: FFmpeg. Проблемы при кодировании

Сообщение Mifodix »

Так...ffmpeg не воспринимает параметр -pass 3. Значение должно быть или 1, или 2. Фактически ffmpeg не может сделать 3-проходное кодирование. Когда я задаю параметр pass=3 после x264opts, ffmpeg начинает кодировать со следующими параметрами:

Код: Выделить всё

libx264 @ 0x6350c0] 264 - core 116 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=16 deblock=1:0:0 analyse=0x3:0x133 me=umh subme=9 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=32 chroma_me=1 trellis=2 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=-2 threads=6 sliced_threads=0 nr=0 decimate=0 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=16 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=750 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=2pass mbtree=1 bitrate=2000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 cplxblur=20.0 qblur=0.5 ip_ratio=1.40 aq=1:1.00

rc=2pass...FFmpeg не позволяет кодеру x264 использовать 3 прохода что ли? Я озадачен..
Спасибо сказали:

Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: FFmpeg. Проблемы при кодировании

Сообщение alkesta »

Ну так libx264 не предусматривает 3-хпроходное кодирование, соответственно и ffmpeg тоже, потому как смысла в 3-хпроходном кодировании ровно ноль.
Спасибо сказали:

Аватара пользователя
sspphheerraa
Сообщения: 1375
ОС: Gentoo

Re: FFmpeg. Проблемы при кодировании

Сообщение sspphheerraa »

Mifodix, прочитайте тему Грамотный кодинг видео в Linux
то о чем вы пишете уже давно обсуждалось
Sspphheerraa
Спасибо сказали:

Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: FFmpeg. Проблемы при кодировании

Сообщение Mifodix »

Так. По тому, что удалось нагуглить, ясно, что ffmpeg раньше поддерживал трехпроходное кодирование. Раньше я думал, что 3 прохода дают хоть и небольшой, но всё-таки прирост в качестве. Уважаемые sspphheerraa и alkesta развейте, пожалуйста, мои заблуждения:)
Спасибо сказали:

Аватара пользователя
Rodegast
Сообщения: 337
ОС: Linux

Re: FFmpeg. Проблемы при кодировании

Сообщение Rodegast »

> А "cat 1.VOB 2.VOB > all.VOB" ?
> Просто и элегантно

А на самом деле глупо.
Спасибо сказали:

Аватара пользователя
Rodegast
Сообщения: 337
ОС: Linux

Re: FFmpeg. Проблемы при кодировании

Сообщение Rodegast »

> Сам себе отвечу на последний вопрос: pass 2 - это запись без обновления статистики, а pass 3 - запись с обновлением статистики. Так что варианты pass 1, pass 3, pass 3 и pass 1, pass 3, pass 2 - фактически одно и тоже для конечного файла.

По моему тут всё очевидно:
2 прохода: pass 1, pass 2
3 прохода: pass 1, pass 2 pass 3
более 3 проходов: pass 1, pass 2 pass 3 pass 3.....
Спасибо сказали:

Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: FFmpeg. Проблемы при кодировании

Сообщение alkesta »

Rodegast писал(а):
15.09.2011 04:17
> А "cat 1.VOB 2.VOB > all.VOB" ?
> Просто и элегантно
А на самом деле глупо.

А аргументов не будет?

Посмотрел x264 Help, 3 прохода действительно все таки предусмотрены. Тем не менее, смысла в >2 проходах не вижу, гораздо эфективнее использовать пресеты типа slower_firstpass.
Судя по Help:
(http://www.x264.info/x264-fullhelp/) писал(а):-pass <1|2|3> Enable multipass ratecontrol
- 1: First pass, creates stats file
- 2: Last pass, does not overwrite stats file
- 3: Nth pass, overwrites stats file

- pass 1: начальный сбор статистики
- pass 3: обновление статистики
- pass 2: финальный проход без обновления статистики
Соотвественно, по-моему тут какой-то бред написан:
Rodegast писал(а):
15.09.2011 04:34
3 прохода: pass 1, pass 2 pass 3
более 3 проходов: pass 1, pass 2 pass 3 pass 3.....

Аргументирую.
3 прохода по-твойму:
- pass 1: начальный сбор статистики
- pass 2: финальный проход без обновления статистики
- pass 3: обновление статистики
Аналогично и "более 3 проходов: pass 1, pass 2 pass 3 pass 3....."
Очевидно, что должно быть:
3 прохода: pass 1, pass 3 pass 2
более 3 проходов: pass 1, pass 3, ... pass 3, pass 2
Спасибо сказали:

Аватара пользователя
Rodegast
Сообщения: 337
ОС: Linux

Re: FFmpeg. Проблемы при кодировании

Сообщение Rodegast »

> А аргументов не будет?

Полностью похереное время в файле для тебя не аргумент?

С проходами я действительно немного напутал. 3 прохода и более проходов это: pass 1, pass 3 pass 3....pass 3
Спасибо сказали:

Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: FFmpeg. Проблемы при кодировании

Сообщение alkesta »

Rodegast писал(а):
15.09.2011 15:29
Полностью похереное время в файле для тебя не аргумент?

В чем это выражается?
Ни разу не было никаких проблем.
Что такое VOB`ы? Это один большой файл порезанный на куски размером 1024. По этому cat - это то, что доктор прописал.
Спасибо сказали:

Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: FFmpeg. Проблемы при кодировании

Сообщение Mifodix »

Rodegast писал(а):
15.09.2011 15:29
> А аргументов не будет?

Полностью похереное время в файле для тебя не аргумент?

Давным-давно я так авишки склеивал, там действительно время нарушалось. С VOB-ами таких проблем вроде как нет.

Лучше б вы мне рассказали про бесполезность 3 проходов и почему это ffmpeg внезапно перестал поодерживать 3 прохода даже на уровне опуций кодека.
Спасибо сказали:

Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: FFmpeg. Проблемы при кодировании

Сообщение alkesta »

Mifodix писал(а):
15.09.2011 15:43
Лучше б вы мне рассказали про бесполезность 3 проходов.

То, что ffmpeg избавился от этого - лучшее подтверждение бесполезности 3-х проходов.
Спасибо сказали:

Аватара пользователя
Mifodix
Сообщения: 373
ОС: Fedora 17 x86_64

Re: FFmpeg. Проблемы при кодировании

Сообщение Mifodix »

alkesta писал(а):
15.09.2011 15:46
Mifodix писал(а):
15.09.2011 15:43
Лучше б вы мне рассказали про бесполезность 3 проходов.

То, что ffmpeg избавился от этого - лучшее подтверждение бесполезности 3-х проходов.

То, что x264 не избавился от этого - лучшее подтверждение полезности 3-х проходов:)
А как же цифры, сравнения?
Спасибо сказали:

Аватара пользователя
Rodegast
Сообщения: 337
ОС: Linux

Re: FFmpeg. Проблемы при кодировании

Сообщение Rodegast »

> Что такое VOB`ы? Это один большой файл порезанный на куски размером 1024. По этому cat - это то, что доктор прописал.

А вас не смущает то что на диске может быть несколько фильмов каждый из которых имеет свою временную шкалу?

> В чем это выражается?

Ну вот к примеру совсем недавно про это тема была: ffmpeg вырезание куска фильма из .VOB и запись в .avi
Спасибо сказали:

Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: FFmpeg. Проблемы при кодировании

Сообщение alkesta »

Rodegast писал(а):
15.09.2011 16:23
Ну вот к примеру совсем недавно про это тема была: ffmpeg вырезание куска фильма из .VOB и запись в .avi

Что-то не виду относящегося к теме склейки.. там кодирование куска из VOB-файла
Спасибо сказали: