Audio/video stream recording forums
|
Attention Visitor: |
You may have to register or log in before you can post:
|
|
|
Thread Tools | Display Modes |
#1
|
|||
|
|||
FLV fixer scriptI have created a new script for repairing the FLV files based on the flv processing code taken from my another script AdobeHDS. it can help you in following scenarios.
You can use script with following switches: Code:
--help displays this help --debug show debug output --nometa do not save metadata in repaired file --fixwindow [param] timestamp gap between frames to consider as timeshift --in [param] input filename of flv file to be repaired --out [param] output filename for repaired file Code:
https://github.com/K-S-V/Scripts Last edited by KSV : 03-02-2013 at 08:39 AM. |
#2
|
|||
|
|||
Re: FLV fixer scriptWonderful, thanks!
|
#3
|
|||
|
|||
Re: FLV fixer scriptChanges:
Code:
1. rebase timestamps to zero + other improvements 2. added nometa switch to remove metadata from repaired file |
#4
|
|||
|
|||
Re: FLV fixer scriptKSV, would it be difficult to write a script or modify the flvFixer script so it can read several chunks/parts from an Flv video and then save them as a single video in one process?
I have quite a few large Flv videos (some are over 2GB) I need to cut first and then join the cut parts together, but I'm having a lot of problems finding a freeware application that can do it properly. Some applications crash with large files, because they want to load the entire video in memory. Other applications can cut only 1 part at once, which takes a lot of time and other applications don't support Nellymoser or Speex audio, even though it's raw file editing. I'd like to edit based on seconds or perhaps milliseconds. I know that every video needs to start on a keyframe, which means it won't always cut exactly on the specified start time, but that's not a problem. For example: --parts 39-249,583-937,1292-1819 cut from second 39 to 249 cut from second 583 to 937 cut from second 1292 to 1819 Save the parts as a single Flv video. |
#5
|
|||
|
|||
Re: FLV fixer scriptQuote:
|
#6
|
|||
|
|||
Re: FLV fixer scriptThank you. Do you know if ffmpeg can cut multiple parts with one command? The only commands I can find are -ss (start time) and -t (duration) to cut one part. This is what I'm already doing and it takes too long to do this all step by step. Or perhaps I need to write a batch script to do this.
I'm not a PHP programmer, but I'll play around with the FlvFixer script and maybe I can add it myself. I rather have the PHP script, it gives me more control and I can add little things, like "duration" metadata that some video players require to be able to seek. |
#7
|
|||
|
|||
Re: FLV fixer scriptI've been playing around with the FlvFixer script for a while. I know that packet 2021, 4181, 8230 and 10607 are keyframes and I have currently hardcoded them as a test.
The code below works fine, it extracts the parts from keyframe 2021 to 4181 and from keyframe 8230 to 10607. The only problem I don't know how to solve is fixing the timestamps. The timestamps of the first part are fixed correctly, but not the second part. Is there an "easy" fix for that? Code:
while ($filePos < $fileLen) { $flvTag = fread($flvIn, $tagHeaderLen); $tagPos = 0; $packetType = ReadByte($flvTag, $tagPos); $packetSize = ReadInt24($flvTag, $tagPos + 1); $packetTS = ReadInt24($flvTag, $tagPos + 4); $packetTS = $packetTS | (ReadByte($flvTag, $tagPos + 7) << 24); $flvTag = $flvTag . fread($flvIn, $packetSize + $prevTagSize); $totalTagLen = $tagHeaderLen + $packetSize + $prevTagSize; if (strlen($flvTag) != $totalTagLen) { DebugLog("Broken FLV tag encountered! Aborting further processing."); break; } $PacketCount += 1; if (($PacketCount >= 2021 and $PacketCount <= 4181) or ($PacketCount >= 8230 and $PacketCount <= 10607)) { if (($baseTS === false) and (($packetType == AUDIO) or ($packetType == VIDEO))) $baseTS = $packetTS; if ($baseTS > 1000) { $packetTS -= $baseTS; WriteFlvTimestamp($flvTag, $tagPos, $packetTS); } switch ($packetType) { case AUDIO: if ($packetTS >= $prevAudioTS - TIMECODE_DURATION * 5) { $FrameInfo = ReadByte($flvTag, $tagPos + $tagHeaderLen); $CodecID = ($FrameInfo & 0xF0) >> 4; if ($CodecID == CODEC_ID_AAC) { $AAC_PacketType = ReadByte($flvTag, $tagPos + $tagHeaderLen + 1); if ($AAC_PacketType == AAC_SEQUENCE_HEADER) |
#8
|
|||
|
|||
Re: FLV fixer scriptQuote:
|
#9
|
|||
|
|||
Re: FLV fixer scriptUnfortunately not. AVIDemux is one of those tools that does not support Nellymoser audio, even though it's just raw file editing.
When I load the Flv video it first complains that no audio decoder can be found. When I try to save the video anyway it complains about unsupported audio and that saving the video has failed. |
#10
|
|||
|
|||
Re: FLV fixer scriptIMO trying to add editing capabilities (sort of) to this script is out of scope for it's intended purpose though you are free to play around with your copy.
|
Tags: flv fixer |
Thread Tools | |
Display Modes | |
|
|