Weil du ZDF dabei aufgezählt hast, schau mal hier, das trifft es evtl.
Fussball-EM 2016: Live-Audiodeskription : ZDF mit Barrierefreiheit bei EM-Ubertragungen - ZDFsport.de
Druckbare Version
Weil du ZDF dabei aufgezählt hast, schau mal hier, das trifft es evtl.
Fussball-EM 2016: Live-Audiodeskription : ZDF mit Barrierefreiheit bei EM-Ubertragungen - ZDFsport.de
Ja gut könnte jetzt bei manchen Sendungen zutreffen, aber bei dem was ich gestern getestet habe da war nix in der Richtung.
Aber egal ich muss mich nun entscheiden ob ich die 4te Tonspur einfach mit reinnehme beim Konvertieren oder eben nicht denn ändern kann ich das ja eh nicht
(was der Sender ausstrahlt is eben nun mal da).
Aber durch die dritte .mp2 Tonspur nun muss ich nen etwas anderen Weg suchen um die Spuren im Script zuverlässig unterscheiden zu können
(war halt bislang wo ich immer von höchstens zwei mp2 Tonspuren ausging sehr einfach).
Is klar warum das Muxen nicht klappt denn mit den bisherigen Variablen dazu also;
wird ja nur ne 02.mp2 getroffen und mit der Variablen mit Rufzeichen davor also negiert wird die mp2 getroffen nun aber gibts da auch ne 03.mp2Code:AUDIOFILE_AC3="*.ac3"
AUDIOFILE1="*[!\-02].mp2"
AUDIOFILE2="*[\-02].mp2"
da könnte die Variabale AUDIOFILE1 sowohl die .mp2 als auch die 03.mp2 sein da versagt das Muxen dann.
Muss ich dann also anders lösen bei der Möglichkeit von drei mp2 Tonspuren
Grüsse
Biki3
Hi,
@alexanderplatz - is erledigt sollte nun auch mit 4 Tonspuren klappen, ich häng das Komplettpaket hier im Post an.
Hab bei HD Sendern gesehen da gibts doch auch tatsächlich welche die zwei AC3 Tonspuren beinhalten
jedoch seh ich da derzeit keinen Handlungsbedarf da ich selbiges bei SD Sendern nicht beobachten konnte (Script is ja nur für SD-Aufnahmen).
Sollte das jedoch auch mal bei SD Sendern der Fall sein so nehm ichs dann mit rein wenn diesbzg. jemand Probleme postet.
Was mir grade noch im Log aufgefallen ist ist diese Meldung bei mplex;
Dagegen kann ich aber nix tun liegt am mplex (müsste vermutlich gepatcht werden, oder eventuell in neueren Versionen eh schon behoben)Code:**ERROR: [mplex] MUX STATUS: Frame data under-runs detected!
, jedoch kann ich aber trotz dieser Fehlermeldung keine Probleme in den fertigen Isos feststellen (klappt also eh alles soweit).
Wobei ich diese Fehlermeldung aber bislang nur bei Sendern mit den 4 Tonspuren gesehen habe (konkret bei zdf-neo).
Aber wie gesagt das .iso kann dennoch problemlos abgespielt werden hier.
Grüsse
Biki3
Hi,
Ich hab ja hier in der Script Section keinerlei Mod Rechte mehr, also kann ich da leider nix mehr editieren, deshalb aber folgendes.
Das Ganze bis hierher ist eigentlich obsolete (ich hab schon länger ein Plugin für diesen Job (macht aber auch nix anderes als ein Script aufzurufen, jedoch geht
das so viel bequemer, man muss nicht erst eine Aufnahme in nen bestimmten Ordner kopieren)).
Doch ist es aber so das dieses Plugin mit dem aufzurufenden Script (selbes gilt für die alten Scripte hier) nur auf Mipsel Boxen funktioniert
aus dem einfachen Grund da es das Programm projectx nur für die Mipsel Boxen gibt und projectx benötigt es aber um ne Aufnahme erstmal zu demuxen und fehlerzubereinigen.
Das also ist ein Grund warum das obsolete ist, der zweite Grund ist es macht sich doch eh keiner mehr die Mühe ne SD Aufnahme zu ner DVD zu wandeln
egal ob automatisch oder nicht (ich meine ich nehm ja selbst nun schon seit geraumer Zeit gar nix mehr von nem SD-Sender auf).
So, das war nur zur Info, damit keiner hier drüberstolpert und denkt die Scripts hier sind uneingeschränkt zu verwenden.
Mit dem Plugin selbst könnte man ja auch anderes tun denn es kann ja generell Scripte aufrufen, stellt sich nur die Frage was ?
Hab ja länger versucht da mit ffmpeg was brauchbares hinzubekommen in nem Script, jedoch kam da grade in Bezug auf DVD Erstellung von ner SD-Aufnahme bislang nix synchrones raus
, und somit pfeif ich nun auf das, denn wie gesagt SD interessiert mich selber nun nicht mehr wirklich).
Jedenfalls müsste mir da schon sehr fad werden damit ich das vielleicht mal neu aufgreifen würde.
Was mich immer noch reizen würde wäre wenn die Boxen mal so viel Power hätten das es sich lohnt (also in ner vertretbaren Zeit) an der Box mit dem Plugin ein Script zur HD Umwandlung (z.b: zu mkv)
zu verwirklichen, aber davon sind wir derzeit weit entfernt (das würde ewig dauern mit der derzeitigen Power der Boxen).
PLUGIN + SCRIPT ist im folgenden Link zu finden (wie in Post #1 erwähnt ist das nur für Mipsel Boxen);
Plugin and Script
Grüsse
Pike
hi Pike,
kannst ja mal den Codeschnipsel hier anschauen und für dich weiter zurechtfriemeln.
oder auch einfacher gehaltenCode:#! /bin/bash
for f in *.*; do
if [ ${f: -4} == ".TS4" ] || [ ${f: -3} == ".TS" ]
then
ffmpeg -i "$f" -sn -codec copy "${f%.*}.mkv"
# check if conversion was successful
rc=$?
if [ $rc == 0 ]
then
rm -f "$f"
else
ffmpeg -i "$f" -sn -codec copy "${f%.*}.mp4"
rm -f "$f"
ffmpeg -i "${f%.*}.mp4" -sn -codec copy "${f%.*.mkv}"
rm -f "${f%.*}.mp4"
fi
fi
done
für python scripte gäbe es auch schöne Spielereien, wenn man denn irgendwie Tkinter, tkinter, python-tkinter oder gar -tkinter zum laufen bekommen würde in E2. Da macht die Tkinter.pyo im Aufruf ab Zeile 39 nicht mehr mit.Code:#! /bin/bash
WORK_PATH="/media/hdd/movie"
cd "${WORK_PATH}"
for f in *.ts
do
if [ ! -e "$f.mp4" ]
then
ffmpeg -n -i "$f" -acodec copy -vcodec copy "$f.mp4"
#rm "$f"
fi
done
oder auch hierCode:#!/usr/bin/python3.7
# -*- coding: utf-8 -*-
import tkinter
import tkinter.ttk
from tkinter.filedialog import askopenfilename, asksaveasfilename
import tkinter.messagebox
import subprocess
import fcntl
import select
import os
import re
class Application(tkinter.Tk):
def __init__(self, parent):
tkinter.Tk.__init__(self, parent)
self.parent = parent
self.vcodecs = [
'libtheora',
'libvpx',
'libwebp',
'libx264',
'libx264rgb',
'libxvid',
'png',
'ProRes',
]
self.acodecs = [
'aac',
'ac3',
'ac3_fixed',
'libfaaclibfdk_aac',
'libmp3lame',
'libopencore-amrnb',
'libshine',
'libtwolame',
'libvo-aacenc',
'libvo-amrwbenc',
'libopus',
'libvorbis',
'libwavpack',
'wavpack',
]
self.formats = [
'null',
'mov',
'ismv',
'mp3',
'ogg',
'aiff',
'crc',
'framecrc',
'md5',
'framemd5',
'gif',
'hls',
'ico',
'image2',
'matroska',
'mpegts',
]
self.pixfmts = [
'yuv420p',
'yuv422p',
'yuv444p',
'yuv422',
'yuv410p',
'yuv411p',
'yuvj420p',
'yuvj422p',
'yuvj444p',
'rgb24',
'bgr24',
'rgba32',
'rgb565',
'rgb555',
'gray',
'monow',
'monob',
'pal8',
]
self.presets = {
'H.264 720p': {
'vcodec': 'libx264',
'vb': '3500k',
'width': 1280,
'height': 720,
'qmax': 51,
'qmin': 11,
'pix_fmt': 'yuv420p',
'acodec': 'aac',
'ar': 44100,
'ab': '128k',
'format': 'mp4',
'extraOptions': '-movflags faststart',
},
'H.264 576p': {
'vcodec': 'libx264',
'vb': '2000k',
'width': 1024,
'height': 576,
'qmax': 51,
'qmin': 11,
'pix_fmt': 'yuv420p',
'acodec': 'aac',
'ar': 44100,
'ab': '128k',
'format': 'mp4',
'extraOptions': '-movflags faststart',
},
'H.264 360p': {
'vcodec': 'libx264',
'vb': '1000k',
'width': 640,
'height': 360,
'qmax': 51,
'qmin': 11,
'pix_fmt': 'yuv420p',
'acodec': 'aac',
'ar': 44100,
'ab': '128k',
'format': 'mp4',
'extraOptions': '-movflags faststart -maxrate 1500k -bufsize 3000k',
},
'WebM 720p': {
'vcodec': 'libvpx',
'vb': '3500k',
'width': 1280,
'height': 720,
'qmax': 51,
'qmin': 11,
'pix_fmt': 'yuv420p',
'acodec': 'libvorbis',
'ar': 44100,
'ab': '128k',
'format': 'webm',
'extraOptions': '-quality good',
},
'WebM 576p': {
'vcodec': 'libvpx',
'vb': '2000k',
'width': 1024,
'height': 576,
'qmax': 51,
'qmin': 11,
'pix_fmt': 'yuv420p',
'acodec': 'libvorbis',
'ar': 44100,
'ab': '128k',
'format': 'webm',
'extraOptions': '-quality good',
},
'WebM 360p': {
'vcodec': 'libvpx',
'vb': '1500k',
'width': 640,
'height': 360,
'qmax': 51,
'qmin': 11,
'pix_fmt': 'yuv420p',
'acodec': 'libvorbis',
'ar': 44100,
'ab': '128k',
'format': 'webm',
'extraOptions': '-quality good',
},
}
self.initialize()
self.inputFiles = []
def initialize(self):
# width = 800
# height = 600
# xoffset = (self.winfo_screenwidth()-width)/2
# yoffset = (self.winfo_screenheight()-height)/2
# print "%dx%d%+d%+d" % (width, height, xoffset, yoffset)
# self.geometry("%dx%d%+d%+d" % (width, height, xoffset, yoffset))
self.grid_columnconfigure(0, weight=1)
self.resizable(True, True)
self.grid()
self.widgets()
def widgets(self):
# Source frame
source = tkinter.LabelFrame(self, text='Source file')
source.grid(
row=0,
columnspan=2,
sticky='WE',
padx=5,
pady=5,
ipadx=5,
ipady=5,
)
inputFileLbl = tkinter.Label(source, text='Select File:')
inputFileLbl.grid(row=0, column=0, sticky='E', padx=5, pady=2)
self.inputFileVar = tkinter.StringVar()
inputFileTxt = tkinter.Entry(source,
textvariable=self.inputFileVar, width='50')
inputFileTxt.grid(row=0, column=1, sticky='WE', pady=3)
inputFileBtn = tkinter.Button(source, text='Browse ...',
command=self.OnInputBrowseClick)
inputFileBtn.grid(row=0, column=2, sticky='W', padx=5, pady=2)
# Output frame
output = tkinter.LabelFrame(self, text='Output details')
output.grid(
row=1,
columnspan=2,
sticky='WE',
padx=5,
pady=5,
ipadx=5,
ipady=5,
)
outputFileLbl = tkinter.Label(output, text='Save File to:')
outputFileLbl.grid(row=0, column=0, sticky='E', padx=5, pady=2)
self.outputFileVar = tkinter.StringVar()
outputFileTxt = tkinter.Entry(output,
textvariable=self.outputFileVar, width='50')
outputFileTxt.grid(row=0, column=1, sticky='WE', pady=3)
outputFileBtn = tkinter.Button(output, text='Browse ...',
command=self.OnOutputBrowseClick)
outputFileBtn.grid(row=0, column=2, sticky='W', padx=5, pady=2)
# Preset
preset = tkinter.LabelFrame(self, text='Preset')
preset.grid(
row=2,
columnspan=2,
sticky='WE',
padx=5,
pady=5,
ipadx=5,
ipady=5,
)
# presets list
presetsLbl = tkinter.Label(preset, text='Use a preset')
presetsLbl.grid(row=0, column=0, sticky='E', padx=5, pady=2)
presets = []
for (presetName, presetOptions) in self.presets.items():
presets.append(presetName)
self.presetsVar = tkinter.StringVar()
self.presetsVar.trace('w', self.OnPresetSelected)
self.presetsList = tkinter.OptionMenu(preset, self.presetsVar,
*presets)
self.presetsList.grid(row=0, column=1, sticky='w', padx=5,
pady=2)
# Video options
video = tkinter.LabelFrame(self, text='Video options')
video.grid(
row=3,
column=0,
sticky='NWES',
padx=5,
pady=5,
ipadx=5,
ipady=5,
)
# video codec
vcodecLbl = tkinter.Label(video, text='Video codec')
vcodecLbl.grid(row=0, column=0, sticky='E', padx=5, pady=2)
self.vcodecVar = tkinter.StringVar()
self.vcodecList = tkinter.OptionMenu(video, self.vcodecVar,
*self.vcodecs)
self.vcodecList.grid(row=0, column=1, sticky='w', padx=5,
pady=2)
# Video bitrate
vbLbl = tkinter.Label(video, text='Video bitrate')
vbLbl.grid(row=1, column=0, sticky='E', padx=5, pady=2)
self.vbVar = tkinter.StringVar()
self.vbVar.set(0)
self.vb = tkinter.Entry(video, textvariable=self.vbVar)
self.vb.grid(row=1, column=1, sticky='W', padx=5, pady=2)
# Video width
widthLbl = tkinter.Label(video, text='Video width')
widthLbl.grid(row=2, column=0, sticky='E', padx=5, pady=2)
self.widthVar = tkinter.IntVar()
self.width = tkinter.Entry(video, textvariable=self.widthVar)
self.width.grid(row=2, column=1, sticky='W', padx=5, pady=2)
# Video height
heightLbl = tkinter.Label(video, text='Video height')
heightLbl.grid(row=3, column=0, sticky='E', padx=5, pady=2)
self.heightVar = tkinter.IntVar()
self.height = tkinter.Entry(video, textvariable=self.heightVar)
self.height.grid(row=3, column=1, sticky='W', padx=5, pady=2)
# pixel format
pixfmtLbl = tkinter.Label(video, text='Pixel format')
pixfmtLbl.grid(row=4, column=0, sticky='E', padx=5, pady=2)
self.pixfmtVar = tkinter.StringVar()
self.pixfmtList = tkinter.OptionMenu(video, self.pixfmtVar,
*self.pixfmts)
self.pixfmtList.grid(row=4, column=1, sticky='W', padx=5,
pady=2)
# frame rate
fpsLbl = tkinter.Label(video, text='Frame rate')
fpsLbl.grid(row=5, column=0, sticky='E', padx=5, pady=2)
self.fpsVar = tkinter.IntVar()
self.fps = tkinter.Entry(video, textvariable=self.fpsVar)
self.fps.grid(row=5, column=1, sticky='W', padx=5, pady=2)
# min quality
self.qmin = tkinter.Scale(video, from_=-1, to=69,
orient=tkinter.HORIZONTAL,
label='Minimum quality')
self.qmin.grid(
row=6,
column=0,
columnspan=2,
sticky='WE',
padx=5,
pady=2,
)
self.qmin.set(2)
# max quality
self.qmax = tkinter.Scale(video, from_=-1, to=1024,
orient=tkinter.HORIZONTAL,
label='Maximum quality')
self.qmax.grid(
row=7,
column=0,
columnspan=2,
sticky='WE',
padx=5,
pady=2,
)
self.qmax.set(31)
# Audio options
audio = tkinter.LabelFrame(self, text='Audio options')
audio.grid(
row=3,
column=1,
sticky='NWES',
padx=5,
pady=5,
ipadx=5,
ipady=5,
)
# audio codec
vcodecLbl = tkinter.Label(audio, text='Audio codec')
vcodecLbl.grid(row=0, column=0, sticky='E', padx=5, pady=2)
self.acodecVar = tkinter.StringVar()
self.acodecList = tkinter.OptionMenu(audio, self.acodecVar,
*self.acodecs)
self.acodecList.grid(row=0, column=1, sticky='W', padx=5,
pady=2)
# Audio frequency
arLbl = tkinter.Label(audio, text='Audio frequency')
arLbl.grid(row=1, column=0, sticky='E', padx=5, pady=2)
self.arVar = tkinter.IntVar()
self.ar = tkinter.Entry(audio, textvariable=self.arVar)
self.ar.grid(row=1, column=1, sticky='W', pady=2)
# Audio bitrate
abLbl = tkinter.Label(audio, text='Audio bitrate')
abLbl.grid(row=2, column=0, sticky='E', padx=5, pady=2)
self.abVar = tkinter.StringVar()
self.abVar.set(0)
self.ab = tkinter.Entry(audio, textvariable=self.abVar)
self.ab.grid(row=2, column=1, sticky='W', padx=5, pady=2)
# Options
options = tkinter.LabelFrame(self, text='Options')
options.grid(
row=4,
columnspan=2,
sticky='WE',
padx=5,
pady=5,
ipadx=5,
ipady=5,
)
# Format
formatLbl = tkinter.Label(options, text='Format')
formatLbl.grid(row=0, column=0, sticky='E', padx=5, pady=2)
self.formatVar = tkinter.StringVar()
self.formatList = tkinter.OptionMenu(options, self.formatVar,
*self.formats)
self.formatList.grid(row=0, column=1, sticky='W', padx=5,
pady=2)
# Format options
extraOptionsLbl = tkinter.Label(options, text='Extra options')
extraOptionsLbl.grid(row=1, column=0, sticky='E', padx=5,
pady=2)
self.extraOptionsVar = tkinter.StringVar()
extraOptionsTxt = tkinter.Entry(options,
textvariable=self.extraOptionsVar, width='65')
extraOptionsTxt.grid(row=1, column=1, sticky='WE', pady=3)
# Encode button
encodeButton = tkinter.Button(self, text='Encode',
command=self.OnEncodeClick)
encodeButton.grid(row=5, column=0, sticky='NWES', padx=5,
pady=2)
# Progress bar
self.progress = tkinter.ttk.Progressbar(self, orient='horizontal',
mode='determinate')
self.progress.grid(row=5, column=1, sticky='WE', padx=5, pady=3)
def OnInputBrowseClick(self):
self.inputFiles = askopenfilename(multiple=True)
self.inputFileVar.set(self.inputFiles)
def OnOutputBrowseClick(self):
options = {}
options['parent'] = self
inputFilename = self.inputFileVar.get()
if inputFilename:
options['initialfile'] = inputFilename
self.outputFile = asksaveasfilename()
self.outputFileVar.set(self.outputFile)
def OnPresetSelected(self, *argv):
preset = self.presetsVar.get()
if self.presets[preset]:
preset = self.presets[preset]
self.vcodecVar.set(preset['vcodec'])
self.vbVar.set(preset['vb'])
self.widthVar.set(preset['width'])
self.heightVar.set(preset['height'])
self.qmax.set(preset['qmax'])
self.qmin.set(preset['qmin'])
self.pixfmtVar.set(preset['pix_fmt'])
self.acodecVar.set(preset['acodec'])
self.arVar.set(preset['ar'])
self.abVar.set(preset['ab'])
self.formatVar.set(preset['format'])
self.extraOptionsVar.set(preset['extraOptions'])
def OnEncodeClick(self):
if self.inputFiles:
files = self.splitlist(self.inputFiles)
for filename in files:
self.encodeFile(filename)
else:
tkinter.messagebox.showwarning('No source selected',
'You must define at least one file to encode')
def encodeFile(self, filename):
output = self.outputFileVar.get()
format = self.formatVar.get()
vcodec = self.vcodecVar.get()
vb = self.vbVar.get()
fps = self.fpsVar.get()
qmax = self.qmax.get()
qmin = self.qmin.get()
pixfmt = self.pixfmtVar.get()
width = self.widthVar.get()
height = self.heightVar.get()
acodec = self.acodecVar.get()
ar = self.arVar.get()
ab = self.abVar.get()
extraOptions = self.extraOptionsVar.get()
cmd = 'ffmpeg -i {0} -y {1} -f {2}'.format(filename, output,
format)
video = \
'-vcodec {0} -vb {1} -qmax {2} -qmin {3} -pix_fmt {4}'.format(vcodec,
vb, qmax, qmin, pixfmt)
if fps:
video += ' -r {}'.format(fps)
scale = \
'-vf "scale=iw*min({0}/iw\,{1}/ih):ih*min({0}/iw\,{1}/ih),pad={0}:{1}:({0}-iw)/2:({1}-ih)/2"'.format(width,
height)
audio = '-acodec {0} -ar {1} -ab {2}'.format(acodec, ar, ab)
options = '-strict experimental -threads 0' + ' ' + extraOptions
cmd = cmd + ' ' + video + ' ' + scale + ' ' + audio + ' ' \
+ options
# print cmd
cmd = subprocess.Popen(cmd, shell=True, stderr=subprocess.PIPE)
fcntl.fcntl(cmd.stderr.fileno(), fcntl.F_SETFL,
fcntl.fcntl(cmd.stderr.fileno(), fcntl.F_GETFL)
| os.O_NONBLOCK)
duration = None
header = ''
progress_regex = re.compile("frame=.*time=([0-9\:\.]+)",
flags=re.IGNORECASE)
header_received = False
while True:
progressline = select.select([cmd.stderr.fileno()], [],
[])[0]
if progressline:
line = cmd.stderr.read()
if line == '':
self.complete_callback()
break
progress_match = progress_regex.match(line)
if progress_match:
if not header_received:
header_received = True
if re.search(".*command\snot\sfound", header,
flags=re.IGNORECASE):
tkinter.messagebox.showerror('Command error',
'Command not found')
if re.search('Unknown format', header,
flags=re.IGNORECASE):
tkinter.messagebox.showerror('Unknown format',
'Unknown format')
if re.search("Duration: N\/A", header,
flags=re.IGNORECASE | re.MULTILINE):
tkinter.messagebox.showerror('Unreadable file',
'Unreadable file')
raw_duration = \
re.search("Duration:\s*([0-9\:\.]+),",
header)
if raw_duration:
units = raw_duration.group(1).split(':')
duration = int(units[0]) * 60 * 60 * 1000 \
+ int(units[1]) * 60 * 1000 \
+ int(float(units[2]) * 1000)
if duration:
units = progress_match.group(1).split(':')
progress = int(units[0]) * 60 * 60 * 1000 \
+ int(units[1]) * 60 * 1000 \
+ int(float(units[2]) * 1000)
self.progress_callback(progress, duration)
else:
header += line
def progress_callback(self, progress, duration):
# percent = float(float(progress) / float(duration)) * 100
# print "{0}%".format(int(percent))
self.progress['maximum'] = duration
self.progress['value'] = progress
self.progress.update()
def complete_callback(self):
tkinter.messagebox.showinfo('Encoding complete', 'Encoding complete'
)
def main():
app = Application(None)
app.title('FFmpeg')
app.mainloop()
if __name__ == '__main__':
main()
Noch eine grunsätzliche Anmerkung, die ARM HisiBoxen haben (zumindest die HD61) leider nur die ältere 3.6.xx ffmpeg vers. zur Verfügung, da geht x265 z.B. und noch mehr nicht .Code:#!/usr/bin/env python
import os
import re
import sys
import glob
import subprocess
from optparse import OptionParser
def help():
head, tail = os.path.split(sys.argv[0])
print "Help:\n " + tail + " <folder> <src_fmt> <dst_fmt>\n for example :" + sys.argv[0] + " ./ aac mp3"
def Convert_Audio(src_fmt, dst_fmt):
all_src_file = sorted(glob.glob("*.*"))
file_patten = "[a-zA-Z0-9_]*." + src_fmt
file_patten_regex = re.compile(file_patten)
for file in all_src_file:
lower_file_name = file.lower()
result = file_patten_regex.match(lower_file_name)
if (result):
src_file_info = file.split(".")
file_name = src_file_info[0]
print " convert " + file + " to " + file_name + "." + dst_fmt
cmd = "ffmpeg -i " + file + " " + file_name + "." + dst_fmt
print cmd
os.system(cmd)
def Convert_AV(src_fmt, dst_fmt):
all_src_file = sorted(glob.glob("*.*"))
file_patten = r"[a-zA-Z0-9_]*." + src_fmt
file_patten_regex = re.compile(file_patten)
for file in all_src_file:
lower_file_name = file.lower()
result = file_patten_regex.match(lower_file_name)
if (result):
src_file_info = file.split(".")
file_name = src_file_info[0]
print " convert " + file + " to " + file_name + "." + dst_fmt
cmd = "ffmpeg -i " + file + " -acodec copy -vcodec copy -copytb 1 -copyts " + file_name + "." + dst_fmt
os.system((cmd))
def Convert(folder, src_fmt, dst_fmt):
child_env = os.environ.copy()
if not os.path.isdir(folder):
print "Folder: " + folder + " does not exist"
return
os.chdir(folder)
if dst_fmt in ["aac", "mp3", "wav", "m4a"]:
Convert_Audio(src_fmt, dst_fmt)
else:
Convert_AV(src_fmt, dst_fmt)
if __name__ == "__main__":
if len(sys.argv) != 4:
help()
sys.exit(0)
folder = sys.argv[1]
src_fmt = sys.argv[2]
dst_fmt = sys.argv[3]
print "convert from %s to %s" % (src_fmt, dst_fmt)
Convert(folder, src_fmt, dst_fmt)
Ist wohl dem eingebauten eserviceHisilicon geschuldet.
Jetzt kannst über Weihnachten die Zeit nutzen und baust uns ein schönes Plugin. :whistle2:
Oder du schaust dir das autocut plugin (Google) mal näher an.
Hi,
Hier also noch abschliessend das Komplett Paket (Plugin + Script) um ne SD-Aufnahme zu ner DVD.iso auf ner MipselBox zu wandeln.
Was ist zu tun damit das läuft ?
1.) Das Paket "ScriptOnRec_Mipsel_complete_package.zip" hier im Post downloaden, und am PC entpacken.
2.) Der komplette Ordner "ScriptOnRec" in dem Paket gehört an der Box nach "/usr/lib/enigma2/python/Plugins/Extensions" (kann per FTP (Filezilla) dorthin kopiert werden).
3.) Die Datei "projectx" gehört an der Box nach "/usr/bin".
4.) Die Datei "projectx.ini" gehört an der Box nach "/home/root"
5.) Folgenden Befehl in telnet eintippen;
Das wars schon zur Einrichtung.Code:chmod 755 /usr/lib/enigma2/python/Plugins/Extensions/ScriptOnRec/script1/*.sh/
Ich habe alle Scripts die nicht benötigt werden entfernt es gibt also nur noch ein Script und zwar das im Verzeichnis "/usr/lib/enigma2/python/Plugins/Extensions/ScriptOnRec/script1"
Dies ist das Script welches für die Konvertierung von SD-Aufnahmen zu ner DVD.iso zuständig ist, es nennt sich "ts2dvd_with_projectx.sh".
Wie funktioniert das nun ?
Einfach die gewünschte SD-Aufnahme welche zu DVD.iso gewandelt werden soll in der Filmliste markieren, jetzt die Menü Taste drücken und in diesem Menü
nun den Eintrag "ScriptOnRec" bzw. "Script auf Aufnahme..." suchen,
und per ok Taste hinein wechseln, hier nun einfach das Script "ts2dvd_with_projectx.sh" (wird wohl der zweite Eintrag von oben sein) anwählen und per ok Taste starten.
Der Rest geht vollautomatisch - die fertige DVD.iso landet dann in "/media/hdd//movie/_Converted/video/ts2dvd"
Wer da nen anderen Pfad braucht muss das Script in den Zeilen 35 - 37 dahingehend anpassen (nur mit nem Linuxtauglichen Editor wie z.b: Notepad++).
Der ganze Vorgang dauert nur einige Minuten.
Und die fertigen DVD.isos sollten in dem Fall absolut synchron sein, da hier ja projectx zum Demuxen verwendet wird.
Es ist möglich das das Script beim ersten Versuch abbricht, aber nur falls die bash nicht bereits installiert ist.
Denn in dem Fall installiert das Script die bash nach, man muss das (Plugin) bzw. das Script darin danach nur einmalig erneut starten, danach sollte es immer funktionieren.
Nach dem Start des Scripts werden erstmal alle Fenster geschlossen, und notwendige Meldungen werden extra am OSD (TV) ausgegeben wie z.b: die Startmeldung die ein paar Sekunden nachdem
die Fenster geschlossen wurden erscheint, oder die Endmeldung wenn die Umwandlung abgeschlossen wurde.
Es gibt auch ein Logfile, das liegt unter /tmp an der Box und nennt sich "ts2dvd.log".
Falls benötigte weitere Programme fehlen wie die mjpegtools, dvdauthor, oder geniosimage werden die vom Script selbst nachinstalliert, auch
wenn benötigte Verzeichnisse fehlen werden die vom Script selbst erstellt.
Mehr gibts dazu nicht zu sagen, ausser nur auf SD-Aufnahmen anwenden !
Sollte man es auf ne HD-Aufnahme anwenden passiert aber auch nix, das Script wird dann halt einfach abbrechen.
Grüsse
Pike