Use FFmpeg to generate missing episode images


#1

Hi guys, Got fedup with tvdb.com not having images for aired episodes…so decided to fix it.
I’m new to coding so please forgive if I appear very stupid:slight_smile:
I’ve spent past days trying to get sonarr to run post processing script which would use FFmpeg to generate a poster for the episode.

I can use a batch D:/Image.bat file to make ffmpeg generate the required image using the following command in batch file:

ffmpeg -ss 100 -i c:/test/mytest_episode_file.mkv -vf "scale='if(gt(dar,400/225),225*dar,400)':'if(gt(dar,400/225),225,400/dar)',setsar=1,crop=400:225"  -frames:v 1 c:/test/mytest_episode_file.jpg

This will generate the image for the episode perfectly.

So now I am trying to get Sonarr to pass the “%Sonarr_EpisodeFile_Path%” to the batch file, without success:(
I thought following would work:

Set File="%Sonarr_EpisodeFile_Path%"

ffmpeg -ss 100 -i %File% -vf "scale='if(gt(dar,400/225),225*dar,400)':'if(gt(dar,400/225),225,400/dar)',setsar=1,crop=400:225"  -frames:v 1 %File%.jpg

In sonarr, connect - custom script.
Path: C:\Windows\System32\cmd.exe
Arguments: /c D:\Image.bat

Im sure many people would appreciate such an addon for the community as many eps dont have images for 3-4days after airing.

Thanks to anyone for your help.


#2

Anyone can help me please?


#3

You posted in Third Party Add-ons, if you need assistance you should post in help and support.

All environment variables that Sonarr passes the script are lower-case, but it looks like you’re capitalizing each word.


#4

I changed above too:

Still not working:(


#5

Is %File% set properly? Have you tried logging those variables?


#6

Thanks for the reply Markus:smile:
Im still trying to get it to work but so far Ive manged to nearly complete it with following code:
I’ve install ffmpeg for python here [https://github.com/kkroening/ffmpeg-python]
(https://github.com/kkroening/ffmpeg-python)

#!/usr/bin/python
import os
import sys
import shutil
import subprocess
import shlex 
import os.path
import pipes
import ffmpeg

inputFile = os.environ.get('Sonarr_EpisodeFile_Path')

newone = (os.path.splitext(inputFile)[0])
newimage = ''.join([newone , '-thumb.jpg '])
outputFile = newimage

in_stream = ffmpeg.input('inputFile')
video_stream = in_stream  # automatically equivalent to in_stream.video()
video_stream = ffmpeg.filter_(video_stream, '-ss', '00:15:00', '-i',)
video_stream = ffmpeg.filter_(video_stream, '-vframes', '1', '-q:v', '2')
out_stream = ffmpeg.output(out_stream, 'outputFile')
ffmpeg.run(out_stream)

So this get the full path of the
inputFile from Sonarr_EpisodeFile_Path,

which looks like:

D:\Rebuild\Done\Series Source\Looming Tower, The\Season 1\The.Looming.Tower.S01E01.WEBDL-720p.Proper.h264.EAC3-NTb.mkv

Then it removes the extension making newone like:

D:\Rebuild\Done\Series Source\Looming Tower, The\Season 1\The.Looming.Tower.S01E01.WEBDL-720p.Proper.h264.EAC3-NTb

Then I want to add “-thumbs.jpg” to the end of that filepath and endup with outputFile which is:

D:\Rebuild\Done\Series Source\Looming Tower, The\Season 1\The.Looming.Tower.S01E01.WEBDL-720p.Proper.h264.EAC3-NTb-thumbs.jpg

Then ffmegp is fired with the inputfile & outputFile
It all appears to work until outputting the file, where it failes. in sonarr logs is says:

|Component|Message|Time|
|---|---|---|
|python.exe|NameError: name 'out_stream' is not defined|14:49|
|python.exe|out_stream = ffmpeg.output(out_stream, 'outputFile')|14:49|
|python.exe|File "D:\Scripts\Testing\ffmpeg2.py", line 42, in <module>|14:49|
|python.exe|Traceback (most recent call last):|14:49|

the line: |python.exe|File “D:\Scripts\Testing\ffmpeg2.py”, line 42, in related to following line:

out_stream = ffmpeg.output(out_stream, ‘outputFile’)

implying its outputfile problem??

Any ideas on how to fix would be appreciated, thanks in advance.


#7

No, it’s saying you’re trying to use out_stream, but it’s not yet defined, which is true because you’re trying to define it on the same line you’re trying to use it.


#8

Wow thanks for speedy reply marcus:) been pulling my hair out here. but isnt this outputFile already definded top of script

“newimage = ‘’.join([newone , '-thumb.jpg '])
outputFile = newimage”


#9

Umm, outputFile isn’t the problem… please re-read my last reply.

Anyways, this isn’t a problem with Sonarr, this is a problem with the code you’re writing and not something we support here.


#10

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.