mboost-dp1

ffmpeg


Gå til bund
Gravatar #1 - Slettet Bruger [1509754394]
25. okt. 2011 17:22
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?
Gravatar #2 - Daniel-Dane
25. okt. 2011 17:27
Dumt spg.:
Har programmet de rette skriverettigheder på serveren?
Gravatar #3 - Slettet Bruger [1509754394]
25. okt. 2011 17:30
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.
Gravatar #4 - myplacedk
25. okt. 2011 18:04
Er det præcist samme version af ffmpeg du bruger på de forskellige maskiner?
Gravatar #5 - Slettet Bruger [1509754394]
25. okt. 2011 18:36
Jeg har downloaded exe-filen på en computer of kopieret den til de andre, så ja, det er den samme version.
Gravatar #6 - myplacedk
25. okt. 2011 19:06
Hvor store er filerne? Problematisk store? (Over 2 gb? Over 4 gb?)

Prøv evt. med noget under 1 gb, hvis du ikke har prøvet det.
Gravatar #7 - Slettet Bruger [1509754394]
25. okt. 2011 19:09
Pt. har jeg 6 filer, fra 800 MB til 5 GB, det sker med alle filerne.
Gravatar #8 - myplacedk
25. okt. 2011 19:27
Hmm... Prøv lige at sammenligne resultatet fra en fungerende konvertering og en ikke-fungerende. Er de helt ens? Sammenlign fx. MD5sum.
Gravatar #9 - Slettet Bruger [1509754394]
25. okt. 2011 19:31
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

Gravatar #10 - Slettet Bruger [1509754394]
25. okt. 2011 19:48
For at sætte billeder på min forvirring

Konverteret på server

Konverteret på andre computere
Gravatar #11 - myplacedk
25. okt. 2011 19:52
#9
Aha! Så fungerer ffmpeg som det skal. Problemet er nok at de nyere Windowsere (dvs. nyere end hvad jeg har forstand på) har et underligt forhold til fil-rettigheder.

Det har jeg ingen forstand på, men nu ved du da hvilken slags ekspert du leder efter.
Gravatar #12 - Slettet Bruger [1509754394]
25. okt. 2011 19:59
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!
Gravatar #13 - Slettet Bruger [1509754394]
25. okt. 2011 20:42
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.
Gravatar #14 - TheAvatar
25. okt. 2011 20:52
#13 Du kan tage tumpehatten af for at være så flink, at runde din post af med løsningen af hensyn til folk som Googler sig herind i fremtiden.
Der findes ikke dumme spørgsmål, kun dumme svar :)
Gravatar #15 - Slettet Bruger [1509754394]
26. okt. 2011 11:15
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
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
Gravatar #16 - kasperd
26. okt. 2011 14:30
Vossen (15) skrev:
#include <File.au3>
#include <Array.au3>
#include <Constants.au3>
Bruger det sprog en C preprocessor?
Gravatar #17 - Slettet Bruger [1509754394]
26. okt. 2011 16:09
Tror faktisk det er en C++ interpreter der bruges.
Gå til top

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.

Opret Bruger Login