mboost-dp1
ffmpeg
- Forside
- ⟨
- Forum
- ⟨
- Software
Hej,
Da jeg bruger Windows Home Server 2011 og gerne vil streame video gennem Remote Access, så har jeg nogle film jeg bliver nød til at konvertere til en anden container da den ikke vil genkende Matroska-containeren (*.mkv). Nu bruger jeg ffmpeg til at konvertere Matroska-containeren til en MPEG4-container (*.mp4).
Processen går fint ved brug af kommandolinje og argumenterne der ser sådan ud.
ffmpeg.exe -y -i "fil.mkv" -vcodec copy -acodec copy "fil.mp4"
Mit problem er bare at når den er blevet konverteret på min server, så finder Windows Home Server 2011 den ikke så den kan afspilles via Remote Access og Silverlight. Når filen er konverteret på alle andre computere end min server, så vil Windows Home Server 2011 gerne finde den så den kan afspilles i Remote Access.
Jeg er komplet uforstående for dette! Nogen der har en ide om hvad der kan være galt? Ville gerne have det til at virke for at have et script kørende rekursivt på min film mappe og konvertere alle *.mkv til *.mp4.
TL;DR - ved brug af ffmpeg, hvorfor kan WHS11 kun finde *.mp4 filer lavet på andre maskiner end serveren selv?
Da jeg bruger Windows Home Server 2011 og gerne vil streame video gennem Remote Access, så har jeg nogle film jeg bliver nød til at konvertere til en anden container da den ikke vil genkende Matroska-containeren (*.mkv). Nu bruger jeg ffmpeg til at konvertere Matroska-containeren til en MPEG4-container (*.mp4).
Processen går fint ved brug af kommandolinje og argumenterne der ser sådan ud.
ffmpeg.exe -y -i "fil.mkv" -vcodec copy -acodec copy "fil.mp4"
Mit problem er bare at når den er blevet konverteret på min server, så finder Windows Home Server 2011 den ikke så den kan afspilles via Remote Access og Silverlight. Når filen er konverteret på alle andre computere end min server, så vil Windows Home Server 2011 gerne finde den så den kan afspilles i Remote Access.
Jeg er komplet uforstående for dette! Nogen der har en ide om hvad der kan være galt? Ville gerne have det til at virke for at have et script kørende rekursivt på min film mappe og konvertere alle *.mkv til *.mp4.
TL;DR - ved brug af ffmpeg, hvorfor kan WHS11 kun finde *.mp4 filer lavet på andre maskiner end serveren selv?
Programmet har fulde rettigheder til at skrive. Den skriver også filerne, filerne kan også spilles i WMP på serveren, de vises bare ikke i Remote Access, sært synes jeg. Det virker når filerne er lavet på andre computere.
Jeg har downloaded exe-filen på en computer of kopieret den til de andre, så ja, det er den samme version.
Det var det samme jeg lige tænkte på at gøre og nu bliver jeg først forvirret.
FE48461FF447F960FBAA291F1F7C9720
C:\Users\Administrator\Desktop\Converted on others\Bee Movie [2007].mp4
FE48461FF447F960FBAA291F1F7C9720
F:\ServerFolders\Videos\Bee Movie [2007].mp4
FE48461FF447F960FBAA291F1F7C9720
C:\Users\Administrator\Desktop\Converted on others\Bee Movie [2007].mp4
FE48461FF447F960FBAA291F1F7C9720
F:\ServerFolders\Videos\Bee Movie [2007].mp4
Du skal nu have tak alligevel, Windows Home Server 2011 er en version af Windows Server 2008 R2 og arbejder derfor med samme system som Windows 7.
DD havde faktisk fat i noget kan jeg se og takket være myplacedk har jeg nu fået lusket mig ind på fejlen.
Grunden er at Windows Home Server 2011 bruger en anden bruger 'WMPNetworkSvc' til streaming og den bruger har læse rettingheder på de filer jeg laver på en anden maskine og så overfører. Hvis jeg laver filen på serveren, så er stream-brugeren ikke nævnt i rettighedslisten.
Takker til alle og den burde jeg sku' nok have set. Kan nu erklære mig selv en tumpe af højeste grad!
DD havde faktisk fat i noget kan jeg se og takket være myplacedk har jeg nu fået lusket mig ind på fejlen.
Grunden er at Windows Home Server 2011 bruger en anden bruger 'WMPNetworkSvc' til streaming og den bruger har læse rettingheder på de filer jeg laver på en anden maskine og så overfører. Hvis jeg laver filen på serveren, så er stream-brugeren ikke nævnt i rettighedslisten.
Takker til alle og den burde jeg sku' nok have set. Kan nu erklære mig selv en tumpe af højeste grad!
Som en lille extra, så kan jeg sige at jeg har fixet det ved at skrive det følgende i kommandoprompt.
ICACLS <fil> /inheritance:e
Så arver filen rettinghederne fra den overordnede mappe, i hvert fald hvis jeg har forstået det rigtigt. Det ser også ud til at virke.
ICACLS <fil> /inheritance:e
Så arver filen rettinghederne fra den overordnede mappe, i hvert fald hvis jeg har forstået det rigtigt. Det ser også ud til at virke.
Kan da også lige poste tingene jeg bruger til automatisk konvertering, jeg fandt også ud af at den ikke ville afspille filmene når de var med audio codec AC3, så det skal også konverteres til AAC.
Det er skrevet i AutoIt3
Nødvendige filer
settings.ini
Concra.au3
Det er skrevet i AutoIt3
Nødvendige filer
ffmpeg.exe
MediaInfo.exe (CLI version)
MediaInfo.dll
settings.ini
settings.ini
[Settings]
Videos=X:\ServerFolders\Videos
Temp=X:\temp
Time=00:15:00
Priority=2
Concra.au3
#include <File.au3>
#include <Array.au3>
#include <Constants.au3>
Local Const $SECOND_IN_MILL = 1000
Local Const $HOUR_TO_MINUTES = 60
Local Const $MINUTE_TO_SECONDS = 60
$searchDir = IniRead("settings.ini", "Settings", "Videos", "")
$tempDir = IniRead("settings.ini", "Settings", "Temp", "")
$timeSetting = IniRead("settings.ini", "Settings", "Time", "")
$prioritySetting = IniRead("settings.ini", "Settings", "Priority", 0)
$loopTime = _TimeSettingToSeconds($timeSetting)
While 1
_CrawlFolder($searchDir, $tempDir)
Sleep($loopTime * $SECOND_IN_MILL)
WEnd
Func _CrawlFolder($searchDir, $tempDir)
$folderList = _FileListToArray($searchDir, "*", 2)
If IsArray($folderList) Then
For $i = 1 to $folderList[0]
$folder = $searchDir&"\"&$folderList[$i]
_CrawlFolder($folder, $tempDir)
Next
EndIf
$fileList = _FileListToArray($searchDir, "*.mkv", 1)
If IsArray($fileList) Then
For $i = 1 to $fileList[0]
$tempFile = $tempDir&"\"&StringTrimRight($fileList[$i], 3) & "mp4"
$newFile = $searchDir&"\"&StringTrimRight($fileList[$i], 3) & "mp4"
$file = $searchDir&"\"&$fileList[$i]
If Not FileExists($newFile) Then
DirCreate($tempDir)
$audioProcess = Run('MediaInfo "'&$file&'" --Inform=Audio;%Format%', @ScriptDir, @SW_SHOW, $STDOUT_CHILD)
While 1
$audioCodec = StdoutRead($audioProcess)
If $audioCodec Then ExitLoop
Wend
If $audioCodec = "AAC" Then
$useAudioCodec = 'copy'
Else
$useAudioCodec = 'libvo_aacenc -ac 2'
EndIf
$processId = Run('ffmpeg.exe -y -i "' & $file & '" -vcodec copy -acodec '&$useAudioCodec&' "' & $tempFile & '"')
ProcessSetPriority($processId, 0)
While ProcessExists($processId)
Sleep(100)
WEnd
FileMove($tempFile, $newFile)
Run('ICACLS "'&$newFile&'" /inheritance:e')
DirRemove($tempDir)
EndIf
Next
EndIf
EndFunc
Func _TimeSettingToSeconds($time)
$hours = StringLeft($time, 2) * $HOUR_TO_MINUTES * $MINUTE_TO_SECONDS
$minutes = StringMid($time, 4, 2) * $MINUTE_TO_SECONDS
$seconds = StringRight($time, 2)
return $hours + $minutes + $seconds
EndFunc
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.