[FFmpeg-user] Reencoding video from image sequence doesn't work (sometimes)

serialhex at gmail.com serialhex at gmail.com
Thu Jan 18 22:53:48 EET 2018


First of all, I've exhausted all my Google-fu to no avail... so any help is
greatly appreciated!

I found a cool utility to upconvert anime images
(if you're interested https://github.com/lltcggie/waifu2x-caffe) and so I'm
reencoding my low quality
anime using this.  First I rip to an image sequence using a command like:

.\ffmpeg.exe -i full-20s.mkv -f image2 "file\seq-%09d.png"

I also get some metadata, such as framerate and stuff using ffprobe
Then I do the upconvert of the image sequence, and then I put it back
together 

.\ffmpeg.exe -y -i "full-20s.mkv" -framerate $framerate -f image2 -i
"file\seq-%09d.png" -map 1:v -c copy -vcodec h264 -pix_fmt yuv420p -map 0
-map -0:v out.mkv

This works beautifully for most files, but for some files this breaks in a
weird way.  The file will encode
okay, and I can then play it, but I get no video.  If I then seek to a
random place, pause the video and
then seek to near the beginning, it works perfectly.

I've uploaded some example files here:
https://drive.google.com/open?id=1qog43RZ8hPfQIjc6PbGi1Ii_ugeFNrQO
(oddly, playing the bad "out.mkv" file from google drive works fine, but vlc
and other media
players it doesn't -_- )

I've already tried making a keyframe at the beginning with adding
`-force_key_frames 0.0` to my
command line, and making a video out of the image sequence (which then plays
fine!!!) and adding it to
the audio later.  I've done a lot of research, and I'm at a loss.

"full-20s.mkv" was taken using ./ffmpeg -i full-episode.mkv -t 20 -c copy
-map 0 full-20s.mkv

I then made out.mkv using the following 2 commands:

D:\programmin\Projects\reencode> & .\ffmpeg.exe -i full-20s.mkv -f image2
".\inp-full-20s.mkv\seq-%09d.png"
ffmpeg version N-79690-g78baa45 Copyright (c) 2000-2016 the FFmpeg
developers
  built with gcc 5.3.0 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads
--enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r
--enable-gnutls --enable-iconv --enable-libass --enable-libblu
ray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme
--enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmfx
--enable-libmp3lame --enable-libopencore-amrnb --enable-
libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp
--enable-libschroedinger --enable-libsnappy --enable-libsoxr
--enable-libspeex --enable-libtheora --enable-libtwolame --enable-
libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx
--enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265
--enable-libxavs --enable-libxvid --enable-libzimg --enable
-lzma --enable-decklink --enable-zlib
  libavutil      55. 23.100 / 55. 23.100
  libavcodec     57. 38.100 / 57. 38.100
  libavformat    57. 34.103 / 57. 34.103
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 44.100 /  6. 44.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
The tags at index 3 refer to a non-existent track 4.
The tags at index 7 refer to a non-existent track 4.
Input #0, matroska,webm, from
'D:\programmin\Projects\reencode\full-20s.mkv':
  Metadata:
    ENCODER         : Lavf57.34.103
  Duration: 00:00:20.12, start: 0.000000, bitrate: 640 kb/s
    Stream #0:0: Video: h264 (High), yuv420p, 848x480, SAR 1:1 DAR 53:30,
19.18 fps, 19.18 tbr, 1k tbn (default)
    Metadata:
      DURATION        : 00:00:20.124000000
    Stream #0:1(jpn): Audio: aac (HE-AAC), 48000 Hz, stereo, fltp (default)
    Metadata:
      DURATION        : 00:00:20.010000000
    Stream #0:2(eng): Subtitle: ass (default)
    Metadata:
      DURATION        : 00:00:00.000000000
    Stream #0:3: Attachment: ttf
    Metadata:
      filename        : RotisWTF.ttf
      mimetype        : application/x-truetype-font
[image2 @ 00000000004ef9c0] Using AVStream.codec to pass codec parameters to
muxers is deprecated, use AVStream.codecpar instead.
Output #0, image2, to '.\inp-full-20s.mkv\seq-%09d.png':
  Metadata:
    encoder         : Lavf57.34.103
    Stream #0:0: Video: png, rgb24, 848x480 [SAR 1:1 DAR 53:30], q=2-31, 200
kb/s, 19.18 fps, 19.18 tbn (default)
    Metadata:
      DURATION        : 00:00:20.124000000
      encoder         : Lavc57.38.100 png
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Press [q] to stop, [?] for help
frame=  386 fps=150 q=-0.0 Lsize=N/A time=00:00:20.12 bitrate=N/A
speed=7.83x
video:209581kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: unknown

D:\programmin\Projects\reencode> .\ffmpeg.exe -y -framerate 28752/1499 -f
image2 -i ".\inp-full-20s.mkv\seq-%09d.png" -i "full-20s.mkv" -map 0:v -map
1 -map -1:v -c copy -vcodec h264 -pix_fmt yuv420p out.mkv
ffmpeg version N-79690-g78baa45 Copyright (c) 2000-2016 the FFmpeg
developers
  built with gcc 5.3.0 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads
--enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r
--enable-gnutls --enable-iconv --enable-libass --enable-libblu
ray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme
--enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmfx
--enable-libmp3lame --enable-libopencore-amrnb --enable-
libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp
--enable-libschroedinger --enable-libsnappy --enable-libsoxr
--enable-libspeex --enable-libtheora --enable-libtwolame --enable-
libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx
--enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265
--enable-libxavs --enable-libxvid --enable-libzimg --enable
-lzma --enable-decklink --enable-zlib
  libavutil      55. 23.100 / 55. 23.100
  libavcodec     57. 38.100 / 57. 38.100
  libavformat    57. 34.103 / 57. 34.103
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 44.100 /  6. 44.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
Input #0, image2, from '.\inp-full-20s.mkv\seq-%09d.png':
  Duration: 00:00:20.12, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: png, rgb24(pc), 848x480 [SAR 1:1 DAR 53:30], 19.17
fps, 19.18 tbr, 19.18 tbn
The tags at index 3 refer to a non-existent track 4.
The tags at index 7 refer to a non-existent track 4.
Input #1, matroska,webm, from 'full-20s.mkv':
  Metadata:
    ENCODER         : Lavf57.34.103
  Duration: 00:00:20.12, start: 0.000000, bitrate: 640 kb/s
    Stream #1:0: Video: h264 (High), yuv420p, 848x480, SAR 1:1 DAR 53:30,
19.18 fps, 19.18 tbr, 1k tbn (default)
    Metadata:
      DURATION        : 00:00:20.124000000
    Stream #1:1(jpn): Audio: aac (HE-AAC), 48000 Hz, stereo, fltp (default)
    Metadata:
      DURATION        : 00:00:20.010000000
    Stream #1:2(eng): Subtitle: ass (default)
    Metadata:
      DURATION        : 00:00:00.000000000
    Stream #1:3: Attachment: ttf
    Metadata:
      filename        : RotisWTF.ttf
      mimetype        : application/x-truetype-font
[libx264 @ 00000000030f0480] using SAR=1/1
[libx264 @ 00000000030f0480] using cpu capabilities: MMX2 SSE2Fast SSSE3
SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 00000000030f0480] profile High, level 3.0
[libx264 @ 00000000030f0480] 264 - core 148 r2694 3b70645 - H.264/MPEG-4 AVC
codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options:
cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=
hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1
trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2
threads=12 lookahead_threads=2 sliced_threads=0 nr=0 dec
imate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3
b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2
keyint=250 keyint_min=19 scenecut=40 intra_refresh=0 rc_lookah
ead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4
ip_ratio=1.40 aq=1:1.00
[matroska @ 00000000031daa20] Using AVStream.codec to pass codec parameters
to muxers is deprecated, use AVStream.codecpar instead.
    Last message repeated 3 times
Output #0, matroska, to 'out.mkv':
  Metadata:
    encoder         : Lavf57.34.103
    Stream #0:0: Video: h264 (H264 / 0x34363248), yuv420p, 848x480 [SAR 1:1
DAR 53:30], q=2-31, 19.18 fps, 1k tbn
    Metadata:
      encoder         : Lavc57.38.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1(jpn): Audio: aac (HE-AAC) ([255][0][0][0] / 0x00FF), 48000
