Конкат-файл изображения ffmpeg с различными расширениями
Я работал с ffmpeg, и у меня это получалось идеально несколько раз, но в последнее время я столкнулся с проблемой, когда все изображения из моего текстового файла не используются.
Мой текстовый файл выглядит как -
ffconcat version 1.0
file 'gallery-house-77-west-55th-street-01.jpg'
duration 4.44
file 'img03.jpg'
duration 4.44
file 'inside.png'
duration 4.44
file 'placeholder.png'
(количество файлов, имена файлов и расширения всегда будут отличаться)
И я пробовал несколько комбинаций, но на данный момент моя функция ffmpeg выглядит так:
ffmpeg -i audio.mp3 -safe 0 -f concat -i paths.txt -c:a copy -c:v libx264 \
-vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,fps=25,format=yuv420p" -vsync vfr -movflags +faststart -y output.mp4 2>&1');
При попытке запустить видео, кажется, конвертируется, но имеет различные странные поведения - иногда отображается только средний файл (изображение) в списке, или только первые 2 отображаются / отображаются.
Звук воспроизводится правильно, хотя.
Я попытался установить частоту кадров для входа, и я также попытался установить его для вывода, но это приводит к более странному поведению.
Это то, что отражается при запуске моей вышеупомянутой команды ffmpeg -
libavutil 56. 15.100 / 56. 15.100
libavcodec 58. 19.100 / 58. 19.100
libavformat 58. 13.100 / 58. 13.100
libavdevice 58. 4.100 / 58. 4.100
libavfilter 7. 18.100 / 7. 18.100
libswscale 5. 2.100 / 5. 2.100
libswresample 3. 2.100 / 3. 2.100
libpostproc 55. 2.100 / 55. 2.100
[mp3 @ 0xb46780] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'audio.mp3':
Metadata:
encoder : Lavf57.71.100
Duration: 00:00:19.98, start: 0.000000, bitrate: 48 kb/s
Stream #0:0: Audio: mp3, 22050 Hz, mono, fltp, 48 kb/s
Input #1, concat, from 'paths.txt':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #1:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 754x424 [SAR 72:72 DAR 377:212], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #1:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
[swscaler @ 0xba25c0] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 0xb710c0] using SAR=3393/3392
[libx264 @ 0xb710c0] using cpu capabilities: none!
[libx264 @ 0xb710c0] profile High, level 3.1
[libx264 @ 0xb710c0] 264 - core 155 r2901 7d0ff22 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - 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=22 lookahead_threads=3 sliced_threads=0 nr=0 decimate=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=25 scenecut=40 intra_refresh=0 rc_lookahead=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
Output #0, mp4, to 'output.mp4':
Metadata:
encoder : Lavf58.13.100
Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 3393:3392 DAR 377:212], q=-1--1, 25 fps, 12800 tbn, 25 tbc
Metadata:
encoder : Lavc58.19.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
Stream #0:1: Audio: mp3 (mp4a / 0x6134706D), 22050 Hz, mono, fltp, 48 kb/s
[swscaler @ 0xb93140] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0xb93140] Warning: data is not aligned! This can lead to a speed loss
[mjpeg @ 0xb6e200] mjpeg: unsupported coding type (cd)
[mjpeg @ 0xb6e200] mjpeg: unsupported coding type (c8)
[mjpeg @ 0xb6e200] Found EOI before any SOF, ignoring
[mjpeg @ 0xb6e200] mjpeg: unsupported coding type (c7)
Error while decoding stream #1:0: Invalid data found when processing input
[mjpeg @ 0xb6e200] invalid id 94
Error while decoding stream #1:0: Invalid data found when processing input
[mp4 @ 0xb6f8c0] Starting second pass: moving the moov atom to the beginning of the file
frame= 1 fps=0.0 q=28.0 Lsize= 179kB time=00:00:19.95 bitrate= 73.6kbits/s speed=44.1x
video:58kB audio:117kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.446521%
[libx264 @ 0xb710c0] frame I:1 Avg QP:28.86 size: 58683
[libx264 @ 0xb710c0] mb I I16..4: 21.2% 59.8% 19.0%
[libx264 @ 0xb710c0] 8x8 transform intra:59.8%
[libx264 @ 0xb710c0] coded y,uvDC,uvAC intra: 50.5% 65.2% 31.6%
[libx264 @ 0xb710c0] i16 v,h,dc,p: 10% 60% 3% 28%
[libx264 @ 0xb710c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 27% 26% 4% 4% 4% 6% 4% 7%
[libx264 @ 0xb710c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 33% 10% 5% 6% 5% 8% 5% 7%
[libx264 @ 0xb710c0] i8c dc,h,v,p: 47% 34% 11% 8%
[libx264 @ 0xb710c0] kb/s:11736.60
Есть идеи, что приводит к сбою последовательности изображений?
РЕДАКТИРОВАТЬ
После некоторой дополнительной отладки, я думаю, это может быть связано с тем, что все файлы не имеют одинакового расширения. Как я могу сделать так, чтобы это не должно было быть так, или это уже настройка по умолчанию, и проблема еще где?
РЕДАКТИРОВАТЬ 2
Я могу заставить его работать, когда все расширения изображения одинаковы, но когда он получает png или любое другое расширение изображения, он рендерит фильм, но фильм останавливается (не полностью), когда он попадает в этот кадр. Это происходит, когда я - 1. помещаю все jpgs перед png 2. запускаю следующую команду ----
ffmpeg -safe 0 -f concat -i paths.txt -c:v libx264 \
-vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" -pix_fmt yuv420p -movflags +faststart -y output.mp4 2>&1
Так что мое последнее предположение может быть верным, и это потому, что я смешиваю несколько расширений изображений в моей команде ffmpeg.
Как я могу исправить это так, чтобы он позволял смешивать любые файлы изображений?
1 ответ
Невозможно. Это не столько разные расширения, сколько разные кодеки. В случае изображений расширение отслеживает кодеки.
Вы должны будете преобразовать все входные данные в один и тот же кодек. Я рекомендую PNG.