Switch frame_editor to ABSL_FLAG.
Bug: webrtc:10616 Change-Id: I1576c6a615d6a9ea07db61027b9eccd3efb9dcca Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/137501 Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Cr-Commit-Position: refs/heads/master@{#28365}
This commit is contained in:

committed by
Commit Bot

parent
6d6b0fbe40
commit
beff53527b
@ -273,13 +273,15 @@ if (!build_with_chromium) {
|
||||
}
|
||||
|
||||
rtc_executable("frame_editor") {
|
||||
testonly = true
|
||||
sources = [
|
||||
"frame_editing/frame_editing.cc",
|
||||
]
|
||||
|
||||
deps = [
|
||||
":command_line_parser",
|
||||
":frame_editing_lib",
|
||||
"//third_party/abseil-cpp/absl/flags:flag",
|
||||
"//third_party/abseil-cpp/absl/flags:parse",
|
||||
]
|
||||
}
|
||||
|
||||
|
@ -13,89 +13,92 @@
|
||||
#include <string.h>
|
||||
#include <string>
|
||||
|
||||
#include "absl/flags/flag.h"
|
||||
#include "absl/flags/parse.h"
|
||||
#include "rtc_tools/frame_editing/frame_editing_lib.h"
|
||||
#include "rtc_tools/simple_command_line_parser.h"
|
||||
|
||||
ABSL_FLAG(std::string, in_path, "", "Path and filename to the input file");
|
||||
ABSL_FLAG(int32_t,
|
||||
width,
|
||||
-1,
|
||||
"Width in pixels of the frames in the input file");
|
||||
ABSL_FLAG(int32_t,
|
||||
height,
|
||||
-1,
|
||||
"Height in pixels of the frames in the input file");
|
||||
ABSL_FLAG(int32_t, f, -1, "First frame to process");
|
||||
ABSL_FLAG(int32_t,
|
||||
interval,
|
||||
-1,
|
||||
"Interval specifies with what ratio the number of frames should be "
|
||||
"increased or decreased with");
|
||||
ABSL_FLAG(int32_t, l, -1, "Last frame to process");
|
||||
ABSL_FLAG(std::string,
|
||||
out_path,
|
||||
"output.yuv",
|
||||
"The output file to which frames are written");
|
||||
|
||||
// A command-line tool to edit a YUV-video (I420 sub-sampled).
|
||||
int main(int argc, char* argv[]) {
|
||||
std::string program_name = argv[0];
|
||||
std::string usage =
|
||||
"Deletes a series of frames in a yuv file."
|
||||
" Only I420 is supported!\n"
|
||||
"Example usage:\n" +
|
||||
program_name +
|
||||
" --in_path=input.yuv --width=320 --height=240 --f=60 --interval=1 "
|
||||
"--l=120"
|
||||
" --out_path=edited_clip.yuv\n"
|
||||
"Command line flags:\n"
|
||||
"--in_path(string): Path and filename to the input file\n"
|
||||
"--width(int): Width in pixels of the frames in the input file."
|
||||
" Default: -1\n"
|
||||
"--height(int): Height in pixels of the frames in the input file."
|
||||
" Default: -1\n"
|
||||
"--f(int): First frame to process. Default: -1\n"
|
||||
"--l(int): Last frame to process. Default: -1\n"
|
||||
"Frame numbering starts at 1. The set of frames to be processed includes "
|
||||
"the frame with the number <f> and <l>.\n"
|
||||
"--interval(int): Interval specifies with what ratio the number of "
|
||||
"frames "
|
||||
"should be increased or decreased with.\n"
|
||||
"If you set <interval> to a positive number, frames between <f> and <l> "
|
||||
"will be inserted <interval> times."
|
||||
" If you set <interval> to a negative number then the amount of frames "
|
||||
"between <f> and <l> will be decreased with a ratio of abs(interval)."
|
||||
" Set interval=-1 if every frame between <f> and <l> should be "
|
||||
"deleted. Set interval=-2 if every second frame should be deleted, and "
|
||||
"so "
|
||||
"on. Frame numbering between <f> and <l> starts with 1 and frames with"
|
||||
" number n where (n - 1) % interval == 0 will be kept.\n"
|
||||
"Example 1:\n"
|
||||
"If one clip has 10 frames (1 to 10) and you specify <f>=4, <l>=7 and "
|
||||
"interval=2, then you will get a clip that contains frame "
|
||||
"1, 2, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 9 and 10.\n"
|
||||
"Example 2:\n"
|
||||
"If you specify f=4, l=7 and interval=-1, then you will get a clip that"
|
||||
" contains frame 1, 2, 3, 8, 9 and 10.\n"
|
||||
"Example 3:\n"
|
||||
"If one clip has 10 frames (1 to 10), and you specify f=1, l=10 and "
|
||||
" interval=-4, then you will get a clip that contains frame "
|
||||
"1, 5 and 9.\n"
|
||||
"No interpolation is done when up-sampling."
|
||||
" Default: -1\n"
|
||||
"--out_path(string): The output file to which frames are written."
|
||||
" Default: output.yuv\n";
|
||||
absl::ParseCommandLine(argc, argv);
|
||||
// TODO(bugs.webrtc.org/10616): Add program usage message when Abseil
|
||||
// flags supports it.
|
||||
// std::string usage =
|
||||
// "Deletes a series of frames in a yuv file."
|
||||
// " Only I420 is supported!\n"
|
||||
// "Example usage:\n" +
|
||||
// program_name +
|
||||
// " --in_path=input.yuv --width=320 --height=240 --f=60 --interval=1 "
|
||||
// "--l=120"
|
||||
// " --out_path=edited_clip.yuv\n"
|
||||
// "Command line flags:\n"
|
||||
// "--in_path(string): Path and filename to the input file\n"
|
||||
// "--width(int): Width in pixels of the frames in the input file."
|
||||
// " Default: -1\n"
|
||||
// "--height(int): Height in pixels of the frames in the input file."
|
||||
// " Default: -1\n"
|
||||
// "--f(int): First frame to process. Default: -1\n"
|
||||
// "--l(int): Last frame to process. Default: -1\n"
|
||||
// "Frame numbering starts at 1. The set of frames to be processed includes
|
||||
// " "the frame with the number <f> and <l>.\n"
|
||||
// "--interval(int): Interval specifies with what ratio the number of "
|
||||
// "frames "
|
||||
// "should be increased or decreased with.\n"
|
||||
// "If you set <interval> to a positive number, frames between <f> and <l>
|
||||
// " "will be inserted <interval> times."
|
||||
// " If you set <interval> to a negative number then the amount of frames "
|
||||
// "between <f> and <l> will be decreased with a ratio of abs(interval)."
|
||||
// " Set interval=-1 if every frame between <f> and <l> should be "
|
||||
// "deleted. Set interval=-2 if every second frame should be deleted, and "
|
||||
// "so "
|
||||
// "on. Frame numbering between <f> and <l> starts with 1 and frames with"
|
||||
// " number n where (n - 1) % interval == 0 will be kept.\n"
|
||||
// "Example 1:\n"
|
||||
// "If one clip has 10 frames (1 to 10) and you specify <f>=4, <l>=7 and "
|
||||
// "interval=2, then you will get a clip that contains frame "
|
||||
// "1, 2, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 9 and 10.\n"
|
||||
// "Example 2:\n"
|
||||
// "If you specify f=4, l=7 and interval=-1, then you will get a clip that"
|
||||
// " contains frame 1, 2, 3, 8, 9 and 10.\n"
|
||||
// "Example 3:\n"
|
||||
// "If one clip has 10 frames (1 to 10), and you specify f=1, l=10 and "
|
||||
// " interval=-4, then you will get a clip that contains frame "
|
||||
// "1, 5 and 9.\n"
|
||||
// "No interpolation is done when up-sampling."
|
||||
// " Default: -1\n"
|
||||
// "--out_path(string): The output file to which frames are written."
|
||||
// " Default: output.yuv\n";
|
||||
|
||||
webrtc::test::CommandLineParser parser;
|
||||
const std::string in_path = absl::GetFlag(FLAGS_in_path);
|
||||
int width = absl::GetFlag(FLAGS_width);
|
||||
int height = absl::GetFlag(FLAGS_height);
|
||||
int first_frame_to_cut = absl::GetFlag(FLAGS_f);
|
||||
int interval = absl::GetFlag(FLAGS_interval);
|
||||
int last_frame_to_cut = absl::GetFlag(FLAGS_l);
|
||||
|
||||
// Init the parser and set the usage message
|
||||
parser.Init(argc, argv);
|
||||
parser.SetUsageMessage(usage);
|
||||
parser.SetFlag("in_path", "-1");
|
||||
parser.SetFlag("width", "-1");
|
||||
parser.SetFlag("height", "-1");
|
||||
parser.SetFlag("f", "-1");
|
||||
parser.SetFlag("interval", "-1");
|
||||
parser.SetFlag("l", "-1");
|
||||
parser.SetFlag("out_path", "edited_output.yuv");
|
||||
parser.SetFlag("help", "false");
|
||||
const std::string out_path = absl::GetFlag(FLAGS_out_path);
|
||||
|
||||
parser.ProcessFlags();
|
||||
if (parser.GetFlag("help") == "true") {
|
||||
parser.PrintUsageMessage();
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
parser.PrintEnteredFlags();
|
||||
|
||||
const char* in_path = parser.GetFlag("in_path").c_str();
|
||||
int width = strtol((parser.GetFlag("width")).c_str(), NULL, 10);
|
||||
int height = strtol((parser.GetFlag("height")).c_str(), NULL, 10);
|
||||
int first_frame_to_cut = strtol((parser.GetFlag("f")).c_str(), NULL, 10);
|
||||
int interval = strtol((parser.GetFlag("interval")).c_str(), NULL, 10);
|
||||
int last_frame_to_cut = strtol((parser.GetFlag("l")).c_str(), NULL, 10);
|
||||
|
||||
const char* out_path = parser.GetFlag("out_path").c_str();
|
||||
|
||||
if (!strcmp(in_path, "-1")) {
|
||||
if (in_path.empty()) {
|
||||
fprintf(stderr, "You must specify a file to edit\n");
|
||||
return -1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user