void ConstructProbeArguments() { probeArguments.AddArg("-show_streams"); // Input file; Quotes around file string quotedInputFile = "\"" + InputFile + "\""; probeArguments.AddArg(quotedInputFile); }
void ConstructProbeArguments() { //probeArguments.AddArg("-show_streams"); // Input file - use short name to avoid UTF-8 issues string sInputFile = Functions.FileWriter.GetShortPathName(InputFile); string quotedInputFile = "\"" + sInputFile + "\""; probeArguments.AddArgCouple("-i", quotedInputFile); // Redirect to temp file string quotedTempFile = "\"" + TempFile + "\""; probeArguments.AddArgCouple(">", quotedTempFile); probeArguments.AddArg("2>&1"); //http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true }
/* * C:\Program Files (x86)\AirVideoServer\ffmpeg.exe" * --segment-length 4 * --segment-offset 188 * --conversion-id 548cf790-c04f-488a-96be-aae2968f272bdefd0e1d-2bdf-457d-ab15-3eb6c51ccf85 * --port-number 46631 * -threads 4 * -flags +loop * -g 30 -keyint_min 1 * -bf 0 * -b_strategy 0 * -flags2 -wpred-dct8x8 -cmp +chroma -deblockalpha 0 -deblockbeta 0 -refs 1 -coder 0 -me_range 16 -subq 5 -partitions +parti4x4+parti8x8+partp8x8 * -trellis 0 * -sc_threshold 40 -i_qfactor 0.71 -qcomp 0.6 -map 0.1:0.1 -map 0.0:0.0 -ss 188.0 * -vf "crop=720:572:0:2, scale=568:320" * -aspect 720:576 * -y * -async 1 * -f mpegts * -vcodec libx264 * -bufsize 1024k * -b 1200k * -bt 1300k * -qmax 48 * -qmin 2 * -r 25.0 * -acodec libmp3lame * -ab 192k * -ar 48000 * -ac 2 */ void ConstructArguments() { // Use either the standard ffmpeg template or a custom one string strFFMpegTemplate = (string.IsNullOrWhiteSpace(EncodingParameters.CustomFFMpegTemplate)) ? @"{THREADS} {H264PROFILE} {H264LEVEL} -flags +loop -g 30 -keyint_min 1 -bf 0 -b_strategy 0 -flags2 -wpred-dct8x8 -cmp +chroma -deblockalpha 0 -deblockbeta 0 -refs 1 {MOTIONSEARCHRANGE} {SUBQ} {PARTITIONS} -trellis 0 -coder 0 -sc_threshold 40 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -rc_eq 'blurCplx^(1-qComp)' {MAPPINGS} {STARTTIME} {INPUTFILE} {ASPECT} {FRAMESIZE} {DEINTERLACE} -y {AUDIOSYNC} -f mpegts -vcodec libx264 {VIDEOBITRATE} {VIDEOBITRATEDEVIATION} -qmax 48 -qmin 2 -r 25 {AUDIOCODEC} {AUDIOBITRATE} {AUDIOSAMPLERATE} {AUDIOCHANNELS} {VOLUMELEVEL}" : EncodingParameters.CustomFFMpegTemplate; // Segment length and offset segmentArguments.AddArgCouple("--segment-length", EncodingParameters.SegmentDuration.ToString()); segmentArguments.AddArgCouple("--segment-offset", StartAtSeconds.ToString()); cmdArguments.AddArg(segmentArguments.ToString()); // Multi threads strFFMpegTemplate = strFFMpegTemplate.Replace("{THREADS}", "-threads 4"); // Me Range strFFMpegTemplate = strFFMpegTemplate.Replace("{MOTIONSEARCHRANGE}", ("-me_range " + EncodingParameters.MotionSearchRange.ToString())); // SUBQ - important as setting it too high can slow things down strFFMpegTemplate = strFFMpegTemplate.Replace("{SUBQ}", ("-subq " + EncodingParameters.X264SubQ.ToString())); // Partitions string strPartitions = (EncodingParameters.PartitionsFlags.Length > 0) ? "-partitions " + EncodingParameters.PartitionsFlags : ""; strFFMpegTemplate = strFFMpegTemplate.Replace("{PARTITIONS}", strPartitions); // Add Mappings string strMapArgs = (string.IsNullOrEmpty(MapArgumentsString)) ? "" : MapArgumentsString; strFFMpegTemplate = strFFMpegTemplate.Replace("{MAPPINGS}", strMapArgs); // Start at : MUST BE BEFORE INPUT FILE FLAG -i *** !!! string strStartTime = (StartAtSeconds <= 0) ? "" : ("-ss " + StartAtSeconds.ToString()); strFFMpegTemplate = strFFMpegTemplate.Replace("{STARTTIME}", strStartTime); // Input file - make short to avoid issues with UTF-8 in batch files IT IS VERY IMPORTANT WHERE THIS GOES; AFTER SS BUT BEFORE VCODEC AND ACODEC string shortInputFile = Functions.FileWriter.GetShortPathName(InputFile); // Quotes around file string quotedInputFile = "\"" + shortInputFile + "\""; strFFMpegTemplate = strFFMpegTemplate.Replace("{INPUTFILE}", ("-i " + quotedInputFile)); // Aspect ratio and frame size string strAspectRatio = (EncodingParameters.OutputSquarePixels) ? "-aspect 1:1" : "-aspect " + EncodingParameters.AspectRatio; strFFMpegTemplate = strFFMpegTemplate.Replace("{ASPECT}", strAspectRatio); string strFrameSize = "-s " + EncodingParameters.ConstrainedSize; strFFMpegTemplate = strFFMpegTemplate.Replace("{FRAMESIZE}", strFrameSize); // Deinterlace (experimental) string strDeinterlace = (EncodingParameters.DeInterlace) ? "-deinterlace" : ""; strFFMpegTemplate = strFFMpegTemplate.Replace("{DEINTERLACE}", strDeinterlace); // OPTIONAL FOR LATER: -vf "crop=720:572:0:2, scale=568:320" // Think this means crop to the aspect ratio, then scale to the normal frame // Audio sync amount string strAudioSync = "-async " + AudioSyncAmount.ToString(); strFFMpegTemplate = strFFMpegTemplate.Replace("{AUDIOSYNC}", strAudioSync); // Video bitrate string strVideoBitRateOptions = "-bufsize " + EncodingParameters.VideoBitRate + " -b " + EncodingParameters.VideoBitRate; //cmdArguments.AddArgCouple("-maxrate", VideoBitRate); strFFMpegTemplate = strFFMpegTemplate.Replace("{VIDEOBITRATE}", strVideoBitRateOptions); // Max video bitrate (optional) string strMaxVideoBitRate = "-maxrate " + EncodingParameters.VideoBitRate; strFFMpegTemplate = strFFMpegTemplate.Replace("{MAXVIDEOBITRATE}", strMaxVideoBitRate); string strVideoBitRateDeviation = "-bt " + EncodingParameters.BitRateDeviation; strFFMpegTemplate = strFFMpegTemplate.Replace("{VIDEOBITRATEDEVIATION}", strVideoBitRateDeviation); // Restrict H264 encoding level (e.g. for iPhone 3G) string strH264Level = (EncodingParameters.X264Level > 0) ? ("-level " + EncodingParameters.X264Level.ToString()) : ""; strFFMpegTemplate = strFFMpegTemplate.Replace("{H264LEVEL}", strH264Level); string strH264Profile = (string.IsNullOrWhiteSpace(EncodingParameters.X264Profile)) ? "" : "-profile " + EncodingParameters.X264Profile; strFFMpegTemplate = strFFMpegTemplate.Replace("{H264PROFILE}", strH264Profile); // Audio: MP3 - must be after input file flag -i // string strAudioCodecOptions = ""; switch (EncodingParameters.AudioCodec) { case VideoEncodingParameters.AudioCodecTypes.AAC: strAudioCodecOptions = "-acodec aac -strict experimental"; break; default: strAudioCodecOptions = "-acodec libmp3lame"; break; //// "libfaac"); } strFFMpegTemplate = strFFMpegTemplate.Replace("{AUDIOCODEC}", strAudioCodecOptions); // Audio Bitrate string strAudioBitRate = "-ab " + EncodingParameters.AudioBitRate; strFFMpegTemplate = strFFMpegTemplate.Replace("{AUDIOBITRATE}", strAudioBitRate); // Audio sample rate string strAudioSampleRate = "-ar " + EncodingParameters.AudioSampleRate; strFFMpegTemplate = strFFMpegTemplate.Replace("{AUDIOSAMPLERATE}", strAudioSampleRate); // Force stereo string strAudioChannels = "-ac 2"; strFFMpegTemplate = strFFMpegTemplate.Replace("{AUDIOCHANNELS}", strAudioChannels); // Volume Level string strVolumeBoost = ""; if (EncodingParameters.AudioVolumePercent != 100) { double fVolumeBytes = (256.0 * (EncodingParameters.AudioVolumePercent / 100.0)); int iVolumeBytes = Convert.ToInt32(fVolumeBytes); strVolumeBoost = "-vol " + iVolumeBytes.ToString(); } strFFMpegTemplate = strFFMpegTemplate.Replace("{VOLUMELEVEL}", strVolumeBoost); // Pipe to segmenter (ie send to standard output now) strFFMpegTemplate = strFFMpegTemplate + " -"; // Commit - add to the arguments cmdArguments.AddArg(strFFMpegTemplate); }
void AddStreamToMap(AVStream strm) { mapArguments.AddArg("-map 0:" + strm.StreamIndex.ToString()); }