ffmpeg przesunięcie odcienia w tiff

0

Korzystam z tych poleceń, aby wygenerować wyjście TIFF i JPEG na podstawie tego samego wejściowego pliku MPEG2

ffmpeg -ss 14 -i '../test/test-in.mpg' -q: v 3 -vframes 1 -aspect 4: 3 -vf "crop = 22/23 * in_w: 22/23 * in_h, yadif, scale = 736: 539, pad = 736: 552: 0: 7 "'../test/test-out.jpg'

i

ffmpeg -ss 14 -i '../test/test-in.mpg' -vframes 1 -aspect 445: 326 -vf "crop = 22/23 * in_w: 22/23 * in_h, yadif, skala = 720: 527 „” ../unit-test/out.tiff ”

tiffy są bardzo fioletowe / różowawe. JPEG są w porządku.

P: Co może powodować przesunięcie koloru na wyjściu TIFF i jak mogę temu zapobiec?

Dane wyjściowe wiersza polecenia

ffmpeg -ss 15 -i '../test/test.mpg' -vframes 1 -aspect 4:3 -vf "crop=21/23*in_w:21/23*in_h ,yadif,scale=720:540" -vstats_file /home/factory/log/20140630143715-mpg2stills.log '../test/test.tiff' 

ffmpeg version 1.2.4 Copyright (c) 2000-2013 the FFmpeg developers
  built on Oct 26 2013 23:16:12 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
  configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --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
[mpeg @ 0xa4a1440] max_analyze_duration 5000000 reached at 5016000 microseconds
Input #0, mpeg, from '../test/test.mpg':
  Duration: 00:00:30.62, start: 0.384000, bitrate: 7746 kb/s
    Stream #0:0[0x1c0]: Audio: mp2, 48000 Hz, stereo, s16p, 384 kb/s
    Stream #0:1[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x576 [SAR 16:15 DAR 4:3], 25 fps, 25 tbr, 90k tbn, 50 tbc
Output #0, image2, to '../test/test.tiff':
  Metadata:
    encoder         : Lavf54.63.104
    Stream #0:0: Video: tiff, yuv420p, 720x540 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 25 tbc
Stream mapping:
  Stream #0:1 -> #0:0 (mpeg2video -> tiff)
Press [q] to stop, [?] for help
[mpeg2video @ 0xa4a3060] warning: first frame is no keyframe
frame=    1 fps=0.0 q=0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A    
video:563kB audio:0kB subtitle:0 global headers:0kB muxing overhead -100.003817%

przycięta wersja wejścia mpg (przyciągnięta przez VLC)

przycięta wersja wejścia mpg

przycięta wersja wyjściowego tiffa (przekonwertowana do png do przesłania)

przycięta wersja wyjściowego tiff

pospolity
źródło
To może być błąd. Czy możesz spróbować ponownie z nowszą wersją? Możesz pobrać kompilację statyczną ze strony ffmpeg.org/download.html
slhck
Nie jest to takie proste, jak na jego konfigurację. Spróbowałbym, jeśli naprawdę uważam, że to błąd :-) Czy możesz mi polecić coś, co sprawia, że ​​tak myślisz? Widziałeś to wcześniej lub czytałeś o tym?
commonpike
Kompilacje statyczne można uruchamiać bezpośrednio, bez potrzeby jakiejkolwiek konkretnej instalacji. Po prostu uruchom plik bezpośrednio z katalogu pobierania. Nie zastępuje żadnej istniejącej instalacji ani nie powoduje problemów ze zgodnością. Doświadczenie mówi mi, że wiele problemów z ffmpeg można rozwiązać, po prostu aktualizując do najnowszej wersji. To nie byłby pierwszy raz, kiedy wystąpił błąd z przyciemnionym wyjściem . Jeśli najnowsza wersja też nie działa, musimy mimo to zgłosić błąd.
slhck
Hm ok. Nie jest jednak zabarwiony, jest przesunięty.
commonpike
Nie powiedziałem, że to dokładnie ten sam problem. Tyle, że mogą wystąpić problemy z konwersją kolorów.
slhck

Odpowiedzi:

1

Problem polegał na przestrzeni kolorów obrazu tiff. ffmpeg kopiuje przestrzeń kolorów z pliku MPEG, który został zakodowany w YUV. Dane exif pliku tiff wykazały, że był to „YCbCr”, czyli YUV.

Wynikowy plik tiff może być przeglądany przez niektóre aplikacje, ale inne aplikacje (zwłaszcza Photoshop) zgłosiły, że są uszkodzone. Nie jestem pewien, czy to błąd w ffmpeg. Przekazałem wynik przez imagemagick bez jakiejkolwiek transformacji, co zdawało się naprawiać plik.

Jednak imagemagick zakładał, że jest to RGB, i ustawił dane exif na RGB bez faktycznej zmiany danych obrazu. To właśnie dzieje się zmiana odcienia. Ponownie nie jestem pewien, czy to błąd w imagemagick.

JPEG nie miał żadnych problemów.

Jednym z prawidłowych rozwiązań jest określenie w poleceniu ffmpeg pix_fmt, który ma być używany. Zobacz https://ffmpeg.org/ffmpeg.html#Advanced-Video-options

Więc to zrobiło:

ffmpeg -ss 14 -i '../test/test-in.mpg' -vframes 1 -aspect 445:326 -pix_fmt rgb24 -vf "crop=22/23*in_w:22/23*in_h,yadif,scale=720:527" '../unit-test/out.tiff'
pospolity
źródło