Hz, stereo (default)
    Metadata:
      DURATION        : 00:00:20.010000000
    Stream #0:2(eng): Subtitle: ass (default)
    Metadata:
      DURATION        : 00:00:00.000000000
    Stream #0:3: Attachment: ttf
    Metadata:
      filename        : RotisWTF.ttf
      mimetype        : application/x-truetype-font
Stream mapping:
  Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))
  Stream #1:1 -> #0:1 (copy)
  Stream #1:2 -> #0:2 (copy)
  Stream #1:3 -> #0:3 (copy)
Press [q] to stop, [?] for help
[image2 @ 00000000005b65a0] Thread message queue blocking; consider raising
the thread_queue_size option (current value: 8)
frame=  386 fps=143 q=-1.0 Lsize=    1978kB time=00:00:20.01 bitrate=
809.6kbits/s speed= 7.4x
video:1814kB audio:99kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: 3.401193%
[libx264 @ 00000000030f0480] frame I:10    Avg QP:17.92  size: 11772
[libx264 @ 00000000030f0480] frame P:173   Avg QP:22.36  size:  8013
[libx264 @ 00000000030f0480] frame B:203   Avg QP:25.76  size:  1738
[libx264 @ 00000000030f0480] consecutive B-frames: 20.2% 25.4% 10.9% 43.5%
[libx264 @ 00000000030f0480] mb I  I16..4: 21.9% 60.3% 17.8%
[libx264 @ 00000000030f0480] mb P  I16..4:  3.3% 20.1%  3.5%  P16..4: 27.4% 
8.8%  3.8%  0.0%  0.0%    skip:33.1%
[libx264 @ 00000000030f0480] mb B  I16..4:  1.2%  4.5%  0.3%  B16..8: 15.3% 
1.9%  0.5%  direct: 5.1%  skip:71.3%  L0:40.9% L1:49.6% BI: 9.5%
[libx264 @ 00000000030f0480] 8x8 transform intra:72.8% inter:68.9%
[libx264 @ 00000000030f0480] coded y,uvDC,uvAC intra: 39.3% 51.0% 21.0%
inter: 12.4% 16.4% 2.0%
[libx264 @ 00000000030f0480] i16 v,h,dc,p: 45% 23% 12% 20%
[libx264 @ 00000000030f0480] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 36% 16% 22%  4% 
5%  4%  5%  4%  5%
[libx264 @ 00000000030f0480] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 24% 16% 13%  7%
10%  8%  8%  7%  6%
[libx264 @ 00000000030f0480] i8c dc,h,v,p: 60% 17% 16%  7%
[libx264 @ 00000000030f0480] Weighted P-Frames: Y:13.9% UV:10.4%
[libx264 @ 00000000030f0480] ref P L0: 73.0% 16.4%  8.2%  2.3%  0.1%
[libx264 @ 00000000030f0480] ref B L0: 90.9%  7.6%  1.5%
[libx264 @ 00000000030f0480] ref B L1: 97.8%  2.2%
[libx264 @ 00000000030f0480] kb/s:738.12

you can seek to like 4 seconds in out.mkv and then get video, but starting
from the beginning gets nothing.

I'm not sure what's going on, this works with some mkv files, and not with
others, also I was able to
reencode and entire anime in mp4 format without problems like this.

Any help would be appreciated!

By the way, the entire powershell script if anyone is interested:
https://gist.github.com/serialhex/18ff67b31f05e700d5456aac0e213e7f

Thanks for your help



--
Sent from: http://www.ffmpeg-archive.org/


More information about the ffmpeg-user mailing list