1
我正在用C語言編寫視頻轉換守護進程。它使用execvp調用ffmpeg。動態生成ffmpeg參數列表C
我創建了一個名爲「ffmpeg_job」的結構體,它表示要完成的轉換作業。我想爲每個作業動態地分配參數給ffmpeg,以便在作業完成後我可以釋放這些結構中的一個和它的參數列表。
我開始編寫動態分配參數列表的函數,但我覺得我正在做的這種方式很幼稚。代碼如下。
有沒有更好的方法來做到這一點?
編輯:我現在在想,我將有參數的靜態字符串列表,每個質量水平,那麼sprintf的整合而且它strtok函數到一個char **
char ** generate_arguments(
char *filepath,
ph5v_format format,
ph5v_quality quality)
{
char ** arguments;
if (format == ph5v_MP4) {
mp4_arguments = {
"-i", "%%INPUT FILEPATH 1",
"-vcodec", "libx264",
"-preset", "%%X264 PRESET 5",
"-b:v", "%%VIDEO BITRATE 7",
"-strict", "-2",
"-acodec", "aac",
"-b:a", "%%AUDIO BITRATE 13",
"-ar", "%%AUDIO SAMPLERATE 15",
"-ac", "2",
"-y", "%%OUTPUT FILEPATH 19"
}
arguments = malloc(sizeof(char*) * 20);
int i;
for (i = 0; i < 20; i++) {
if (i == 1) {
char *argument = malloc(strlen(filepath) + 1);
strcpy(argument, filepath);
arguments[1] = argument;
} else if (i == 5) {
if (quality == ph5v_LOW || quality == ph5v_MEDIUM) {
char *argument = malloc(strlen("fast") + 1);
strcpy(argument, "fast");
arguments[5] = argument;
} else if (quality == ph5v_HIGH || quality == ph5v_ULTRA) {
char *argument = malloc(strlen("medium") + 1);
strcpy(argument, "medium");
arguments[5] = argument;
}
} else if (i == 7) {
if (quality ==
.
.
.
定義結構數組我結束了我的想法去的printf-ING進入分配給每個一些巨大的字符串格式和質量的排列,然後標記它們。不過,我應該接受你認真對待的答案。 – OregonTrail 2013-03-06 05:00:45